From: <bra...@us...> - 2003-11-28 12:59:13
|
Update of /cvsroot/blackboxwm/blackbox/lib In directory sc8-pr-cvs1:/tmp/cvs-serv3655/lib Modified Files: Pen.cc Pen.hh Texture.cc Log Message: 1. remove all use of Font and fontid from the Pen/PenCache (no longer needed). 2. add bt::Pen::setLineWidth(int), to allow drawing with various linewidth 3. use the above to draw resize/move frames using the styles borderWidth... Index: Pen.cc =================================================================== RCS file: /cvsroot/blackboxwm/blackbox/lib/Pen.cc,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** Pen.cc 19 Nov 2003 14:46:18 -0000 1.14 --- Pen.cc 28 Nov 2003 12:59:09 -0000 1.15 *************** *** 26,30 **** #include "Display.hh" #include "Color.hh" - #include "Font.hh" #include "Util.hh" --- 26,29 ---- *************** *** 84,100 **** public: inline PenCacheContext(void) ! : _screen(~0u), _gc(0), _fontid(0ul), _function(0), ! _subwindow(0), _used(false) { } ~PenCacheContext(void); ! void set(const Color &color, const unsigned long fontid, ! const int function, const int subwindow); ! void set(const unsigned long fontid); unsigned int _screen; GC _gc; Color _color; - unsigned long _fontid; int _function; int _subwindow; bool _used; --- 83,98 ---- public: inline PenCacheContext(void) ! : _screen(~0u), _gc(0), _function(0), _linewidth(1), _subwindow(0), ! _used(false) { } ~PenCacheContext(void); ! void set(const Color &color, const int function, const int linewidth, ! const int subwindow); unsigned int _screen; GC _gc; Color _color; int _function; + int _linewidth; int _subwindow; bool _used; *************** *** 154,159 **** PenCacheItem *find(unsigned int screen, const Color &color, - const unsigned long fontid, int function, int subwindow); void release(PenCacheItem *item); --- 152,157 ---- PenCacheItem *find(unsigned int screen, const Color &color, int function, + int linewidth, int subwindow); void release(PenCacheItem *item); *************** *** 198,213 **** void bt::PenCacheContext::set(const Color &color, ! const unsigned long fontid, ! const int function, ! const int subwindow) { XGCValues gcv; - _fontid = gcv.font = fontid; _color = color; gcv.foreground = _color.pixel(_screen); _function = gcv.function = function; _subwindow = gcv.subwindow_mode = subwindow; - unsigned long mask = GCForeground | GCFunction | GCSubwindowMode; ! if (fontid) mask |= GCFont; XChangeGC(pencache->_display.XDisplay(), _gc, mask, &gcv); --- 196,211 ---- void bt::PenCacheContext::set(const Color &color, ! const int function, ! const int linewidth, ! const int subwindow) { XGCValues gcv; _color = color; gcv.foreground = _color.pixel(_screen); _function = gcv.function = function; + _linewidth = gcv.line_width = linewidth; _subwindow = gcv.subwindow_mode = subwindow; ! unsigned long mask = ! (GCForeground | GCFunction | GCLineWidth | GCSubwindowMode); XChangeGC(pencache->_display.XDisplay(), _gc, mask, &gcv); *************** *** 215,225 **** - void bt::PenCacheContext::set(const unsigned long fontid) { - XGCValues gcv; - _fontid = gcv.font = fontid; - if (fontid) XChangeGC(pencache->_display.XDisplay(), _gc, GCFont, &gcv); - } - - #ifdef XFT bt::XftCacheContext::~XftCacheContext(void) { --- 213,216 ---- *************** *** 312,319 **** bt::PenCacheItem *bt::PenCache::find(unsigned int screen, ! const Color &color, ! const unsigned long fontid, ! int function, ! int subwindow) { int k = color.red() ^ color.green() ^ color.blue(); k = (screen * context_count) + ((k % cache_size) * cache_buckets); --- 303,310 ---- bt::PenCacheItem *bt::PenCache::find(unsigned int screen, ! const Color &color, ! int function, ! int linewidth, ! int subwindow) { int k = color.red() ^ color.green() ^ color.blue(); k = (screen * context_count) + ((k % cache_size) * cache_buckets); *************** *** 325,331 **** it will stop matching */ ! while (c->_ctx && ! (c->_ctx->_color != color || c->_ctx->_function != function || ! c->_ctx->_subwindow != subwindow || c->_ctx->_screen != screen)) { if (i < (cache_buckets - 1)) { prev = c; --- 316,324 ---- it will stop matching */ ! while (c->_ctx ! && (c->_ctx->_color != color ! || c->_ctx->_function != function ! || c->_ctx->_linewidth != linewidth ! || c->_ctx->_subwindow != subwindow)) { if (i < (cache_buckets - 1)) { prev = c; *************** *** 337,341 **** // printf("GC : k %03d hijack\n", k); // use this cache item ! c->_ctx->set(color, fontid, function, subwindow); c->_ctx->_used = true; c->_count = 1; --- 330,334 ---- // printf("GC : k %03d hijack\n", k); // use this cache item ! c->_ctx->set(color, function, linewidth, subwindow); c->_ctx->_used = true; c->_count = 1; *************** *** 354,359 **** // printf("GC : k %03d cache hit\n", k); // reuse existing context - if (fontid && fontid != c->_ctx->_fontid) - c->_ctx->set(fontid); c->_count++; c->_hits++; --- 347,350 ---- *************** *** 365,369 **** // printf("GC : k %03d new context\n", k); c->_ctx = nextContext(screen); ! c->_ctx->set(color, fontid, function, subwindow); c->_ctx->_used = true; c->_count = 1; --- 356,360 ---- // printf("GC : k %03d new context\n", k); c->_ctx = nextContext(screen); ! c->_ctx->set(color, function, linewidth, subwindow); c->_ctx->_used = true; c->_count = 1; *************** *** 479,485 **** bt::Pen::Pen(unsigned int screen_, const Color &color_) ! : _screen(screen_), _color(color_), _fontid(0ul), ! _function(GXcopy), _subwindow(ClipByChildren), ! _item(0), _xftitem(0) { } --- 470,475 ---- bt::Pen::Pen(unsigned int screen_, const Color &color_) ! : _screen(screen_), _color(color_), _function(GXcopy), _linewidth(0), ! _subwindow(ClipByChildren), _item(0), _xftitem(0) { } *************** *** 504,507 **** --- 494,505 ---- + void bt::Pen::setLineWidth(int linewidth) { + if (_item) pencache->release(_item); + _item = 0; + + _linewidth = linewidth; + } + + void bt::Pen::setSubWindowMode(int subwindow) { if (_item) pencache->release(_item); *************** *** 522,526 **** const GC &bt::Pen::gc(void) const { if (! _item) ! _item = pencache->find(_screen, _color, _fontid, _function, _subwindow); assert(_item != 0); return _item->gc(); --- 520,525 ---- const GC &bt::Pen::gc(void) const { if (! _item) ! _item = pencache->find(_screen, _color, ! _function, _linewidth, _subwindow); assert(_item != 0); return _item->gc(); Index: Pen.hh =================================================================== RCS file: /cvsroot/blackboxwm/blackbox/lib/Pen.hh,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** Pen.hh 19 Nov 2003 14:46:18 -0000 1.9 --- Pen.hh 28 Nov 2003 12:59:09 -0000 1.10 *************** *** 35,39 **** class Color; class Display; - class Font; class PenCacheItem; class XftCacheItem; --- 35,38 ---- *************** *** 50,53 **** --- 49,53 ---- void setGCFunction(int function); + void setLineWidth(int linewidth); void setSubWindowMode(int subwindow); *************** *** 62,67 **** const Color &_color; - unsigned long _fontid; int _function; int _subwindow; --- 62,67 ---- const Color &_color; int _function; + int _linewidth; int _subwindow; Index: Texture.cc =================================================================== RCS file: /cvsroot/blackboxwm/blackbox/lib/Texture.cc,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** Texture.cc 3 Nov 2003 16:16:45 -0000 1.22 --- Texture.cc 28 Nov 2003 12:59:09 -0000 1.23 *************** *** 201,208 **** trect.top() == urect.top() || trect.bottom() == urect.bottom())) { Pen penborder(screen, texture.borderColor()); ! for (int i = 0, d = 0; i < bw; ++i, d += 2) ! XDrawRectangle(pen.XDisplay(), drawable, penborder.gc(), ! trect.left() + i, trect.top() + i, ! trect.width() - d - 1, trect.height() - d - 1); } --- 201,208 ---- trect.top() == urect.top() || trect.bottom() == urect.bottom())) { Pen penborder(screen, texture.borderColor()); ! penborder.setLineWidth(bw); ! XDrawRectangle(pen.XDisplay(), drawable, penborder.gc(), ! trect.x() + bw / 2, trect.y() + bw / 2, ! trect.width() - bw, trect.height() - bw); } |