openbox/otk_c/gccache.h

99 lines
2.2 KiB
C
Raw Normal View History

// -*- mode: C; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2002-12-21 02:09:54 +00:00
#ifndef __gccache_h
#define __gccache_h
#include <X11/Xlib.h>
#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;
2002-12-21 12:04:15 +00:00
int screen;
2002-12-21 02:09:54 +00:00
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;
2002-12-21 12:27:05 +00:00
void OtkGCCache_Initialize();
//void OtkGCCache_Destroy();
2002-12-21 02:09:54 +00:00
// 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