1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
/*
* $Id$
*/
#include "../x_color.h"
#include <string.h> /* memcpy,strcmp */
#include <stdio.h> /* sscanf */
#include <kiklib/kik_mem.h>
#include <kiklib/kik_debug.h>
#include <ml_color.h>
/* --- global functions --- */
int
x_load_named_xcolor(
x_display_t * disp ,
x_color_t * xcolor ,
char * name
)
{
ml_color_t color ;
u_int8_t red ;
u_int8_t green ;
u_int8_t blue ;
u_int8_t alpha ;
if( ml_color_parse_rgb_name( &red , &green , &blue , &alpha , name))
{
return x_load_rgb_xcolor( disp , xcolor , red , green , blue , alpha) ;
}
if( ( color = ml_get_color( name)) == ML_UNKNOWN_COLOR ||
! ml_get_color_rgb( color , &red , &green , &blue))
{
if( strcmp( name , "gray") == 0)
{
red = green = blue = 190 ;
}
else if( strcmp( name , "lightgray") == 0)
{
red = green = blue = 211 ;
}
else
{
return 0 ;
}
}
return x_load_rgb_xcolor( disp , xcolor , red , green , blue , 0xff) ;
}
int
x_load_rgb_xcolor(
x_display_t * disp ,
x_color_t * xcolor ,
u_int8_t red ,
u_int8_t green ,
u_int8_t blue ,
u_int8_t alpha
)
{
xcolor->pixel = RGB(red,green,blue) | (alpha << 24) ;
return 1 ;
}
int
x_unload_xcolor(
x_display_t * disp ,
x_color_t * xcolor
)
{
return 1 ;
}
int
x_get_xcolor_rgb(
u_int8_t * red ,
u_int8_t * green ,
u_int8_t * blue ,
u_int8_t * alpha , /* can be NULL */
x_color_t * xcolor
)
{
*red = GetRValue( xcolor->pixel) ;
*green = GetGValue( xcolor->pixel) ;
*blue = GetBValue( xcolor->pixel) ;
if( alpha)
{
*alpha = (xcolor->pixel >> 24) & 0xff ;
}
return 1 ;
}
int
x_xcolor_fade(
x_display_t * disp ,
x_color_t * xcolor ,
u_int fade_ratio
)
{
u_int8_t red ;
u_int8_t green ;
u_int8_t blue ;
u_int8_t alpha ;
x_get_xcolor_rgb( &red , &green , &blue , &alpha , xcolor) ;
red = (red * fade_ratio) / 100 ;
green = (green * fade_ratio) / 100 ;
blue = (blue * fade_ratio) / 100 ;
x_unload_xcolor( disp , xcolor) ;
return x_load_rgb_xcolor( disp , xcolor , red , green , blue , alpha) ;
}
|