// -*- mode: C; indent-tabs-mode: nil; c-basic-offset: 2; -*- #ifndef __gccache_h #define __gccache_h #include #include "display.h" #include "color.h" struct OtkGCCacheItem; typedef struct OtkGCCacheContext { GC gc; unsigned long pixel; unsigned long fontid; int function; int subwindow; Bool used; int screen; int linewidth; } OtkGCCacheContext; OtkGCCacheContext *OtkGCCacheContext_New(); void OtkGCCacheContext_Destroy(OtkGCCacheContext *self); void OtkGCCacheContext_Set(OtkGCCacheContext *self, OtkColor *color, XFontStruct *font, int function, int subwindow, int linewidth); void OtkGCCacheContext_SetFont(OtkGCCacheContext *self, XFontStruct *font); typedef struct OtkGCCacheItem { OtkGCCacheContext *ctx; unsigned int count; unsigned int hits; Bool fault; } OtkGCCacheItem; OtkGCCacheItem *OtkGCCacheItem_New(); typedef struct OtkGCCache { // this is closely modelled after the Qt GC cache, but with some of the // complexity stripped out unsigned int context_count; unsigned int cache_size; unsigned int cache_buckets; unsigned int cache_total_size; OtkGCCacheContext **contexts; OtkGCCacheItem **cache; } OtkGCCache; void OtkGCCache_Initialize(); //void OtkGCCache_Destroy(); // cleans up the cache void OtkGCCache_Purge(); OtkGCCacheItem *OtkGCCache_Find(OtkColor *color, XFontStruct *font, int function, int subwindow, int linewidth); void OtkGCCache_Release(OtkGCCacheItem *item); /* class BPen { public: inline BPen(const BColor &_color, const XFontStruct * const _font = 0, int _linewidth = 0, int _function = GXcopy, int _subwindow = ClipByChildren) : color(_color), font(_font), linewidth(_linewidth), function(_function), subwindow(_subwindow), cache(OBDisplay::gcCache()), item(0) { } inline ~BPen(void) { if (item) cache->release(item); } inline const GC &gc(void) const { if (! item) item = cache->find(color, font, function, subwindow, linewidth); return item->gc(); } private: const BColor &color; const XFontStruct *font; int linewidth; int function; int subwindow; mutable BGCCache *cache; mutable BGCCacheItem *item; }; }*/ #endif // __gccache_h