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 )