⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tkwincolor.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  * tkWinColor.c -- * *	Functions to map color names to system color values. * * 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. * * SCCS: @(#) tkWinColor.c 1.20 97/10/27 16:39:23 */#include <tkColor.h>#include <tkWinInt.h>/* * The following structure is used to keep track of each color that is * allocated by this module. */typedef struct WinColor {    TkColor info;		/* Generic color information. */    int index;			/* Index for GetSysColor(), -1 if color				 * is not a "live" system color. */} WinColor;/* * colorTable is a hash table used to look up X colors by name. */static Tcl_HashTable colorTable;/* * 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 {    char *name;    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};static int ncolors = 0;static int askedforpalette=0;static int haspalette=0;static unsigned long sizePalette=0;/* * Forward declarations for functions defined later in this file. */static int	FindSystemColor _ANSI_ARGS_((const char *name,		    XColor *colorPtr, int *indexPtr));static int	GetColorByName _ANSI_ARGS_((char *name, XColor *color));static int	GetColorByValue _ANSI_ARGS_((char *value, XColor *color));/* *---------------------------------------------------------------------- * * FindSystemColor -- * *	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. * * Side effects: *	None. * *---------------------------------------------------------------------- */static intFindSystemColor(name, colorPtr, indexPtr)    const char *name;		/* Color name. */    XColor *colorPtr;		/* Where to store results. */    int *indexPtr;		/* Out parameter to store color index. */{    int l, u, r, i;    /*     * Count the number of elements in the color array if we haven't     * done so yet.     */    if (ncolors == 0) {	SystemColorEntry *ePtr;	int version;	version = LOBYTE(LOWORD(GetVersion()));	for (ePtr = sysColors; ePtr->name != NULL; ePtr++) {	    if (version < 4) {		if (ePtr->index == COLOR_3DDKSHADOW) {		    ePtr->index = COLOR_BTNSHADOW;		} else if (ePtr->index == COLOR_3DLIGHT) {		    ePtr->index = COLOR_BTNHIGHLIGHT;		}	    }	    ncolors++;	}    }    /*     * Perform a binary search on the sorted array of colors.     */    l = 0;    u = ncolors - 1;    while (l <= u) {	i = (l + u) / 2;	r = strcasecmp(name, sysColors[i].name);	if (r == 0) {	    break;	} else if (r < 0) {	    u = i-1;	} else {	    l = i+1;	}    }    if (l > u) {	return 0;    }    *indexPtr = sysColors[i].index;    colorPtr->pixel = GetSysColor(sysColors[i].index);    colorPtr->red = GetRValue(colorPtr->pixel) << 8;    colorPtr->green = GetGValue(colorPtr->pixel) << 8;    colorPtr->blue = GetBValue(colorPtr->pixel) << 8;    colorPtr->flags = DoRed|DoGreen|DoBlue;    colorPtr->pad = 0;    return 1;}/* *---------------------------------------------------------------------- * * TkpGetColor -- * *	Allocate a new TkColor for the color with the given name. * * Results: *	Returns a newly allocated TkColor, or NULL on failure. * * Side effects: *	May invalidate the colormap cache associated with tkwin upon *	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				 * suitable for passing to XParseColor). */{    WinColor *winColPtr;    XColor color;    int index = -1;		/* -1 indicates that this is not an indirect				 * sytem 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.     */    if (((strncasecmp(name, "system", 6) == 0)	    && FindSystemColor(name+6, &color, &index))	    || XParseColor(Tk_Display(tkwin), Tk_Colormap(tkwin), name,		    &color)) {	winColPtr = (WinColor *) ckalloc(sizeof(WinColor));	winColPtr->info.color = color;	winColPtr->index = index;	XAllocColor(Tk_Display(tkwin), Tk_Colormap(tkwin),		&winColPtr->info.color); 	return (TkColor *) winColPtr;     }    return (TkColor *) NULL;}/* *---------------------------------------------------------------------- * * 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. * * 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. * * Side effects: *	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				 * desired color. */{    WinColor *tkColPtr = (WinColor *) ckalloc(sizeof(WinColor));    tkColPtr->info.color.red = colorPtr->red;    tkColPtr->info.color.green = colorPtr->green;    tkColPtr->info.color.blue = colorPtr->blue;    tkColPtr->info.color.pixel = 0;    tkColPtr->index = -1;    XAllocColor(Tk_Display(tkwin), Tk_Colormap(tkwin), &tkColPtr->info.color);    return (TkColor *) tkColPtr;}/* *---------------------------------------------------------------------- * * TkpFreeColor -- * *	Release the specified color back to the system. * * Results: *	None * * Side effects: *	Invalidates the colormap cache for the colormap associated with *	the given color. * *---------------------------------------------------------------------- */voidTkpFreeColor(tkColPtr)    TkColor *tkColPtr;		/* Color to be released.  Must have been				 * allocated by TkpGetColor or				 * TkpGetColorByValue. */{    Screen *screen = tkColPtr->screen;    XFreeColors(DisplayOfScreen(screen), tkColPtr->colormap,	    &tkColPtr->color.pixel, 1, 0L);}/* *---------------------------------------------------------------------- * * TkWinIndexOfColor -- * *	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. * * Side effects: *	None. * *---------------------------------------------------------------------- */intTkWinIndexOfColor(colorPtr)    XColor *colorPtr;{    register WinColor *winColPtr = (WinColor *) colorPtr;    if (winColPtr->info.magic == COLOR_MAGIC) {	return winColPtr->index;    }        return -1;}/* *---------------------------------------------------------------------- *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -