summaryrefslogtreecommitdiffstats
path: root/generic/tkTreeUtils.c
diff options
context:
space:
mode:
authortreectrl <treectrl>2006-12-06 00:03:21 (GMT)
committertreectrl <treectrl>2006-12-06 00:03:21 (GMT)
commit4204b2f78309da5ae8fc5a788ba3489655d442de (patch)
tree48abeb3192639b7603c5268b45555ce3141f39b3 /generic/tkTreeUtils.c
parent77ac4fe60485a11fd2fd7ee06625ca33401d4671 (diff)
downloadtktreectrl-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.c54
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;