diff options
Diffstat (limited to 'generic/tkStyle.c')
-rw-r--r-- | generic/tkStyle.c | 817 |
1 files changed, 358 insertions, 459 deletions
diff --git a/generic/tkStyle.c b/generic/tkStyle.c index e802dde..80d4e59 100644 --- a/generic/tkStyle.c +++ b/generic/tkStyle.c @@ -1,4 +1,4 @@ -/* +/* * tkStyle.c -- * * This file implements the widget styles and themes support. @@ -6,96 +6,91 @@ * Copyright (c) 1990-1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tkInt.h" /* - * The following structure is used to cache widget option specs matching an + * The following structure is used to cache widget option specs matching an * element's required options defined by Tk_ElementOptionSpecs. It also holds * information behind Tk_StyledElement opaque tokens. */ typedef struct StyledWidgetSpec { - struct StyledElement *elementPtr; /* Pointer to the element holding this - * structure. */ - Tk_OptionTable optionTable; /* Option table for the widget class - * using the element. */ - CONST Tk_OptionSpec **optionsPtr; /* Table of option spec pointers, - * matching the option list provided - * during element registration. - * Malloc'd. */ + struct StyledElement *elementPtr; + /* Pointer to the element holding this + * structure. */ + Tk_OptionTable optionTable; /* Option table for the widget class using the + * element. */ + CONST Tk_OptionSpec **optionsPtr; + /* Table of option spec pointers, matching the + * option list provided during element + * registration. Malloc'd. */ } StyledWidgetSpec; /* - * Elements are declared using static templates. But static - * information must be completed by dynamic information only - * accessible at runtime. For each registered element, an instance of - * the following structure is stored in each style engine and used to - * cache information about the widget types (identified by their - * optionTable) that use the given element. + * Elements are declared using static templates. But static information must + * be completed by dynamic information only accessible at runtime. For each + * registered element, an instance of the following structure is stored in + * each style engine and used to cache information about the widget types + * (identified by their optionTable) that use the given element. */ typedef struct StyledElement { - struct Tk_ElementSpec *specPtr; - /* Filled with template provided during - * registration. NULL means no implementation - * is available for the current engine. */ - int nbWidgetSpecs; /* Size of the array below. Number of distinct - * widget classes (actually, distinct option + struct Tk_ElementSpec *specPtr; + /* Filled with template provided during + * registration. NULL means no implementation + * is available for the current engine. */ + int nbWidgetSpecs; /* Size of the array below. Number of distinct + * widget classes (actually, distinct option * tables) that used the element so far. */ - StyledWidgetSpec *widgetSpecs; + StyledWidgetSpec *widgetSpecs; /* See above for the structure definition. - * Table grows dynamically as new widgets - * use the element. Malloc'd. */ + * Table grows dynamically as new widgets use + * the element. Malloc'd. */ } StyledElement; /* - * The following structure holds information behind Tk_StyleEngine opaque + * The following structure holds information behind Tk_StyleEngine opaque * tokens. */ typedef struct StyleEngine { CONST char *name; /* Name of engine. Points to a hash key. */ - StyledElement *elements; /* Table of widget element descriptors. Each - * element is indexed by a unique system-wide - * ID. Table grows dynamically as new elements + StyledElement *elements; /* Table of widget element descriptors. Each + * element is indexed by a unique system-wide + * ID. Table grows dynamically as new elements * are registered. Malloc'd*/ - struct StyleEngine *parentPtr; - /* Parent engine. Engines may be layered to form - * a fallback chain, terminated by the default - * system engine. */ + struct StyleEngine *parentPtr; + /* Parent engine. Engines may be layered to + * form a fallback chain, terminated by the + * default system engine. */ } StyleEngine; /* - * Styles are instances of style engines. The following structure holds + * Styles are instances of style engines. The following structure holds * information behind Tk_Style opaque tokens. */ typedef struct Style { - int refCount; /* Number of active uses of this style. - * If this count is 0, then this Style - * structure is no longer valid. */ - Tcl_HashEntry *hashPtr; /* Entry in style table for this structure, - * used when deleting it. */ CONST char *name; /* Name of style. Points to a hash key. */ - StyleEngine *enginePtr; /* Style engine of which the style is an + StyleEngine *enginePtr; /* Style engine of which the style is an * instance. */ ClientData clientData; /* Data provided during registration. */ } Style; /* - * Each registered element uses an instance of the following structure. + * Each registered element uses an instance of the following structure. */ typedef struct Element { CONST char *name; /* Name of element. Points to a hash key. */ int id; /* Id of element. */ int genericId; /* Id of generic element. */ - int created; /* Boolean, whether the element was created - * explicitly (was registered) or implicitly + int created; /* Boolean, whether the element was created + * explicitly (was registered) or implicitly * (by a derived element). */ } Element; @@ -105,66 +100,54 @@ typedef struct Element { typedef struct ThreadSpecificData { int nbInit; /* Number of calls to the init proc. */ - Tcl_HashTable engineTable; /* Map a name to a style engine. Keys are - * strings, values are Tk_StyleEngine + Tcl_HashTable engineTable; /* Map a name to a style engine. Keys are + * strings, values are Tk_StyleEngine * pointers. */ - StyleEngine *defaultEnginePtr; - /* Default, core-defined style engine. Global + StyleEngine *defaultEnginePtr; + /* Default, core-defined style engine. Global * fallback for all engines. */ - Tcl_HashTable styleTable; /* Map a name to a style. Keys are strings, + Tcl_HashTable styleTable; /* Map a name to a style. Keys are strings, * values are Tk_Style pointers.*/ int nbElements; /* Size of the below tables. */ - Tcl_HashTable elementTable; /* Map a name to an element Id. Keys are + Tcl_HashTable elementTable; /* Map a name to an element Id. Keys are * strings, values are integer element IDs. */ - Element *elements; /* Array of Elements. */ + Element *elements; /* Array of Elements. */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* - * Forward declarations for procedures defined later in this file: + * Forward declarations for functions defined later in this file: */ -/* TODO: sort alpha. */ -static int CreateElement _ANSI_ARGS_((CONST char *name, - int create)); -static void DupStyleObjProc _ANSI_ARGS_((Tcl_Obj *srcObjPtr, - Tcl_Obj *dupObjPtr)); -static void FreeElement _ANSI_ARGS_((Element *elementPtr)); -static void FreeStyle _ANSI_ARGS_((Style *stylePtr)); -static void FreeStyledElement _ANSI_ARGS_(( - StyledElement *elementPtr)); -static void FreeStyleEngine _ANSI_ARGS_(( - StyleEngine *enginePtr)); -static void FreeStyleObjProc _ANSI_ARGS_((Tcl_Obj *objPtr)); -static void FreeWidgetSpec _ANSI_ARGS_(( - StyledWidgetSpec *widgetSpecPtr)); -static StyledElement * GetStyledElement _ANSI_ARGS_(( - StyleEngine *enginePtr, int elementId)); -static StyledWidgetSpec * GetWidgetSpec _ANSI_ARGS_((StyledElement *elementPtr, - Tk_OptionTable optionTable)); -static void InitElement _ANSI_ARGS_((Element *elementPtr, - CONST char *name, int id, int genericId, - int created)); -static void InitStyle _ANSI_ARGS_((Style *stylePtr, - Tcl_HashEntry *hashPtr, CONST char *name, - StyleEngine *enginePtr, ClientData clientData)); -static void InitStyledElement _ANSI_ARGS_(( - StyledElement *elementPtr)); -static void InitStyleEngine _ANSI_ARGS_((StyleEngine *enginePtr, - CONST char *name, StyleEngine *parentPtr)); -static void InitWidgetSpec _ANSI_ARGS_(( - StyledWidgetSpec *widgetSpecPtr, - StyledElement *elementPtr, - Tk_OptionTable optionTable)); -static int SetStyleFromAny _ANSI_ARGS_((Tcl_Interp *interp, - Tcl_Obj *objPtr)); +static int CreateElement(CONST char *name, int create); +static void DupStyleObjProc(Tcl_Obj *srcObjPtr, + Tcl_Obj *dupObjPtr); +static void FreeElement(Element *elementPtr); +static void FreeStyledElement(StyledElement *elementPtr); +static void FreeStyleEngine(StyleEngine *enginePtr); +static void FreeStyleObjProc(Tcl_Obj *objPtr); +static void FreeWidgetSpec(StyledWidgetSpec *widgetSpecPtr); +static StyledElement * GetStyledElement(StyleEngine *enginePtr, + int elementId); +static StyledWidgetSpec*GetWidgetSpec(StyledElement *elementPtr, + Tk_OptionTable optionTable); +static void InitElement(Element *elementPtr, CONST char *name, + int id, int genericId, int created); +static void InitStyle(Style *stylePtr, CONST char *name, + StyleEngine *enginePtr, ClientData clientData); +static void InitStyledElement(StyledElement *elementPtr); +static void InitStyleEngine(StyleEngine *enginePtr, + CONST char *name, StyleEngine *parentPtr); +static void InitWidgetSpec(StyledWidgetSpec *widgetSpecPtr, + StyledElement *elementPtr, + Tk_OptionTable optionTable); +static int SetStyleFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); /* * The following structure defines the implementation of the "style" Tcl - * object, used for drawing. The internalRep.otherValuePtr field of - * each style object points to the Style structure for the stylefont, or - * NULL. + * object, used for drawing. The internalRep.otherValuePtr field of each style + * object points to the Style structure for the stylefont, or NULL. */ static Tcl_ObjType styleObjType = { @@ -180,9 +163,9 @@ static Tcl_ObjType styleObjType = { * * TkStylePkgInit -- * - * This procedure is called when an application is created. It - * initializes all the structures that are used by the style - * package on a per application basis. + * This function is called when an application is created. It initializes + * all the structures that are used by the style package on a per + * application basis. * * Results: * Stores data in thread-local storage. @@ -194,13 +177,15 @@ static Tcl_ObjType styleObjType = { */ void -TkStylePkgInit(mainPtr) - TkMainInfo *mainPtr; /* The application being created. */ +TkStylePkgInit( + TkMainInfo *mainPtr) /* The application being created. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); - if (tsdPtr->nbInit != 0) return; + if (tsdPtr->nbInit != 0) { + return; + } /* * Initialize tables. @@ -215,15 +200,15 @@ TkStylePkgInit(mainPtr) /* * Create the default system engine. */ - - tsdPtr->defaultEnginePtr = - (StyleEngine *) Tk_RegisterStyleEngine(NULL, NULL); + + tsdPtr->defaultEnginePtr = (StyleEngine *) + Tk_RegisterStyleEngine(NULL, NULL); /* * Create the default system style. */ - Tk_CreateStyle(NULL, (Tk_StyleEngine) tsdPtr->defaultEnginePtr, + Tk_CreateStyle(NULL, (Tk_StyleEngine) tsdPtr->defaultEnginePtr, (ClientData) 0); tsdPtr->nbInit++; @@ -234,9 +219,9 @@ TkStylePkgInit(mainPtr) * * TkStylePkgFree -- * - * This procedure is called when an application is deleted. It - * deletes all the structures that were used by the style package - * for this application. + * This function is called when an application is deleted. It deletes all + * the structures that were used by the style package for this + * application. * * Results: * None. @@ -248,18 +233,20 @@ TkStylePkgInit(mainPtr) */ void -TkStylePkgFree(mainPtr) - TkMainInfo *mainPtr; /* The application being deleted. */ +TkStylePkgFree( + TkMainInfo *mainPtr) /* The application being deleted. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashSearch search; Tcl_HashEntry *entryPtr; StyleEngine *enginePtr; int i; tsdPtr->nbInit--; - if (tsdPtr->nbInit != 0) return; + if (tsdPtr->nbInit != 0) { + return; + } /* * Free styles. @@ -301,11 +288,12 @@ TkStylePkgFree(mainPtr) * * Tk_RegisterStyleEngine -- * - * This procedure is called to register a new style engine. Style engines + * This function is called to register a new style engine. Style engines * are stored in thread-local space. * * Results: - * The newly allocated engine. + * The newly allocated engine, or NULL if an engine with the same name + * exists. * * Side effects: * Memory allocated. Data added to thread-local table. @@ -314,24 +302,24 @@ TkStylePkgFree(mainPtr) */ Tk_StyleEngine -Tk_RegisterStyleEngine(name, parent) - CONST char *name; /* Name of the engine to create. NULL or empty +Tk_RegisterStyleEngine( + CONST char *name, /* Name of the engine to create. NULL or empty * means the default system engine. */ - Tk_StyleEngine parent; /* The engine's parent. NULL means the default + Tk_StyleEngine parent) /* The engine's parent. NULL means the default * system engine. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; int newEntry; StyleEngine *enginePtr; /* - * Attempt to create a new entry in the engine table. + * Attempt to create a new entry in the engine table. */ - entryPtr = Tcl_CreateHashEntry(&tsdPtr->engineTable, (name?name:""), - &newEntry); + entryPtr = Tcl_CreateHashEntry(&tsdPtr->engineTable, + (name != NULL ? name : ""), &newEntry); if (!newEntry) { /* * An engine was already registered by that name. @@ -369,16 +357,16 @@ Tk_RegisterStyleEngine(name, parent) */ static void -InitStyleEngine(enginePtr, name, parentPtr) - StyleEngine *enginePtr; /* Points to an uninitialized engine. */ - CONST char *name; /* Name of the registered engine. NULL or empty +InitStyleEngine( + StyleEngine *enginePtr, /* Points to an uninitialized engine. */ + CONST char *name, /* Name of the registered engine. NULL or empty * means the default system engine. Usually * points to the hash key. */ - StyleEngine *parentPtr; /* The engine's parent. NULL means the default + StyleEngine *parentPtr) /* The engine's parent. NULL means the default * system engine. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); int elementId; if (name == NULL || *name == '\0') { @@ -399,8 +387,8 @@ InitStyleEngine(enginePtr, name, parentPtr) enginePtr->parentPtr = parentPtr; } - /* - * Allocate and initialize elements array. + /* + * Allocate and initialize elements array. */ if (tsdPtr->nbElements > 0) { @@ -431,11 +419,11 @@ InitStyleEngine(enginePtr, name, parentPtr) */ static void -FreeStyleEngine(enginePtr) - StyleEngine *enginePtr; /* The style engine to free. */ +FreeStyleEngine( + StyleEngine *enginePtr) /* The style engine to free. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); int elementId; /* @@ -465,19 +453,19 @@ FreeStyleEngine(enginePtr) */ Tk_StyleEngine -Tk_GetStyleEngine(name) - CONST char *name; /* Name of the engine to retrieve. NULL or +Tk_GetStyleEngine( + CONST char *name) /* Name of the engine to retrieve. NULL or * empty means the default system engine. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; if (name == NULL) { return (Tk_StyleEngine) tsdPtr->defaultEnginePtr; } - entryPtr = Tcl_FindHashEntry(&tsdPtr->engineTable, (name?name:"")); + entryPtr = Tcl_FindHashEntry(&tsdPtr->engineTable, (name!=NULL?name:"")); if (!entryPtr) { return NULL; } @@ -502,14 +490,14 @@ Tk_GetStyleEngine(name) */ static void -InitElement(elementPtr, name, id, genericId, created) - Element *elementPtr; /* Points to an uninitialized element.*/ - CONST char *name; /* Name of the registered element. Usually +InitElement( + Element *elementPtr, /* Points to an uninitialized element.*/ + CONST char *name, /* Name of the registered element. Usually * points to the hash key. */ - int id; /* Unique element ID. */ - int genericId; /* ID of generic element. -1 means none. */ - int created; /* Boolean, whether the element was created - * explicitly (was registered) or implicitly + int id, /* Unique element ID. */ + int genericId, /* ID of generic element. -1 means none. */ + int created) /* Boolean, whether the element was created + * explicitly (was registered) or implicitly * (by a derived element). */ { elementPtr->name = name; @@ -535,8 +523,8 @@ InitElement(elementPtr, name, id, genericId, created) */ static void -FreeElement(elementPtr) - Element *elementPtr; /* The element to free. */ +FreeElement( + Element *elementPtr) /* The element to free. */ { /* Nothing to do. */ } @@ -558,8 +546,8 @@ FreeElement(elementPtr) */ static void -InitStyledElement(elementPtr) - StyledElement *elementPtr; /* Points to an uninitialized element.*/ +InitStyledElement( + StyledElement *elementPtr) /* Points to an uninitialized element.*/ { memset(elementPtr, 0, sizeof(StyledElement)); } @@ -581,8 +569,8 @@ InitStyledElement(elementPtr) */ static void -FreeStyledElement(elementPtr) - StyledElement *elementPtr; /* The styled element to free. */ +FreeStyledElement( + StyledElement *elementPtr) /* The styled element to free. */ { int i; @@ -613,14 +601,14 @@ FreeStyledElement(elementPtr) */ static int -CreateElement(name, create) - CONST char *name; /* Name of the element. */ - int create; /* Boolean, whether the element is being created - * explicitly (being registered) or implicitly (by a +CreateElement( + CONST char *name, /* Name of the element. */ + int create) /* Boolean, whether the element is being created + * explicitly (being registered) or implicitly (by a * derived element). */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr, *engineEntryPtr; Tcl_HashSearch search; int newEntry; @@ -634,7 +622,7 @@ CreateElement(name, create) entryPtr = Tcl_CreateHashEntry(&tsdPtr->elementTable, name, &newEntry); if (!newEntry) { - elementId = (int) Tcl_GetHashValue(entryPtr); + elementId = PTR2INT(Tcl_GetHashValue(entryPtr)); if (create) { tsdPtr->elements[elementId].created = 1; } @@ -642,8 +630,8 @@ CreateElement(name, create) } /* - * The element didn't exist. If it's a derived element, find or - * create its generic element ID. + * The element didn't exist. If it's a derived element, find or create its + * generic element ID. */ dot = strchr(name, '.'); @@ -652,15 +640,15 @@ CreateElement(name, create) } elementId = tsdPtr->nbElements++; - Tcl_SetHashValue(entryPtr, (ClientData) elementId); + Tcl_SetHashValue(entryPtr, (ClientData) INT2PTR(elementId)); /* * Reallocate element table. */ - tsdPtr->elements = (Element *) ckrealloc((char *) tsdPtr->elements, + tsdPtr->elements = (Element *) ckrealloc((char *) tsdPtr->elements, sizeof(Element) * tsdPtr->nbElements); - InitElement(tsdPtr->elements+elementId, + InitElement(tsdPtr->elements+elementId, Tcl_GetHashKey(&tsdPtr->elementTable, entryPtr), elementId, genericId, create); @@ -673,7 +661,7 @@ CreateElement(name, create) enginePtr = (StyleEngine *) Tcl_GetHashValue(engineEntryPtr); enginePtr->elements = (StyledElement *) ckrealloc( - (char *) enginePtr->elements, + (char *) enginePtr->elements, sizeof(StyledElement) * tsdPtr->nbElements); InitStyledElement(enginePtr->elements+elementId); @@ -700,11 +688,11 @@ CreateElement(name, create) */ int -Tk_GetElementId(name) - CONST char *name; /* Name of the element. */ +Tk_GetElementId( + CONST char *name) /* Name of the element. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; int genericId = -1; char *dot; @@ -715,11 +703,11 @@ Tk_GetElementId(name) entryPtr = Tcl_FindHashEntry(&tsdPtr->elementTable, name); if (entryPtr) { - return (int) Tcl_GetHashValue(entryPtr); + return PTR2INT(Tcl_GetHashValue(entryPtr)); } /* - * Element not found. If the given name was derived, then first search for + * Element not found. If the given name was derived, then first search for * the generic element. If found, create the new derived element. */ @@ -732,7 +720,7 @@ Tk_GetElementId(name) return -1; } if (!tsdPtr->elements[genericId].created) { - /* + /* * The generic element was created implicitly and thus has no real * existence. */ @@ -753,8 +741,8 @@ Tk_GetElementId(name) * * Tk_RegisterStyledElement -- * - * Register an implementation of a new or existing element for the - * given style engine. + * Register an implementation of a new or existing element for the given + * style engine. * * Results: * The unique ID for the created or found element. @@ -766,11 +754,11 @@ Tk_GetElementId(name) */ int -Tk_RegisterStyledElement(engine, templatePtr) - Tk_StyleEngine engine; /* Style engine providing the - * implementation. */ - Tk_ElementSpec *templatePtr; /* Static template information about - * the element. */ +Tk_RegisterStyledElement( + Tk_StyleEngine engine, /* Style engine providing the + * implementation. */ + Tk_ElementSpec *templatePtr)/* Static template information about the + * element. */ { int elementId; StyledElement *elementPtr; @@ -791,7 +779,7 @@ Tk_RegisterStyledElement(engine, templatePtr) } /* - * Register the element, allocating storage in the various engines if + * Register the element, allocating storage in the various engines if * necessary. */ @@ -809,13 +797,13 @@ Tk_RegisterStyledElement(engine, templatePtr) strcpy(specPtr->name, templatePtr->name); nbOptions = 0; for (nbOptions = 0, srcOptions = templatePtr->options; - srcOptions->name != NULL; - nbOptions++, srcOptions++); - specPtr->options = (Tk_ElementOptionSpec *) ckalloc( - sizeof(Tk_ElementOptionSpec) * (nbOptions+1)); + srcOptions->name != NULL; nbOptions++, srcOptions++) { + /* empty body */ + } + specPtr->options = (Tk_ElementOptionSpec *) + ckalloc(sizeof(Tk_ElementOptionSpec) * (nbOptions+1)); for (srcOptions = templatePtr->options, dstOptions = specPtr->options; - /* End condition within loop */; - srcOptions++, dstOptions++) { + /* End condition within loop */; srcOptions++, dstOptions++) { if (srcOptions->name == NULL) { dstOptions->name = NULL; break; @@ -842,8 +830,8 @@ Tk_RegisterStyledElement(engine, templatePtr) * * GetStyledElement -- * - * Get a registered implementation of an existing element for the - * given style engine. + * Get a registered implementation of an existing element for the given + * style engine. * * Results: * The styled element descriptor, or NULL if not found. @@ -855,12 +843,13 @@ Tk_RegisterStyledElement(engine, templatePtr) */ static StyledElement * -GetStyledElement(enginePtr, elementId) - StyleEngine *enginePtr; /* Style engine providing the implementation. +GetStyledElement( + StyleEngine *enginePtr, /* Style engine providing the implementation. * NULL means the default system engine. */ - int elementId; /* Unique element ID */{ + int elementId) /* Unique element ID */ +{ StyledElement *elementPtr; - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); StyleEngine *enginePtr2; @@ -913,11 +902,11 @@ GetStyledElement(enginePtr, elementId) */ static void -InitWidgetSpec(widgetSpecPtr, elementPtr, optionTable) - StyledWidgetSpec *widgetSpecPtr; /* Points to an uninitialized widget - * spec. */ - StyledElement *elementPtr; /* Styled element descriptor. */ - Tk_OptionTable optionTable; /* The widget's option table. */ +InitWidgetSpec( + StyledWidgetSpec *widgetSpecPtr, + /* Points to an uninitialized widget spec. */ + StyledElement *elementPtr, /* Styled element descriptor. */ + Tk_OptionTable optionTable) /* The widget's option table. */ { int i, nbOptions; Tk_ElementOptionSpec *elementOptionPtr; @@ -925,33 +914,32 @@ InitWidgetSpec(widgetSpecPtr, elementPtr, optionTable) widgetSpecPtr->elementPtr = elementPtr; widgetSpecPtr->optionTable = optionTable; - + /* * Count the number of options. */ - for (nbOptions = 0, elementOptionPtr = elementPtr->specPtr->options; - elementOptionPtr->name != NULL; - nbOptions++, elementOptionPtr++) { + for (nbOptions = 0, elementOptionPtr = elementPtr->specPtr->options; + elementOptionPtr->name != NULL; nbOptions++, elementOptionPtr++) { + /* empty body */ } /* * Build the widget option list. */ - widgetSpecPtr->optionsPtr = (CONST Tk_OptionSpec **) ckalloc( - sizeof(Tk_OptionSpec *) * nbOptions); - for (i = 0, elementOptionPtr = elementPtr->specPtr->options; - i < nbOptions; - i++, elementOptionPtr++) { + widgetSpecPtr->optionsPtr = (CONST Tk_OptionSpec **) + ckalloc(sizeof(Tk_OptionSpec *) * nbOptions); + for (i = 0, elementOptionPtr = elementPtr->specPtr->options; + i < nbOptions; i++, elementOptionPtr++) { widgetOptionPtr = TkGetOptionSpec(elementOptionPtr->name, optionTable); /* - * Check that the widget option type is compatible with one of the + * Check that the widget option type is compatible with one of the * element's required types. */ - if ( elementOptionPtr->type == TK_OPTION_END + if (elementOptionPtr->type == TK_OPTION_END || elementOptionPtr->type == widgetOptionPtr->type) { widgetSpecPtr->optionsPtr[i] = widgetOptionPtr; } else { @@ -977,8 +965,9 @@ InitWidgetSpec(widgetSpecPtr, elementPtr, optionTable) */ static void -FreeWidgetSpec(widgetSpecPtr) - StyledWidgetSpec *widgetSpecPtr; /* The widget spec to free. */ +FreeWidgetSpec( + StyledWidgetSpec *widgetSpecPtr) + /* The widget spec to free. */ { ckfree((char *) widgetSpecPtr->optionsPtr); } @@ -988,8 +977,8 @@ FreeWidgetSpec(widgetSpecPtr) * * GetWidgetSpec -- * - * Return a new or existing widget spec for the given element and - * widget type (identified by its option table). + * Return a new or existing widget spec for the given element and widget + * type (identified by its option table). * * Results: * A pointer to the matching widget spec. @@ -1001,9 +990,9 @@ FreeWidgetSpec(widgetSpecPtr) */ static StyledWidgetSpec * -GetWidgetSpec(elementPtr, optionTable) - StyledElement *elementPtr; /* Styled element descriptor. */ - Tk_OptionTable optionTable; /* The widget's option table. */ +GetWidgetSpec( + StyledElement *elementPtr, /* Styled element descriptor. */ + Tk_OptionTable optionTable) /* The widget's option table. */ { StyledWidgetSpec *widgetSpecPtr; int i; @@ -1025,7 +1014,7 @@ GetWidgetSpec(elementPtr, optionTable) i = elementPtr->nbWidgetSpecs++; elementPtr->widgetSpecs = (StyledWidgetSpec *) ckrealloc( - (char *) elementPtr->widgetSpecs, + (char *) elementPtr->widgetSpecs, sizeof(StyledWidgetSpec) * elementPtr->nbWidgetSpecs); widgetSpecPtr = elementPtr->widgetSpecs+i; InitWidgetSpec(widgetSpecPtr, elementPtr, optionTable); @@ -1038,7 +1027,7 @@ GetWidgetSpec(elementPtr, optionTable) * * Tk_GetStyledElement -- * - * This procedure returns a styled instance of the given element. + * This function returns a styled instance of the given element. * * Results: * None. @@ -1050,10 +1039,10 @@ GetWidgetSpec(elementPtr, optionTable) */ Tk_StyledElement -Tk_GetStyledElement(style, elementId, optionTable) - Tk_Style style; /* The widget style. */ - int elementId; /* Unique element ID. */ - Tk_OptionTable optionTable; /* Option table for the widget. */ +Tk_GetStyledElement( + Tk_Style style, /* The widget style. */ + int elementId, /* Unique element ID. */ + Tk_OptionTable optionTable) /* Option table for the widget. */ { Style *stylePtr = (Style *) style; StyledElement *elementPtr; @@ -1062,7 +1051,7 @@ Tk_GetStyledElement(style, elementId, optionTable) * Get an element implementation and call corresponding hook. */ - elementPtr = GetStyledElement((stylePtr?stylePtr->enginePtr:NULL), + elementPtr = GetStyledElement((stylePtr?stylePtr->enginePtr:NULL), elementId); if (!elementPtr) { return NULL; @@ -1076,7 +1065,7 @@ Tk_GetStyledElement(style, elementId, optionTable) * * Tk_GetElementSize -- * - * This procedure computes the size of the given widget element according + * This function computes the size of the given widget element according * to its style. * * Results: @@ -1089,26 +1078,25 @@ Tk_GetStyledElement(style, elementId, optionTable) */ void -Tk_GetElementSize(style, element, recordPtr, tkwin, width, height, inner, widthPtr, - heightPtr) - Tk_Style style; /* The widget style. */ - Tk_StyledElement element; /* The styled element, previously - * returned by Tk_GetStyledElement. */ - char *recordPtr; /* The widget record. */ - Tk_Window tkwin; /* The widget window. */ - int width, height; /* Requested size. */ - int inner; /* Boolean. If TRUE, compute the outer - * size according to the requested - * minimum inner size. If FALSE, compute - * the inner size according to the - * requested maximum outer size. */ - int *widthPtr, *heightPtr; /* Returned size. */ +Tk_GetElementSize( + Tk_Style style, /* The widget style. */ + Tk_StyledElement element, /* The styled element, previously returned by + * Tk_GetStyledElement. */ + char *recordPtr, /* The widget record. */ + Tk_Window tkwin, /* The widget window. */ + int width, int height, /* Requested size. */ + int inner, /* If TRUE, compute the outer size according + * to the requested minimum inner size. If + * FALSE, compute the inner size according to + * the requested maximum outer size. */ + int *widthPtr, int *heightPtr) + /* Returned size. */ { Style *stylePtr = (Style *) style; StyledWidgetSpec *widgetSpecPtr = (StyledWidgetSpec *) element; - widgetSpecPtr->elementPtr->specPtr->getSize(stylePtr->clientData, - recordPtr, widgetSpecPtr->optionsPtr, tkwin, width, height, inner, + widgetSpecPtr->elementPtr->specPtr->getSize(stylePtr->clientData, + recordPtr, widgetSpecPtr->optionsPtr, tkwin, width, height, inner, widthPtr, heightPtr); } @@ -1117,9 +1105,9 @@ Tk_GetElementSize(style, element, recordPtr, tkwin, width, height, inner, widthP * * Tk_GetElementBox -- * - * This procedure computes the bounding or inscribed box coordinates - * of the given widget element according to its style and within the - * given limits. + * This function computes the bounding or inscribed box coordinates of + * the given widget element according to its style and within the given + * limits. * * Results: * None. @@ -1131,29 +1119,27 @@ Tk_GetElementSize(style, element, recordPtr, tkwin, width, height, inner, widthP */ void -Tk_GetElementBox(style, element, recordPtr, tkwin, x, y, width, height, inner, - xPtr, yPtr, widthPtr, heightPtr) - Tk_Style style; /* The widget style. */ - Tk_StyledElement element; /* The styled element, previously - * returned by Tk_GetStyledElement. */ - char *recordPtr; /* The widget record. */ - Tk_Window tkwin; /* The widget window. */ - int x, y; /* Top left corner of available area. */ - int width, height; /* Size of available area. */ - int inner; /* Boolean. If TRUE, compute the - * bounding box according to the - * requested inscribed box size. If - * FALSE, compute the inscribed box - * according to the requested bounding - * box. */ - int *xPtr, *yPtr; /* Returned top left corner. */ - int *widthPtr, *heightPtr; /* Returned size. */ +Tk_GetElementBox( + Tk_Style style, /* The widget style. */ + Tk_StyledElement element, /* The styled element, previously returned by + * Tk_GetStyledElement. */ + char *recordPtr, /* The widget record. */ + Tk_Window tkwin, /* The widget window. */ + int x, int y, /* Top left corner of available area. */ + int width, int height, /* Size of available area. */ + int inner, /* Boolean. If TRUE, compute the bounding box + * according to the requested inscribed box + * size. If FALSE, compute the inscribed box + * according to the requested bounding box. */ + int *xPtr, int *yPtr, /* Returned top left corner. */ + int *widthPtr, int *heightPtr) + /* Returned size. */ { Style *stylePtr = (Style *) style; StyledWidgetSpec *widgetSpecPtr = (StyledWidgetSpec *) element; - widgetSpecPtr->elementPtr->specPtr->getBox(stylePtr->clientData, - recordPtr, widgetSpecPtr->optionsPtr, tkwin, x, y, width, height, + widgetSpecPtr->elementPtr->specPtr->getBox(stylePtr->clientData, + recordPtr, widgetSpecPtr->optionsPtr, tkwin, x, y, width, height, inner, xPtr, yPtr, widthPtr, heightPtr); } @@ -1162,7 +1148,7 @@ Tk_GetElementBox(style, element, recordPtr, tkwin, x, y, width, height, inner, * * Tk_GetElementBorderWidth -- * - * This procedure computes the border widthof the given widget element + * This function computes the border widthof the given widget element * according to its style and within the given limits. * * Results: @@ -1175,12 +1161,12 @@ Tk_GetElementBox(style, element, recordPtr, tkwin, x, y, width, height, inner, */ int -Tk_GetElementBorderWidth(style, element, recordPtr, tkwin) - Tk_Style style; /* The widget style. */ - Tk_StyledElement element; /* The styled element, previously - * returned by Tk_GetStyledElement. */ - char *recordPtr; /* The widget record. */ - Tk_Window tkwin; /* The widget window. */ +Tk_GetElementBorderWidth( + Tk_Style style, /* The widget style. */ + Tk_StyledElement element, /* The styled element, previously returned by + * Tk_GetStyledElement. */ + char *recordPtr, /* The widget record. */ + Tk_Window tkwin) /* The widget window. */ { Style *stylePtr = (Style *) style; StyledWidgetSpec *widgetSpecPtr = (StyledWidgetSpec *) element; @@ -1194,7 +1180,7 @@ Tk_GetElementBorderWidth(style, element, recordPtr, tkwin) * * Tk_DrawElement -- * - * This procedure draw the given widget element in a given drawable area. + * This function draw the given widget element in a given drawable area. * * Results: * None @@ -1206,22 +1192,22 @@ Tk_GetElementBorderWidth(style, element, recordPtr, tkwin) */ void -Tk_DrawElement(style, element, recordPtr, tkwin, d, x, y, width, height, state) - Tk_Style style; /* The widget style. */ - Tk_StyledElement element; /* The styled element, previously - * returned by Tk_GetStyledElement. */ - char *recordPtr; /* The widget record. */ - Tk_Window tkwin; /* The widget window. */ - Drawable d; /* Where to draw element. */ - int x, y; /* Top left corner of element. */ - int width, height; /* Size of element. */ - int state; /* Drawing state flags. */ +Tk_DrawElement( + Tk_Style style, /* The widget style. */ + Tk_StyledElement element, /* The styled element, previously returned by + * Tk_GetStyledElement. */ + char *recordPtr, /* The widget record. */ + Tk_Window tkwin, /* The widget window. */ + Drawable d, /* Where to draw element. */ + int x, int y, /* Top left corner of element. */ + int width, int height, /* Size of element. */ + int state) /* Drawing state flags. */ { Style *stylePtr = (Style *) style; StyledWidgetSpec *widgetSpecPtr = (StyledWidgetSpec *) element; - widgetSpecPtr->elementPtr->specPtr->draw(stylePtr->clientData, - recordPtr, widgetSpecPtr->optionsPtr, tkwin, d, x, y, width, + widgetSpecPtr->elementPtr->specPtr->draw(stylePtr->clientData, + recordPtr, widgetSpecPtr->optionsPtr, tkwin, d, x, y, width, height, state); } @@ -1230,37 +1216,36 @@ Tk_DrawElement(style, element, recordPtr, tkwin, d, x, y, width, height, state) * * Tk_CreateStyle -- * - * This procedure is called to create a new style as an instance of the + * This function is called to create a new style as an instance of the * given engine. Styles are stored in thread-local space. * * Results: - * The newly allocated style. + * The newly allocated style, or NULL if the style already exists. * * Side effects: - * Memory allocated. Data added to thread-local table. The style's - * refCount is incremented. + * Memory allocated. Data added to thread-local table. * *--------------------------------------------------------------------------- */ Tk_Style -Tk_CreateStyle(name, engine, clientData) - CONST char *name; /* Name of the style to create. NULL or empty +Tk_CreateStyle( + CONST char *name, /* Name of the style to create. NULL or empty * means the default system style. */ - Tk_StyleEngine engine; /* The style engine. */ - ClientData clientData; /* Private data passed as is to engine code. */ + Tk_StyleEngine engine, /* The style engine. */ + ClientData clientData) /* Private data passed as is to engine code. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; int newEntry; Style *stylePtr; /* - * Attempt to create a new entry in the style table. + * Attempt to create a new entry in the style table. */ - entryPtr = Tcl_CreateHashEntry(&tsdPtr->styleTable, (name?name:""), + entryPtr = Tcl_CreateHashEntry(&tsdPtr->styleTable, (name?name:""), &newEntry); if (!newEntry) { /* @@ -1275,10 +1260,11 @@ Tk_CreateStyle(name, engine, clientData) */ stylePtr = (Style *) ckalloc(sizeof(Style)); - InitStyle(stylePtr, entryPtr, Tcl_GetHashKey(&tsdPtr->styleTable, entryPtr), - (engine?(StyleEngine *) engine:tsdPtr->defaultEnginePtr), clientData); + InitStyle(stylePtr, Tcl_GetHashKey(&tsdPtr->styleTable, entryPtr), + (engine != NULL ? (StyleEngine *) engine : + tsdPtr->defaultEnginePtr), + clientData); Tcl_SetHashValue(entryPtr, (ClientData) stylePtr); - stylePtr->refCount++; return (Tk_Style) stylePtr; } @@ -1291,9 +1277,9 @@ Tk_CreateStyle(name, engine, clientData) * Given a style, return its registered name. * * Results: - * The return value is the name that was passed to Tk_CreateStyle() to - * create the style. The storage for the returned string is private - * (it points to the corresponding hash key) The caller should not modify + * The return value is the name that was passed to Tk_CreateStyle() to + * create the style. The storage for the returned string is private (it + * points to the corresponding hash key) The caller should not modify * this string. * * Side effects: @@ -1303,8 +1289,8 @@ Tk_CreateStyle(name, engine, clientData) */ CONST char * -Tk_NameOfStyle(style) - Tk_Style style; /* Style whose name is desired. */ +Tk_NameOfStyle( + Tk_Style style) /* Style whose name is desired. */ { Style *stylePtr = (Style *) style; @@ -1328,17 +1314,14 @@ Tk_NameOfStyle(style) */ static void -InitStyle(stylePtr, hashPtr, name, enginePtr, clientData) - Style *stylePtr; /* Points to an uninitialized style. */ - Tcl_HashEntry *hashPtr; /* Hash entry for the registered style. */ - CONST char *name; /* Name of the registered style. NULL or empty +InitStyle( + Style *stylePtr, /* Points to an uninitialized style. */ + CONST char *name, /* Name of the registered style. NULL or empty * means the default system style. Usually * points to the hash key. */ - StyleEngine *enginePtr; /* The style engine. */ - ClientData clientData; /* Private data passed as is to engine code. */ + StyleEngine *enginePtr, /* The style engine. */ + ClientData clientData) /* Private data passed as is to engine code. */ { - stylePtr->refCount = 0; - stylePtr->hashPtr = hashPtr; stylePtr->name = name; stylePtr->enginePtr = enginePtr; stylePtr->clientData = clientData; @@ -1347,36 +1330,13 @@ InitStyle(stylePtr, hashPtr, name, enginePtr, clientData) /* *--------------------------------------------------------------------------- * - * FreeStyle -- - * - * Free a style and its associated data. - * - * Results: - * None - * - * Side effects: - * None. - * - *--------------------------------------------------------------------------- - */ - -static void -FreeStyle(stylePtr) - Style *stylePtr; /* The style to free. */ -{ - /* Nothing to do. */ -} - -/* - *--------------------------------------------------------------------------- - * * Tk_GetStyle -- * * Retrieve a registered style by its name. * * Results: - * A pointer to the style engine, or NULL if none found. In the latter - * case and if the interp is not NULL, an error message is left in the + * A pointer to the style engine, or NULL if none found. In the latter + * case and if the interp is not NULL, an error message is left in the * interp's result. * * Side effects: @@ -1386,29 +1346,29 @@ FreeStyle(stylePtr) */ Tk_Style -Tk_GetStyle(interp, name) - Tcl_Interp *interp; /* Interp for error return. */ - CONST char *name; /* Name of the style to retrieve. NULL or empty +Tk_GetStyle( + Tcl_Interp *interp, /* Interp for error return. */ + CONST char *name) /* Name of the style to retrieve. NULL or empty * means the default system style. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; Style *stylePtr; /* - * Search for a corresponding entry in the style table. + * Search for a corresponding entry in the style table. */ - entryPtr = Tcl_FindHashEntry(&tsdPtr->styleTable, (name?name:"")); + entryPtr = Tcl_FindHashEntry(&tsdPtr->styleTable, (name!=NULL?name:"")); if (entryPtr == NULL) { if (interp != NULL) { - Tcl_AppendResult(interp, "style \"", name, "\" doesn't exist", NULL); + Tcl_AppendResult(interp, "style \"", name, "\" doesn't exist", + NULL); } return (Tk_Style) NULL; } stylePtr = (Style *) Tcl_GetHashValue(entryPtr); - stylePtr->refCount++; return (Tk_Style) stylePtr; } @@ -1418,72 +1378,37 @@ Tk_GetStyle(interp, name) * * Tk_FreeStyle -- * - * Free a style previously created by Tk_CreateStyle. - * - * Results: - * None - * - * Side effects: - * The style's refCount is decremented. If it reaches zero, the style - * is freed. + * No-op. Present only for stubs compatibility. * *--------------------------------------------------------------------------- */ -void -Tk_FreeStyle(style) - Tk_Style style; /* The style to free. */ +void +Tk_FreeStyle( + Tk_Style style) { - Style *stylePtr = (Style *) style; - - if (stylePtr == NULL) { - return; - } - stylePtr->refCount--; - if (stylePtr->refCount > 0) { - return; - } - - /* - * Keep the default style alive. - */ - - if (*stylePtr->name == '\0') { - stylePtr->refCount = 1; - return; - } - - Tcl_DeleteHashEntry(stylePtr->hashPtr); - FreeStyle(stylePtr); - ckfree((char *) stylePtr); } /* *--------------------------------------------------------------------------- * - * Tk_AllocStyleFromObj -- + * Tk_AllocStyleFromObj -- * - * Map the string name of a style to a corresponding Tk_Style. The style + * Map the string name of a style to a corresponding Tk_Style. The style * must have already been created by Tk_CreateStyle. * * Results: - * The return value is a token for the style that matches objPtr, or - * NULL if none found. If NULL is returned, an error message will be - * left in interp's result object. - * - * Side effects: - * The style's reference count is incremented. For each call to this - * procedure, there should eventually be a call to Tk_FreeStyle() or - * Tk_FreeStyleFromObj() so that the database is cleaned up when styles - * aren't in use anymore. + * The return value is a token for the style that matches objPtr, or NULL + * if none found. If NULL is returned, an error message will be left in + * interp's result object. * *--------------------------------------------------------------------------- */ Tk_Style -Tk_AllocStyleFromObj(interp, objPtr) - Tcl_Interp *interp; /* Interp for error return. */ - Tcl_Obj *objPtr; /* Object containing name of the style to +Tk_AllocStyleFromObj( + Tcl_Interp *interp, /* Interp for error return. */ + Tcl_Obj *objPtr) /* Object containing name of the style to * retrieve. */ { Style *stylePtr; @@ -1493,7 +1418,6 @@ Tk_AllocStyleFromObj(interp, objPtr) stylePtr = (Style *) objPtr->internalRep.otherValuePtr; } else { stylePtr = (Style *) objPtr->internalRep.otherValuePtr; - stylePtr->refCount++; } return (Tk_Style) stylePtr; @@ -1504,26 +1428,26 @@ Tk_AllocStyleFromObj(interp, objPtr) * * Tk_GetStyleFromObj -- * - * Find the style that corresponds to a given object. The style must - * have already been created by Tk_CreateStyle. + * Find the style that corresponds to a given object. The style must have + * already been created by Tk_CreateStyle. * * Results: - * The return value is a token for the style that matches objPtr, or - * NULL if none found. + * The return value is a token for the style that matches objPtr, or NULL + * if none found. * * Side effects: - * If the object is not already a style ref, the conversion will free - * any old internal representation. + * If the object is not already a style ref, the conversion will free any + * old internal representation. * *---------------------------------------------------------------------- */ Tk_Style -Tk_GetStyleFromObj(objPtr) - Tcl_Obj *objPtr; /* The object from which to get the style. */ +Tk_GetStyleFromObj( + Tcl_Obj *objPtr) /* The object from which to get the style. */ { if (objPtr->typePtr != &styleObjType) { - SetStyleFromAny((Tcl_Interp *) NULL, objPtr); + SetStyleFromAny(NULL, objPtr); } return (Tk_Style) objPtr->internalRep.otherValuePtr; @@ -1532,27 +1456,16 @@ Tk_GetStyleFromObj(objPtr) /* *--------------------------------------------------------------------------- * - * Tk_FreeStyleFromObj -- + * Tk_FreeStyleFromObj -- * - * Called to release a style inside a Tcl_Obj *. - * - * Results: - * None. - * - * Side effects: - * If the object is a style ref, the conversion will free its - * internal representation. + * No-op. Present only for stubs compatibility. * *--------------------------------------------------------------------------- */ - void -Tk_FreeStyleFromObj(objPtr) - Tcl_Obj *objPtr; /* The Tcl_Obj * to be freed. */ +Tk_FreeStyleFromObj( + Tcl_Obj *objPtr) { - if (objPtr->typePtr == &styleObjType) { - FreeStyleObjProc(objPtr); - } } /* @@ -1560,31 +1473,29 @@ Tk_FreeStyleFromObj(objPtr) * * SetStyleFromAny -- * - * Convert the internal representation of a Tcl object to the - * style internal form. + * Convert the internal representation of a Tcl object to the style + * internal form. * * Results: - * Always returns TCL_OK. If an error occurs is returned (e.g. the - * style doesn't exist), an error message will be left in interp's - * result. + * Always returns TCL_OK. If an error occurs is returned (e.g. the style + * doesn't exist), an error message will be left in interp's result. * * Side effects: * The object is left with its typePtr pointing to styleObjType. - * The reference count is incremented (in Tk_GetStyle()). * *---------------------------------------------------------------------- */ static int -SetStyleFromAny(interp, objPtr) - Tcl_Interp *interp; /* Used for error reporting if not NULL. */ - Tcl_Obj *objPtr; /* The object to convert. */ +SetStyleFromAny( + Tcl_Interp *interp, /* Used for error reporting if not NULL. */ + Tcl_Obj *objPtr) /* The object to convert. */ { - Tcl_ObjType *typePtr; - char *name; + const Tcl_ObjType *typePtr; + const char *name; /* - * Free the old internalRep before setting the new one. + * Free the old internalRep before setting the new one. */ name = Tcl_GetString(objPtr); @@ -1602,61 +1513,49 @@ SetStyleFromAny(interp, objPtr) /* *--------------------------------------------------------------------------- * - * FreeStyleObjProc -- + * FreeStyleObjProc -- * - * This proc is called to release an object reference to a style. - * Called when the object's internal rep is released. + * This proc is called to release an object reference to a style. Called + * when the object's internal rep is released. * * Results: * None. * - * Side effects: - * The reference count is decremented (in Tk_FreeStyle()). - * *--------------------------------------------------------------------------- */ static void -FreeStyleObjProc(objPtr) - Tcl_Obj *objPtr; /* The object we are releasing. */ +FreeStyleObjProc( + Tcl_Obj *objPtr) /* The object we are releasing. */ { - Style *stylePtr = (Style *) objPtr->internalRep.otherValuePtr; - - if (stylePtr != NULL) { - Tk_FreeStyle((Tk_Style) stylePtr); - objPtr->internalRep.otherValuePtr = NULL; - } + objPtr->internalRep.otherValuePtr = NULL; + objPtr->typePtr = NULL; } /* *--------------------------------------------------------------------------- * - * DupStyleObjProc -- + * DupStyleObjProc -- * - * When a cached style object is duplicated, this is called to - * update the internal reps. - * - * Results: - * None. - * - * Side effects: - * The style's refCount is incremented and the internal rep of the copy - * is set to point to it. + * When a cached style object is duplicated, this is called to update the + * internal reps. * *--------------------------------------------------------------------------- */ static void -DupStyleObjProc(srcObjPtr, dupObjPtr) - Tcl_Obj *srcObjPtr; /* The object we are copying from. */ - Tcl_Obj *dupObjPtr; /* The object we are copying to. */ +DupStyleObjProc( + Tcl_Obj *srcObjPtr, /* The object we are copying from. */ + Tcl_Obj *dupObjPtr) /* The object we are copying to. */ { - Style *stylePtr = (Style *) srcObjPtr->internalRep.otherValuePtr; - dupObjPtr->typePtr = srcObjPtr->typePtr; - dupObjPtr->internalRep.otherValuePtr = (VOID *) stylePtr; - - if (stylePtr != NULL) { - stylePtr->refCount++; - } + dupObjPtr->internalRep.otherValuePtr=srcObjPtr->internalRep.otherValuePtr; } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ |