Prima

 view release on metacpan or  search on metacpan

unix/color.c  view on Meta::CPAN

/***********************************************************/
/*                                                         */
/*  System dependent color management                      */
/*                                                         */
/***********************************************************/

#include "unix/guts.h"
#include "Drawable.h"
#include "Window.h"

/* have two color layouts for panel widgets (lists, edits) and gray widgets (buttons, labels) */
#define COLOR_DEFAULT_TEXT         0x000000
#define COLOR_DEFAULT_GRAY         0xcccccc
#define COLOR_DEFAULT_BACK         0xffffff

#define COLOR_GRAY_NORMAL_TEXT     COLOR_DEFAULT_TEXT
#define COLOR_GRAY_NORMAL_BACK     COLOR_DEFAULT_GRAY
#define COLOR_GRAY_HILITE_TEXT     COLOR_DEFAULT_TEXT
#define COLOR_GRAY_HILITE_BACK     COLOR_DEFAULT_GRAY
#define COLOR_GRAY_DISABLED_TEXT   0x606060
#define COLOR_GRAY_DISABLED_BACK   0xcccccc

#define COLOR_PANEL_NORMAL_TEXT    COLOR_DEFAULT_TEXT
#define COLOR_PANEL_NORMAL_BACK    COLOR_DEFAULT_BACK
#define COLOR_PANEL_HILITE_TEXT    COLOR_DEFAULT_BACK
#define COLOR_PANEL_HILITE_BACK    COLOR_DEFAULT_TEXT
#define COLOR_PANEL_DISABLED_TEXT  0x606060
#define COLOR_PANEL_DISABLED_BACK  0xdddddd

#define COLOR_LIGHT3D              0xffffff
#define COLOR_DARK3D               0x808080

#define COLORSET_GRAY_NORMAL       COLOR_GRAY_NORMAL_TEXT,   COLOR_GRAY_NORMAL_BACK
#define COLORSET_GRAY_HILITE       COLOR_GRAY_HILITE_TEXT,   COLOR_GRAY_HILITE_BACK
#define COLORSET_GRAY_ALT_HILITE   COLOR_GRAY_HILITE_BACK,   COLOR_GRAY_HILITE_TEXT
#define COLORSET_GRAY_DISABLED     COLOR_GRAY_DISABLED_TEXT, COLOR_GRAY_DISABLED_BACK

#define COLORSET_PANEL_NORMAL      COLOR_PANEL_NORMAL_TEXT,   COLOR_PANEL_NORMAL_BACK
#define COLORSET_PANEL_HILITE      COLOR_PANEL_HILITE_TEXT,   COLOR_PANEL_HILITE_BACK
#define COLORSET_PANEL_DISABLED    COLOR_PANEL_DISABLED_TEXT, COLOR_PANEL_DISABLED_BACK

#define COLORSET_3D                COLOR_LIGHT3D, COLOR_DARK3D

#define COLORSET_GRAY              COLORSET_GRAY_NORMAL,  COLORSET_GRAY_HILITE,     COLORSET_GRAY_DISABLED,  COLORSET_3D
#define COLORSET_ALT_GRAY          COLORSET_GRAY_NORMAL,  COLORSET_GRAY_ALT_HILITE, COLORSET_GRAY_DISABLED,  COLORSET_3D
#define COLORSET_PANEL             COLORSET_PANEL_NORMAL, COLORSET_PANEL_HILITE,    COLORSET_PANEL_DISABLED, COLORSET_3D

static Color standard_button_colors[]      = { COLORSET_GRAY     };
static Color standard_checkbox_colors[]    = { COLORSET_GRAY     };
static Color standard_combo_colors[]       = { COLORSET_GRAY     };
static Color standard_dialog_colors[]      = { COLORSET_GRAY     };
static Color standard_edit_colors[]        = { COLORSET_PANEL    };
static Color standard_inputline_colors[]   = { COLORSET_PANEL    };
static Color standard_label_colors[]       = { COLORSET_GRAY     };
static Color standard_listbox_colors[]     = { COLORSET_PANEL    };
static Color standard_menu_colors[]        = { COLORSET_ALT_GRAY };
static Color standard_popup_colors[]       = { COLORSET_ALT_GRAY };
static Color standard_radio_colors[]       = { COLORSET_GRAY     };
static Color standard_scrollbar_colors[]   = { COLORSET_ALT_GRAY };
static Color standard_slider_colors[]      = { COLORSET_GRAY     };
static Color standard_widget_colors[]      = { COLORSET_ALT_GRAY };
static Color standard_window_colors[]      = { COLORSET_GRAY     };
static Color standard_application_colors[] = { COLORSET_GRAY     };

static Color* standard_colors[] = {
	NULL,
	standard_button_colors,		/* Prima.Button.* */
	standard_checkbox_colors,		/* Prima.Checkbox.* */
	standard_combo_colors,		/* Prima.Combo.* */
	standard_dialog_colors,		/* Prima.Dialog.* */
	standard_edit_colors,		/*   ...etc... */
	standard_inputline_colors,
	standard_label_colors,
	standard_listbox_colors,
	standard_menu_colors,
	standard_popup_colors,
	standard_radio_colors,
	standard_scrollbar_colors,
	standard_slider_colors,
	standard_widget_colors,
	standard_window_colors,
	standard_application_colors,
};

static const int MAX_COLOR_CLASS = sizeof(standard_colors) / sizeof( standard_colors[ 0]) - 1;

Color **
prima_standard_colors(int * n_classes)
{
	if ( n_classes ) *n_classes = MAX_COLOR_CLASS + 1;
	return standard_colors;
}

/* maps RGB or cl-constant value to RGB value.  */
Color
prima_map_color( Color clr, int * hint)
{
	long cls;
	if ( hint) *hint = COLORHINT_NONE;
	if (( clr & clSysFlag) == 0) return clr;

	cls = (clr & wcMask) >> 16;
	if ( cls <= 0 || cls > MAX_COLOR_CLASS) cls = (wcWidget) >> 16;
	if (( clr = ( clr & ~wcMask)) > clMaxSysColor) clr = clMaxSysColor;
	if ( clr == clSet)   {
		if ( hint) *hint = COLORHINT_WHITE;
		return 0xffffff;
	} else if ( clr == clClear) {
		if ( hint) *hint = COLORHINT_BLACK;
		return 0;
	} else if ( clr == clInvalid) {
		return 0xffffff;
	} else return standard_colors[cls][(clr & clSysMask) - 1];
}

Color
apc_widget_map_color( Handle self, Color color)
{
	if ((( color & clSysFlag) != 0) && (( color & wcMask) == 0)) color |= PWidget(self)-> widgetClass;
	return prima_map_color( color, NULL);
}

static PHash  hatches;
static Bool   kill_hatches( Pixmap pixmap, int keyLen, void * key, void * dummy);
static Bool   prima_color_new( XColor * xc);

/*
static int card[256];
static int cardi = 0;
static Bool
my_XAllocColor( Display * disp, Colormap cm, XColor * xc, int line)
{
	if ( !cardi) {
		cardi = 1;
		bzero( card, 256*sizeof(int));
	}



( run in 0.615 second using v1.01-cache-2.11-cpan-364913b4093 )