diff options
author | treectrl <treectrl> | 2006-12-06 00:03:21 (GMT) |
---|---|---|
committer | treectrl <treectrl> | 2006-12-06 00:03:21 (GMT) |
commit | 4204b2f78309da5ae8fc5a788ba3489655d442de (patch) | |
tree | 48abeb3192639b7603c5268b45555ce3141f39b3 /generic/tkTreeUtils.c | |
parent | 77ac4fe60485a11fd2fd7ee06625ca33401d4671 (diff) | |
download | tktreectrl-4204b2f78309da5ae8fc5a788ba3489655d442de.zip tktreectrl-4204b2f78309da5ae8fc5a788ba3489655d442de.tar.gz tktreectrl-4204b2f78309da5ae8fc5a788ba3489655d442de.tar.bz2 |
Renamed the 2 PerStateGC_xxx functions since they had nothing to do with per-state options. Call the renamed functions from several places where GCs are used. Removed ElementText.gc to save some more memory.
Diffstat (limited to 'generic/tkTreeUtils.c')
-rw-r--r-- | generic/tkTreeUtils.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/generic/tkTreeUtils.c b/generic/tkTreeUtils.c index 5bc32b6..2b81889 100644 --- a/generic/tkTreeUtils.c +++ b/generic/tkTreeUtils.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2006 Tim Baker * - * RCS: @(#) $Id: tkTreeUtils.c,v 1.57 2006/12/04 05:50:38 treectrl Exp $ + * RCS: @(#) $Id: tkTreeUtils.c,v 1.58 2006/12/06 00:03:22 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -437,7 +437,7 @@ DrawActiveOutline( gcValues.function = GXinvert; #endif gcMask = GCFunction; - gc = Tk_GetGC(tree->tkwin, gcMask, &gcValues); + gc = Tree_GetGC(tree, gcMask, &gcValues); if (w) /* left */ { @@ -467,8 +467,6 @@ DrawActiveOutline( XDrawPoint(tree->display, drawable, gc, x + i, y + height - 1); } } - - Tk_FreeGC(tree->display, gc); #endif } @@ -2561,28 +2559,16 @@ int PerStateInfo_Undefine( /*****/ -void PerStateGC_Free(TreeCtrl *tree, struct PerStateGC **pGCPtr) -{ - struct PerStateGC *pGC = (*pGCPtr), *next; - - while (pGC != NULL) { - next = pGC->next; - Tk_FreeGC(tree->display, pGC->gc); - WFREE(pGC, struct PerStateGC); - pGC = next; - } - (*pGCPtr) = NULL; -} - -GC PerStateGC_Get(TreeCtrl *tree, struct PerStateGC **pGCPtr, unsigned long mask, XGCValues *gcValues) +GC Tree_GetGC(TreeCtrl *tree, unsigned long mask, XGCValues *gcValues) { - struct PerStateGC *pGC; + GCCache *pGC; + unsigned long valid = GCFont | GCForeground | GCFunction | GCBackground + | GCGraphicsExposures; - if ((mask | (GCFont | GCForeground | GCBackground | GCGraphicsExposures)) != - (GCFont | GCForeground | GCBackground | GCGraphicsExposures)) - panic("PerStateGC_Get: unsupported mask"); + if ((mask | valid) != valid) + panic("GCCache_Get: unsupported mask"); - for (pGC = (*pGCPtr); pGC != NULL; pGC = pGC->next) { + for (pGC = tree->gcCache; pGC != NULL; pGC = pGC->next) { if (mask != pGC->mask) continue; if ((mask & GCFont) && @@ -2591,6 +2577,9 @@ GC PerStateGC_Get(TreeCtrl *tree, struct PerStateGC **pGCPtr, unsigned long mask if ((mask & GCForeground) && (pGC->gcValues.foreground != gcValues->foreground)) continue; + if ((mask & GCFunction) && + (pGC->gcValues.function != gcValues->function)) + continue; if ((mask & GCBackground) && (pGC->gcValues.background != gcValues->background)) continue; @@ -2600,16 +2589,29 @@ GC PerStateGC_Get(TreeCtrl *tree, struct PerStateGC **pGCPtr, unsigned long mask return pGC->gc; } - pGC = (struct PerStateGC *) ckalloc(sizeof(*pGC)); + pGC = (GCCache *) ckalloc(sizeof(*pGC)); pGC->gcValues = (*gcValues); pGC->mask = mask; pGC->gc = Tk_GetGC(tree->tkwin, mask, gcValues); - pGC->next = (*pGCPtr); - (*pGCPtr) = pGC; + pGC->next = tree->gcCache; + tree->gcCache = pGC; return pGC->gc; } +void Tree_FreeAllGC(TreeCtrl *tree) +{ + GCCache *pGC = tree->gcCache, *next; + + while (pGC != NULL) { + next = pGC->next; + Tk_FreeGC(tree->display, pGC->gc); + WFREE(pGC, GCCache); + pGC = next; + } + tree->gcCache = NULL; +} + /*****/ typedef struct PerStateDataBitmap PerStateDataBitmap; |