00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef GO_COLOR_H
00027 #define GO_COLOR_H
00028
00029 #include <glib.h>
00030 #include <goffice/goffice-features.h>
00031 #include <goffice/utils/goffice-utils.h>
00032 #include <pango/pango.h>
00033
00034 #ifdef GOFFICE_WITH_GTK
00035 #include <gdk/gdktypes.h>
00036 #endif
00037
00038 G_BEGIN_DECLS
00039
00040
00041
00042
00043
00044
00045
00046 #define GDK_TO_UINT(c) RGBA_TO_UINT(((c).red>>8), ((c).green>>8), ((c).blue>>8), 0xff)
00047
00048 #define RGB_TO_UINT(r,g,b) ((((guint)(r))<<16)|(((guint)(g))<<8)|((guint)(b)))
00049 #define RGB_TO_RGBA(x,a) (((x) << 8) | ((((guint)a) & 0xff)))
00050 #define RGB_WHITE RGB_TO_UINT(0xff, 0xff, 0xff)
00051 #define RGB_BLACK RGB_TO_UINT(0x00, 0x00, 0x00)
00052 #define RGB_RED RGB_TO_UINT(0xff, 0x00, 0x00)
00053 #define RGB_GREEN RGB_TO_UINT(0x00, 0xff, 0x00)
00054 #define RGB_BLUE RGB_TO_UINT(0x00, 0x00, 0xff)
00055 #define RGB_YELLOW RGB_TO_UINT(0xff, 0xff, 0x00)
00056 #define RGB_VIOLET RGB_TO_UINT(0xff, 0x00, 0xff)
00057 #define RGB_CYAN RGB_TO_UINT(0x00, 0xff, 0xff)
00058 #define RGB_GREY(x) RGB_TO_UINT(x,x,x)
00059
00060 #define RGBA_TO_UINT(r,g,b,a) ((((guint)(r))<<24)|(((guint)(g))<<16)|(((guint)(b))<<8)|(guint)(a))
00061 #define RGBA_WHITE RGB_TO_RGBA(RGB_WHITE, 0xff)
00062 #define RGBA_BLACK RGB_TO_RGBA(RGB_BLACK, 0xff)
00063 #define RGBA_RED RGB_TO_RGBA(RGB_RED, 0xff)
00064 #define RGBA_GREEN RGB_TO_RGBA(RGB_GREEN, 0xff)
00065 #define RGBA_BLUE RGB_TO_RGBA(RGB_BLUE, 0xff)
00066 #define RGBA_YELLOW RGB_TO_RGBA(RGB_YELLOW, 0xff)
00067 #define RGBA_VIOLET RGB_TO_RGBA(RGB_VIOLET, 0xff)
00068 #define RGBA_CYAN RGB_TO_RGBA(RGB_CYAN, 0xff)
00069 #define RGBA_GREY(x) RGB_TO_RGBA(RGB_GREY(x), 0xff)
00070
00071 #define UINT_RGBA_R(x) (((guint)(x))>>24)
00072 #define UINT_RGBA_G(x) ((((guint)(x))>>16)&0xff)
00073 #define UINT_RGBA_B(x) ((((guint)(x))>>8)&0xff)
00074 #define UINT_RGBA_A(x) (((guint)(x))&0xff)
00075 #define UINT_RGBA_CHANGE_R(x, r) (((x)&(~(0xff<<24)))|(((r)&0xff)<<24))
00076 #define UINT_RGBA_CHANGE_G(x, g) (((x)&(~(0xff<<16)))|(((g)&0xff)<<16))
00077 #define UINT_RGBA_CHANGE_B(x, b) (((x)&(~(0xff<<8)))|(((b)&0xff)<<8))
00078 #define UINT_RGBA_CHANGE_A(x, a) (((x)&(~0xff))|((a)&0xff))
00079 #define UINT_TO_RGB(u,r,g,b) \
00080 { (*(r)) = ((u)>>16)&0xff; (*(g)) = ((u)>>8)&0xff; (*(b)) = (u)&0xff; }
00081 #define UINT_TO_RGBA(u,r,g,b,a) \
00082 { UINT_TO_RGB(((u)>>8),r,g,b); (*(a)) = (u)&0xff; }
00083 #define MONO_INTERPOLATE(v1, v2, t) ((gint)go_rint((v2)*(t)+(v1)*(1-(t))))
00084 #define UINT_INTERPOLATE(c1, c2, t) \
00085 RGBA_TO_UINT( MONO_INTERPOLATE(UINT_RGBA_R(c1), UINT_RGBA_R(c2), t), \
00086 MONO_INTERPOLATE(UINT_RGBA_G(c1), UINT_RGBA_G(c2), t), \
00087 MONO_INTERPOLATE(UINT_RGBA_B(c1), UINT_RGBA_B(c2), t), \
00088 MONO_INTERPOLATE(UINT_RGBA_A(c1), UINT_RGBA_A(c2), t) )
00089 #define PIXEL_RGB(p, r, g, b) \
00090 {((guchar*)(p))[0]=(r); ((guchar*)(p))[1]=(g); ((guchar*)(p))[2]=(b);}
00091 #define PIXEL_RGBA(p, r, g, b, a) \
00092 { if ((a)>=0xff) { PIXEL_RGB(p,r,g,b) } \
00093 else if ((a)>0) { \
00094 guint pixel_tmp; \
00095 pixel_tmp = ((guchar*)(p))[0]; \
00096 ((guchar*)(p))[0] = pixel_tmp + ((((r)-pixel_tmp)*(a)+0x80) >> 8); \
00097 pixel_tmp = ((guchar*)(p))[1]; \
00098 ((guchar*)(p))[1] = pixel_tmp + ((((g)-pixel_tmp)*(a)+0x80) >> 8); \
00099 pixel_tmp = ((guchar*)(p))[2]; \
00100 ((guchar*)(p))[2] = pixel_tmp + ((((b)-pixel_tmp)*(a)+0x80) >> 8); }}
00101 #define PIXEL_RGB_UINT(p, i) \
00102 UINT_TO_RGB((i), ((guchar*)p), ((guchar*)p)+1, ((guchar*)p)+2)
00103 #define PIXEL_RGBA_UINT(p, i) \
00104 PIXEL_RGBA((p), ((i)>>24)&0xff, ((i)>>16)&0xff, ((i)>>8)&0xff, (i)&0xff)
00105 #define PIXEL_BLACK(p) PIXEL_RGB(p,0,0,0)
00106 #define PIXEL_WHITE(p) PIXEL_RGB(p,0xff,0xff,0xff)
00107 #define PIXEL_GREY(p,g) PIXEL_RGB(p,g,g,g)
00108 #define PIXEL_GREYA(p,g,a) PIXEL_RGBA(p,g,g,g,a)
00109
00110 #define DOUBLE_RGBA_R(x) (double)UINT_RGBA_R(x)/255.0
00111 #define DOUBLE_RGBA_G(x) (double)UINT_RGBA_G(x)/255.0
00112 #define DOUBLE_RGBA_B(x) (double)UINT_RGBA_B(x)/255.0
00113 #define DOUBLE_RGBA_A(x) (double)UINT_RGBA_A(x)/255.0
00114
00115 #define GO_COLOR_TO_CAIRO(x) DOUBLE_RGBA_R(x),DOUBLE_RGBA_G(x),DOUBLE_RGBA_B(x),DOUBLE_RGBA_A(x)
00116
00117 gboolean go_color_from_str (char const *str, GOColor *res);
00118 gchar *go_color_as_str (GOColor color);
00119 PangoAttribute *go_color_to_pango (GOColor color, gboolean is_fore);
00120 #ifdef GOFFICE_WITH_GTK
00121 GdkColor *go_color_to_gdk (GOColor color, GdkColor *res);
00122 #endif
00123
00124 G_END_DECLS
00125
00126 #endif