static void clearlooks_rc_style_merge (GtkRcStyle *dest, GtkRcStyle *src) { ClearlooksRcStyle *dest_w, *src_w; ClearlooksRcFlags flags; GTK_RC_STYLE_CLASS (clearlooks_rc_style_parent_class)->merge (dest, src); if (!CLEARLOOKS_IS_RC_STYLE (src)) return; src_w = CLEARLOOKS_RC_STYLE (src); dest_w = CLEARLOOKS_RC_STYLE (dest); flags = (~dest_w->flags) & src_w->flags; if (flags & CL_FLAG_STYLE) dest_w->style = src_w->style; if (flags & CL_FLAG_CONTRAST) dest_w->contrast = src_w->contrast; if (flags & CL_FLAG_RELIEFSTYLE) dest_w->reliefstyle = src_w->reliefstyle; if (flags & CL_FLAG_MENUBARSTYLE) dest_w->menubarstyle = src_w->menubarstyle; if (flags & CL_FLAG_TOOLBARSTYLE) dest_w->toolbarstyle = src_w->toolbarstyle; if (flags & CL_FLAG_FOCUS_COLOR) dest_w->focus_color = src_w->focus_color; if (flags & CL_FLAG_SCROLLBAR_COLOR) dest_w->scrollbar_color = src_w->scrollbar_color; if (flags & CL_FLAG_COLORIZE_SCROLLBAR) dest_w->colorize_scrollbar = src_w->colorize_scrollbar; if (flags & CL_FLAG_ANIMATION) dest_w->animation = src_w->animation; if (flags & CL_FLAG_RADIUS) dest_w->radius = src_w->radius; if (flags & CL_FLAG_HINT) dest_w->hint = src_w->hint; if (flags & CL_FLAG_DISABLE_FOCUS) dest_w->disable_focus = src_w->disable_focus; dest_w->flags |= src_w->flags; }
static void clearlooks_rc_style_merge (GtkRcStyle *dest, GtkRcStyle *src) { ClearlooksRcStyle *dest_w, *src_w; ClearlooksRcFlags flags; clearlooks_parent_rc_class->merge (dest, src); if (!CLEARLOOKS_IS_RC_STYLE (src)) return; src_w = CLEARLOOKS_RC_STYLE (src); dest_w = CLEARLOOKS_RC_STYLE (dest); flags = (~dest_w->flags) & src_w->flags; if (flags & CL_FLAG_STYLE) dest_w->style = src_w->style; if (flags & CL_FLAG_CONTRAST) dest_w->contrast = src_w->contrast; if (flags & CL_FLAG_MENUBARSTYLE) dest_w->menubarstyle = src_w->menubarstyle; if (flags & CL_FLAG_TOOLBARSTYLE) dest_w->toolbarstyle = src_w->toolbarstyle; if (flags & CL_FLAG_SCROLLBAR_COLOR) dest_w->scrollbar_color = src_w->scrollbar_color; if (flags & CL_FLAG_COLORIZE_SCROLLBAR) dest_w->colorize_scrollbar = src_w->colorize_scrollbar; if (flags & CL_FLAG_ANIMATION) dest_w->animation = src_w->animation; if (flags & CL_FLAG_RADIUS) dest_w->radius = src_w->radius; dest_w->flags |= src_w->flags; }
static void clearlooks_style_init_from_rc (GtkStyle * style, GtkRcStyle * rc_style) { ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style); clearlooks_parent_class->init_from_rc (style, rc_style); g_assert ((CLEARLOOKS_RC_STYLE (rc_style)->style < CL_NUM_STYLES)); clearlooks_style->style = CLEARLOOKS_RC_STYLE (rc_style)->style; clearlooks_style->menubarstyle = CLEARLOOKS_RC_STYLE (rc_style)->menubarstyle; clearlooks_style->toolbarstyle = CLEARLOOKS_RC_STYLE (rc_style)->toolbarstyle; clearlooks_style->has_scrollbar_color = CLEARLOOKS_RC_STYLE (rc_style)->flags & CL_FLAG_SCROLLBAR_COLOR; clearlooks_style->colorize_scrollbar = CLEARLOOKS_RC_STYLE (rc_style)->colorize_scrollbar; clearlooks_style->animation = CLEARLOOKS_RC_STYLE (rc_style)->animation; clearlooks_style->radius = CLAMP (CLEARLOOKS_RC_STYLE (rc_style)->radius, 0.0, 10.0); if (clearlooks_style->has_scrollbar_color) clearlooks_style->scrollbar_color = CLEARLOOKS_RC_STYLE (rc_style)->scrollbar_color; }
static void clearlooks_style_realize (GtkStyle * style) { ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style); double shades[] = {1.15, 0.95, 0.896, 0.82, 0.7, 0.665, 0.475, 0.45, 0.4}; CairoColor spot_color; CairoColor bg_normal; double contrast; int i; clearlooks_parent_class->realize (style); contrast = CLEARLOOKS_RC_STYLE (style->rc_style)->contrast; /* Lighter to darker */ ge_gdk_color_to_cairo (&style->bg[GTK_STATE_NORMAL], &bg_normal); for (i = 0; i < 9; i++) { ge_shade_color(&bg_normal, (shades[i]-0.7) * contrast + 0.7, &clearlooks_style->colors.shade[i]); } ge_gdk_color_to_cairo (&style->bg[GTK_STATE_SELECTED], &spot_color); ge_shade_color(&spot_color, 1.42, &clearlooks_style->colors.spot[0]); ge_shade_color(&spot_color, 1.05, &clearlooks_style->colors.spot[1]); ge_shade_color(&spot_color, 0.65, &clearlooks_style->colors.spot[2]); for (i=0; i<5; i++) { ge_gdk_color_to_cairo (&style->fg[i], &clearlooks_style->colors.fg[i]); ge_gdk_color_to_cairo (&style->bg[i], &clearlooks_style->colors.bg[i]); ge_gdk_color_to_cairo (&style->base[i], &clearlooks_style->colors.base[i]); ge_gdk_color_to_cairo (&style->text[i], &clearlooks_style->colors.text[i]); } }
static guint clearlooks_rc_style_parse (GtkRcStyle *rc_style, GtkSettings *settings, GScanner *scanner) { static GQuark scope_id = 0; ClearlooksRcStyle *clearlooks_style = CLEARLOOKS_RC_STYLE (rc_style); guint old_scope; guint token; /* Set up a new scope in this scanner. */ if (!scope_id) scope_id = g_quark_from_string("clearlooks_theme_engine"); /* If we bail out due to errors, we *don't* reset the scope, so the * error messaging code can make sense of our tokens. */ old_scope = g_scanner_set_scope(scanner, scope_id); /* Now check if we already added our symbols to this scope * (in some previous call to clearlooks_rc_style_parse for the * same scanner. */ if (!g_scanner_lookup_symbol(scanner, clearlooks_rc_symbols)) { gchar *current_symbol = clearlooks_rc_symbols; gint i = G_TOKEN_LAST + 1; /* Add our symbols */ while ((current_symbol[0] != '\0') && (i < TOKEN_LAST)) { g_scanner_scope_add_symbol(scanner, scope_id, current_symbol, GINT_TO_POINTER (i)); current_symbol += strlen(current_symbol) + 1; i++; } g_assert (i == TOKEN_LAST && current_symbol[0] == '\0'); } /* We're ready to go, now parse the top level */ token = g_scanner_peek_next_token(scanner); while (token != G_TOKEN_RIGHT_CURLY) { switch (token) { case TOKEN_FOCUSCOLOR: token = clearlooks_gtk2_rc_parse_color (settings, scanner, rc_style, &clearlooks_style->focus_color); clearlooks_style->flags |= CL_FLAG_FOCUS_COLOR; break; case TOKEN_SCROLLBARCOLOR: token = clearlooks_gtk2_rc_parse_color (settings, scanner, rc_style, &clearlooks_style->scrollbar_color); clearlooks_style->flags |= CL_FLAG_SCROLLBAR_COLOR; break; case TOKEN_COLORIZESCROLLBAR: token = clearlooks_gtk2_rc_parse_boolean (settings, scanner, &clearlooks_style->colorize_scrollbar); clearlooks_style->flags |= CL_FLAG_COLORIZE_SCROLLBAR; break; case TOKEN_CONTRAST: token = clearlooks_gtk2_rc_parse_double (settings, scanner, &clearlooks_style->contrast); clearlooks_style->flags |= CL_FLAG_CONTRAST; break; case TOKEN_RELIEFSTYLE: token = clearlooks_gtk2_rc_parse_int (settings, scanner, &clearlooks_style->reliefstyle); clearlooks_style->flags |= CL_FLAG_RELIEFSTYLE; break; case TOKEN_MENUBARSTYLE: token = clearlooks_gtk2_rc_parse_int (settings, scanner, &clearlooks_style->menubarstyle); clearlooks_style->flags |= CL_FLAG_MENUBARSTYLE; break; case TOKEN_TOOLBARSTYLE: token = clearlooks_gtk2_rc_parse_int (settings, scanner, &clearlooks_style->toolbarstyle); clearlooks_style->flags |= CL_FLAG_TOOLBARSTYLE; break; case TOKEN_ANIMATION: token = clearlooks_gtk2_rc_parse_boolean (settings, scanner, &clearlooks_style->animation); clearlooks_style->flags |= CL_FLAG_ANIMATION; break; case TOKEN_STYLE: token = clearlooks_gtk2_rc_parse_style (settings, scanner, &clearlooks_style->style); clearlooks_style->flags |= CL_FLAG_STYLE; break; case TOKEN_RADIUS: token = clearlooks_gtk2_rc_parse_double (settings, scanner, &clearlooks_style->radius); clearlooks_style->flags |= CL_FLAG_RADIUS; break; case TOKEN_HINT: token = ge_rc_parse_hint (scanner, &clearlooks_style->hint); clearlooks_style->flags |= CL_FLAG_HINT; break; case TOKEN_DISABLE_FOCUS: token = clearlooks_gtk2_rc_parse_boolean (settings, scanner, &clearlooks_style->disable_focus); clearlooks_style->flags |= CL_FLAG_DISABLE_FOCUS; break; /* stuff to ignore */ case TOKEN_SUNKENMENU: token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "sunkenmenu"); break; case TOKEN_PROGRESSBARSTYLE: token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "progressbarstyle"); break; case TOKEN_MENUITEMSTYLE: token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "menuitemstyle"); break; case TOKEN_LISTVIEWITEMSTYLE: token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "listviewitemstyle"); break; default: g_scanner_get_next_token(scanner); token = G_TOKEN_RIGHT_CURLY; break; } if (token != G_TOKEN_NONE) return token; token = g_scanner_peek_next_token(scanner); } g_scanner_get_next_token(scanner); g_scanner_set_scope(scanner, old_scope); return G_TOKEN_NONE; }