diff options
Diffstat (limited to 'win/tkWinColor.c')
-rw-r--r-- | win/tkWinColor.c | 283 |
1 files changed, 142 insertions, 141 deletions
diff --git a/win/tkWinColor.c b/win/tkWinColor.c index e81398f..f4181b5 100644 --- a/win/tkWinColor.c +++ b/win/tkWinColor.c @@ -1,4 +1,4 @@ -/* +/* * tkWinColor.c -- * * Functions to map color names to system color values. @@ -6,8 +6,8 @@ * Copyright (c) 1995 Sun Microsystems, Inc. * Copyright (c) 1994 Software Research Associates, 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 "tkWinInt.h" @@ -20,15 +20,14 @@ typedef struct WinColor { TkColor info; /* Generic color information. */ - int index; /* Index for GetSysColor(), -1 if color - * is not a "live" system color. */ + int index; /* Index for GetSysColor(), -1 if color is not + * a "live" system color. */ } WinColor; /* - * The sysColors array contains the names and index values for the - * Windows indirect system color names. In use, all of the names - * will have the string "System" prepended, but we omit it in the table - * to save space. + * The sysColors array contains the names and index values for the Windows + * indirect system color names. In use, all of the names will have the string + * "System" prepended, but we omit it in the table to save space. */ typedef struct { @@ -36,38 +35,37 @@ typedef struct { int index; } SystemColorEntry; - static SystemColorEntry sysColors[] = { - "3dDarkShadow", COLOR_3DDKSHADOW, - "3dLight", COLOR_3DLIGHT, - "ActiveBorder", COLOR_ACTIVEBORDER, - "ActiveCaption", COLOR_ACTIVECAPTION, - "AppWorkspace", COLOR_APPWORKSPACE, - "Background", COLOR_BACKGROUND, - "ButtonFace", COLOR_BTNFACE, - "ButtonHighlight", COLOR_BTNHIGHLIGHT, - "ButtonShadow", COLOR_BTNSHADOW, - "ButtonText", COLOR_BTNTEXT, - "CaptionText", COLOR_CAPTIONTEXT, - "DisabledText", COLOR_GRAYTEXT, - "GrayText", COLOR_GRAYTEXT, - "Highlight", COLOR_HIGHLIGHT, - "HighlightText", COLOR_HIGHLIGHTTEXT, - "InactiveBorder", COLOR_INACTIVEBORDER, - "InactiveCaption", COLOR_INACTIVECAPTION, - "InactiveCaptionText", COLOR_INACTIVECAPTIONTEXT, - "InfoBackground", COLOR_INFOBK, - "InfoText", COLOR_INFOTEXT, - "Menu", COLOR_MENU, - "MenuText", COLOR_MENUTEXT, - "Scrollbar", COLOR_SCROLLBAR, - "Window", COLOR_WINDOW, - "WindowFrame", COLOR_WINDOWFRAME, - "WindowText", COLOR_WINDOWTEXT, - NULL, 0 + {"3dDarkShadow", COLOR_3DDKSHADOW}, + {"3dLight", COLOR_3DLIGHT}, + {"ActiveBorder", COLOR_ACTIVEBORDER}, + {"ActiveCaption", COLOR_ACTIVECAPTION}, + {"AppWorkspace", COLOR_APPWORKSPACE}, + {"Background", COLOR_BACKGROUND}, + {"ButtonFace", COLOR_BTNFACE}, + {"ButtonHighlight", COLOR_BTNHIGHLIGHT}, + {"ButtonShadow", COLOR_BTNSHADOW}, + {"ButtonText", COLOR_BTNTEXT}, + {"CaptionText", COLOR_CAPTIONTEXT}, + {"DisabledText", COLOR_GRAYTEXT}, + {"GrayText", COLOR_GRAYTEXT}, + {"Highlight", COLOR_HIGHLIGHT}, + {"HighlightText", COLOR_HIGHLIGHTTEXT}, + {"InactiveBorder", COLOR_INACTIVEBORDER}, + {"InactiveCaption", COLOR_INACTIVECAPTION}, + {"InactiveCaptionText", COLOR_INACTIVECAPTIONTEXT}, + {"InfoBackground", COLOR_INFOBK}, + {"InfoText", COLOR_INFOTEXT}, + {"Menu", COLOR_MENU}, + {"MenuText", COLOR_MENUTEXT}, + {"Scrollbar", COLOR_SCROLLBAR}, + {"Window", COLOR_WINDOW}, + {"WindowFrame", COLOR_WINDOWFRAME}, + {"WindowText", COLOR_WINDOWTEXT}, + {NULL, 0} }; -typedef struct ThreadSpecificData { +typedef struct ThreadSpecificData { int ncolors; } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; @@ -76,20 +74,20 @@ static Tcl_ThreadDataKey dataKey; * Forward declarations for functions defined later in this file. */ -static int FindSystemColor _ANSI_ARGS_((const char *name, - XColor *colorPtr, int *indexPtr)); +static int FindSystemColor(const char *name, XColor *colorPtr, + int *indexPtr); /* *---------------------------------------------------------------------- * * FindSystemColor -- * - * This routine finds the color entry that corresponds to the - * specified color. + * This routine finds the color entry that corresponds to the specified + * color. * * Results: - * Returns non-zero on success. The RGB values of the XColor - * will be initialized to the proper values on success. + * Returns non-zero on success. The RGB values of the XColor will be + * initialized to the proper values on success. * * Side effects: * None. @@ -98,18 +96,18 @@ static int FindSystemColor _ANSI_ARGS_((const char *name, */ static int -FindSystemColor(name, colorPtr, indexPtr) - const char *name; /* Color name. */ - XColor *colorPtr; /* Where to store results. */ - int *indexPtr; /* Out parameter to store color index. */ +FindSystemColor( + const char *name, /* Color name. */ + XColor *colorPtr, /* Where to store results. */ + int *indexPtr) /* Out parameter to store color index. */ { int l, u, r, i; - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); /* - * Count the number of elements in the color array if we haven't - * done so yet. + * Count the number of elements in the color array if we haven't done so + * yet. */ if (tsdPtr->ncolors == 0) { @@ -152,10 +150,12 @@ FindSystemColor(name, colorPtr, indexPtr) *indexPtr = sysColors[i].index; colorPtr->pixel = GetSysColor(sysColors[i].index); + /* - * x257 is (value<<8 + value) to get the properly bit shifted - * and padded value. [Bug: 4919] + * x257 is (value<<8 + value) to get the properly bit shifted and padded + * value. [Bug: 4919] */ + colorPtr->red = GetRValue(colorPtr->pixel) * 257; colorPtr->green = GetGValue(colorPtr->pixel) * 257; colorPtr->blue = GetBValue(colorPtr->pixel) * 257; @@ -176,27 +176,26 @@ FindSystemColor(name, colorPtr, indexPtr) * * Side effects: * May invalidate the colormap cache associated with tkwin upon - * allocating a new colormap entry. Allocates a new TkColor - * structure. + * allocating a new colormap entry. Allocates a new TkColor structure. * *---------------------------------------------------------------------- */ TkColor * -TkpGetColor(tkwin, name) - Tk_Window tkwin; /* Window in which color will be used. */ - Tk_Uid name; /* Name of color to allocated (in form +TkpGetColor( + Tk_Window tkwin, /* Window in which color will be used. */ + Tk_Uid name) /* Name of color to allocated (in form * suitable for passing to XParseColor). */ { WinColor *winColPtr; XColor color; int index = -1; /* -1 indicates that this is not an indirect - * sytem color. */ + * system color. */ /* - * Check to see if it is a system color or an X color string. If the - * color is found, allocate a new WinColor and store the XColor and the - * system color index. + * Check to see if it is a system color or an X color string. If the color + * is found, allocate a new WinColor and store the XColor and the system + * color index. */ if (((strncasecmp(name, "system", 6) == 0) @@ -209,7 +208,7 @@ TkpGetColor(tkwin, name) XAllocColor(Tk_Display(tkwin), Tk_Colormap(tkwin), &winColPtr->info.color); - return (TkColor *) winColPtr; + return (TkColor *) winColPtr; } return (TkColor *) NULL; } @@ -219,27 +218,26 @@ TkpGetColor(tkwin, name) * * TkpGetColorByValue -- * - * Given a desired set of red-green-blue intensities for a color, - * locate a pixel value to use to draw that color in a given - * window. + * Given a desired set of red-green-blue intensities for a color, locate + * a pixel value to use to draw that color in a given window. * * Results: - * The return value is a pointer to an TkColor structure that - * indicates the closest red, blue, and green intensities available - * to those specified in colorPtr, and also specifies a pixel - * value to use to draw in that color. + * The return value is a pointer to an TkColor structure that indicates + * the closest red, blue, and green intensities available to those + * specified in colorPtr, and also specifies a pixel value to use to draw + * in that color. * * Side effects: - * May invalidate the colormap cache for the specified window. - * Allocates a new TkColor structure. + * May invalidate the colormap cache for the specified window. Allocates + * a new TkColor structure. * *---------------------------------------------------------------------- */ TkColor * -TkpGetColorByValue(tkwin, colorPtr) - Tk_Window tkwin; /* Window in which color will be used. */ - XColor *colorPtr; /* Red, green, and blue fields indicate +TkpGetColorByValue( + Tk_Window tkwin, /* Window in which color will be used. */ + XColor *colorPtr) /* Red, green, and blue fields indicate * desired color. */ { WinColor *tkColPtr = (WinColor *) ckalloc(sizeof(WinColor)); @@ -264,15 +262,15 @@ TkpGetColorByValue(tkwin, colorPtr) * None * * Side effects: - * Invalidates the colormap cache for the colormap associated with - * the given color. + * Invalidates the colormap cache for the colormap associated with the + * given color. * *---------------------------------------------------------------------- */ void -TkpFreeColor(tkColPtr) - TkColor *tkColPtr; /* Color to be released. Must have been +TkpFreeColor( + TkColor *tkColPtr) /* Color to be released. Must have been * allocated by TkpGetColor or * TkpGetColorByValue. */ { @@ -287,13 +285,13 @@ TkpFreeColor(tkColPtr) * * TkWinIndexOfColor -- * - * Given a color, return the system color index that was used - * to create the color. + * Given a color, return the system color index that was used to create + * the color. * * Results: - * If the color was allocated using a system indirect color name, - * then the corresponding GetSysColor() index is returned. - * Otherwise, -1 is returned. + * If the color was allocated using a system indirect color name, then + * the corresponding GetSysColor() index is returned. Otherwise, -1 is + * returned. * * Side effects: * None. @@ -302,13 +300,13 @@ TkpFreeColor(tkColPtr) */ int -TkWinIndexOfColor(colorPtr) - XColor *colorPtr; +TkWinIndexOfColor( + XColor *colorPtr) { register WinColor *winColPtr = (WinColor *) colorPtr; if (winColPtr->info.magic == COLOR_MAGIC) { return winColPtr->index; - } + } return -1; } @@ -320,8 +318,8 @@ TkWinIndexOfColor(colorPtr) * Find the closest available color to the specified XColor. * * Results: - * Updates the color argument and returns 1 on success. Otherwise - * returns 0. + * Updates the color argument and returns 1 on success. Otherwise returns + * 0. * * Side effects: * Allocates a new color in the palette. @@ -330,10 +328,10 @@ TkWinIndexOfColor(colorPtr) */ int -XAllocColor(display, colormap, color) - Display* display; - Colormap colormap; - XColor* color; +XAllocColor( + Display *display, + Colormap colormap, + XColor *color) { TkWinColormap *cmap = (TkWinColormap *) colormap; PALETTEENTRY entry, closeEntry; @@ -354,7 +352,7 @@ XAllocColor(display, colormap, color) /* * Find the nearest existing palette entry. */ - + newPixel = RGB(entry.peRed, entry.peGreen, entry.peBlue); index = GetNearestPaletteIndex(cmap->palette, newPixel); GetPaletteEntries(cmap->palette, index, 1, &closeEntry); @@ -362,15 +360,14 @@ XAllocColor(display, colormap, color) closeEntry.peBlue); /* - * If this is not a duplicate, allocate a new entry. Note that - * we may get values for index that are above the current size - * of the palette. This happens because we don't shrink the size of - * the palette object when we deallocate colors so there may be - * stale values that match in the upper slots. We should ignore - * those values and just put the new color in as if the colors - * had not matched. + * If this is not a duplicate, allocate a new entry. Note that we may + * get values for index that are above the current size of the + * palette. This happens because we don't shrink the size of the + * palette object when we deallocate colors so there may be stale + * values that match in the upper slots. We should ignore those values + * and just put the new color in as if the colors had not matched. */ - + if ((index >= cmap->size) || (newPixel != closePixel)) { if (cmap->size == sizePalette) { color->red = closeEntry.peRed * 257; @@ -397,11 +394,10 @@ XAllocColor(display, colormap, color) } Tcl_SetHashValue(entryPtr, (ClientData)refCount); } else { - /* * Determine what color will actually be used on non-colormap systems. */ - + color->pixel = GetNearestColor(dc, RGB(entry.peRed, entry.peGreen, entry.peBlue)); color->red = GetRValue(color->pixel) * 257; @@ -424,19 +420,19 @@ XAllocColor(display, colormap, color) * None. * * Side effects: - * Removes entries for the current palette and compacts the - * remaining set. + * Removes entries for the current palette and compacts the remaining + * set. * *---------------------------------------------------------------------- */ void -XFreeColors(display, colormap, pixels, npixels, planes) - Display* display; - Colormap colormap; - unsigned long* pixels; - int npixels; - unsigned long planes; +XFreeColors( + Display *display, + Colormap colormap, + unsigned long *pixels, + int npixels, + unsigned long planes) { TkWinColormap *cmap = (TkWinColormap *) colormap; COLORREF cref; @@ -449,18 +445,16 @@ XFreeColors(display, colormap, pixels, npixels, planes) /* * We don't have to do anything for non-palette devices. */ - - if (GetDeviceCaps(dc, RASTERCAPS) & RC_PALETTE) { + if (GetDeviceCaps(dc, RASTERCAPS) & RC_PALETTE) { /* * This is really slow for large values of npixels. */ for (i = 0; i < npixels; i++) { - entryPtr = Tcl_FindHashEntry(&cmap->refCounts, - (char *) pixels[i]); + entryPtr = Tcl_FindHashEntry(&cmap->refCounts, (char *) pixels[i]); if (!entryPtr) { - panic("Tried to free a color that isn't allocated."); + Tcl_Panic("Tried to free a color that isn't allocated."); } refCount = (int) Tcl_GetHashValue(entryPtr) - 1; if (refCount == 0) { @@ -469,14 +463,14 @@ XFreeColors(display, colormap, pixels, npixels, planes) GetPaletteEntries(cmap->palette, index, 1, &entry); if (cref == RGB(entry.peRed, entry.peGreen, entry.peBlue)) { count = cmap->size - index; - entries = (PALETTEENTRY *) ckalloc(sizeof(PALETTEENTRY) - * count); + entries = (PALETTEENTRY *) + ckalloc(sizeof(PALETTEENTRY) * count); GetPaletteEntries(cmap->palette, index+1, count, entries); SetPaletteEntries(cmap->palette, index, count, entries); ckfree((char *) entries); cmap->size--; } else { - panic("Tried to free a color that isn't allocated."); + Tcl_Panic("Tried to free a color that isn't allocated."); } Tcl_DeleteHashEntry(entryPtr); } else { @@ -504,11 +498,11 @@ XFreeColors(display, colormap, pixels, npixels, planes) */ Colormap -XCreateColormap(display, w, visual, alloc) - Display* display; - Window w; - Visual* visual; - int alloc; +XCreateColormap( + Display *display, + Window w, + Visual *visual, + int alloc) { char logPalBuf[sizeof(LOGPALETTE) + 256 * sizeof(PALETTEENTRY)]; LOGPALETTE *logPalettePtr; @@ -542,7 +536,7 @@ XCreateColormap(display, w, visual, alloc) for (i = 0; i < logPalettePtr->palNumEntries; i++) { entryPtr = logPalettePtr->palPalEntry + i; hashPtr = Tcl_CreateHashEntry(&cmap->refCounts, (char*) PALETTERGB( - entryPtr->peRed, entryPtr->peGreen, entryPtr->peBlue), &new); + entryPtr->peRed, entryPtr->peGreen, entryPtr->peBlue), &new); Tcl_SetHashValue(hashPtr, (ClientData)1); } @@ -560,21 +554,21 @@ XCreateColormap(display, w, visual, alloc) * None. * * Side effects: - * Deletes the palette associated with the colormap. Note that - * the palette must not be selected into a device context when - * this occurs. + * Deletes the palette associated with the colormap. Note that the + * palette must not be selected into a device context when this occurs. * *---------------------------------------------------------------------- */ void -XFreeColormap(display, colormap) - Display* display; - Colormap colormap; +XFreeColormap( + Display *display, + Colormap colormap) { TkWinColormap *cmap = (TkWinColormap *) colormap; + if (!DeleteObject(cmap->palette)) { - panic("Unable to free colormap, palette is still selected."); + Tcl_Panic("Unable to free colormap, palette is still selected."); } Tcl_DeleteHashTable(&cmap->refCounts); ckfree((char *) cmap); @@ -585,10 +579,9 @@ XFreeColormap(display, colormap) * * TkWinSelectPalette -- * - * This function sets up the specified device context with a - * given palette. If the palette is stale, it realizes it in - * the background unless the palette is the current global - * palette. + * This function sets up the specified device context with a given + * palette. If the palette is stale, it realizes it in the background + * unless the palette is the current global palette. * * Results: * Returns the previous palette selected into the device context. @@ -600,9 +593,9 @@ XFreeColormap(display, colormap) */ HPALETTE -TkWinSelectPalette(dc, colormap) - HDC dc; - Colormap colormap; +TkWinSelectPalette( + HDC dc, + Colormap colormap) { TkWinColormap *cmap = (TkWinColormap *) colormap; HPALETTE oldPalette; @@ -612,3 +605,11 @@ TkWinSelectPalette(dc, colormap) RealizePalette(dc); return oldPalette; } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ |