summaryrefslogtreecommitdiffstats
path: root/source/x11-helper.c
diff options
context:
space:
mode:
authorQC <qball@gmpclient.org>2015-10-10 14:15:27 +0200
committerQC <qball@gmpclient.org>2015-10-10 14:15:27 +0200
commit2898eeda8806776eaef6c8a998b2433868115287 (patch)
treedf6bd2e72abf07b39126fef596dd598099b19bd0 /source/x11-helper.c
parentd5549db3847598e696f8a5d424986a19c8e67499 (diff)
Cache colors.
Diffstat (limited to 'source/x11-helper.c')
-rw-r--r--source/x11-helper.c97
1 files changed, 65 insertions, 32 deletions
diff --git a/source/x11-helper.c b/source/x11-helper.c
index 1a8c8dfe..346bb7ad 100644
--- a/source/x11-helper.c
+++ b/source/x11-helper.c
@@ -546,53 +546,86 @@ void x11_helper_set_cairo_rgba ( cairo_t *d, unsigned int pixel )
( ( pixel & 0xFF000000 ) >> 24 ) / 256.0
);
}
+/**
+ * Color cache.
+ *
+ * This stores the current color until
+ */
+enum
+{
+ BACKGROUND,
+ BORDER,
+ SEPARATOR
+};
+struct
+{
+ unsigned int color;
+ unsigned int set;
+} color_cache[3] = {
+ { 0, FALSE },
+ { 0, FALSE },
+ { 0, FALSE }
+};
+void color_cache_reset ( void )
+{
+ color_cache[BACKGROUND].set = FALSE;
+ color_cache[BORDER].set = FALSE;
+ color_cache[SEPARATOR].set = FALSE;
+}
void color_background ( Display *display, cairo_t *d )
{
- unsigned int pixel = 0;
- if ( !config.color_enabled ) {
- pixel = color_get ( display, config.menu_bg, "black" );
- }
- else {
- gchar **vals = g_strsplit ( config.color_window, ",", 3 );
- if ( vals != NULL && vals[0] != NULL ) {
- pixel = color_get ( display, vals[0], "black" );
+ if ( !color_cache[BACKGROUND].set ) {
+ if ( !config.color_enabled ) {
+ color_cache[BACKGROUND].color = color_get ( display, config.menu_bg, "black" );
+ }
+ else {
+ gchar **vals = g_strsplit ( config.color_window, ",", 3 );
+ if ( vals != NULL && vals[0] != NULL ) {
+ color_cache[BACKGROUND].color = color_get ( display, vals[0], "black" );
+ }
+ g_strfreev ( vals );
}
- g_strfreev ( vals );
+ color_cache[BACKGROUND].set = TRUE;
}
- x11_helper_set_cairo_rgba ( d, pixel );
+
+ x11_helper_set_cairo_rgba ( d, color_cache[BACKGROUND].color );
}
void color_border ( Display *display, cairo_t *d )
{
- unsigned int pixel = 0;
- if ( !config.color_enabled ) {
- pixel = color_get ( display, config.menu_bc, "white" );
- }
- else {
- gchar **vals = g_strsplit ( config.color_window, ",", 3 );
- if ( vals != NULL && vals[0] != NULL && vals[1] != NULL ) {
- pixel = color_get ( display, vals[1], "white" );
+ if ( !color_cache[BORDER].set ) {
+ if ( !config.color_enabled ) {
+ color_cache[BORDER].color = color_get ( display, config.menu_bc, "white" );
+ }
+ else {
+ gchar **vals = g_strsplit ( config.color_window, ",", 3 );
+ if ( vals != NULL && vals[0] != NULL && vals[1] != NULL ) {
+ color_cache[BORDER].color = color_get ( display, vals[1], "white" );
+ }
+ g_strfreev ( vals );
}
- g_strfreev ( vals );
+ color_cache[BORDER].set = TRUE;
}
- x11_helper_set_cairo_rgba ( d, pixel );
+ x11_helper_set_cairo_rgba ( d, color_cache[BORDER].color );
}
void color_separator ( Display *display, cairo_t *d )
{
- unsigned int pixel = 0;
- if ( !config.color_enabled ) {
- pixel = color_get ( display, config.menu_bc, "white" );
- }
- else {
- gchar **vals = g_strsplit ( config.color_window, ",", 3 );
- if ( vals != NULL && vals[0] != NULL && vals[1] != NULL && vals[2] != NULL ) {
- pixel = color_get ( display, vals[2], "white" );
+ if ( !color_cache[SEPARATOR].set ) {
+ if ( !config.color_enabled ) {
+ color_cache[SEPARATOR].color = color_get ( display, config.menu_bc, "white" );
}
- else if ( vals != NULL && vals[0] != NULL && vals[1] != NULL ) {
- pixel = color_get ( display, vals[1], "white" );
+ else {
+ gchar **vals = g_strsplit ( config.color_window, ",", 3 );
+ if ( vals != NULL && vals[0] != NULL && vals[1] != NULL && vals[2] != NULL ) {
+ color_cache[SEPARATOR].color = color_get ( display, vals[2], "white" );
+ }
+ else if ( vals != NULL && vals[0] != NULL && vals[1] != NULL ) {
+ color_cache[SEPARATOR].color = color_get ( display, vals[1], "white" );
+ }
+ g_strfreev ( vals );
}
- g_strfreev ( vals );
+ color_cache[SEPARATOR].set = TRUE;
}
- x11_helper_set_cairo_rgba ( d, pixel );
+ x11_helper_set_cairo_rgba ( d, color_cache[SEPARATOR].color );
}