static void clearlooks_set_widget_parameters (GtkWidget *widget, const GtkStyle *style, GtkStateType state_type, WidgetParameters *params) { params->style_functions = &(clearlooks_style_class->style_functions[CLEARLOOKS_STYLE (style)->style]); params->active = (state_type == GTK_STATE_ACTIVE); params->prelight = (state_type == GTK_STATE_PRELIGHT); params->disabled = (state_type == GTK_STATE_INSENSITIVE); params->state_type = (ClearlooksStateType)state_type; params->corners = CR_CORNER_ALL; params->ltr = ge_widget_is_ltr ((GtkWidget*)widget); params->focus = widget && GTK_WIDGET_HAS_FOCUS (widget); params->is_default = widget && GE_WIDGET_HAS_DEFAULT (widget); params->enable_glow = FALSE; params->radius = CLEARLOOKS_STYLE (style)->radius; if (!params->active && widget && GE_IS_TOGGLE_BUTTON (widget)) params->active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); params->xthickness = style->xthickness; params->ythickness = style->ythickness; /* This is used in GtkEntry to fake transparency. The reason to do this * is that the entry has it's entire background filled with base[STATE]. * This is not a very good solution as it will eg. fail if one changes * the background color of a notebook. */ params->parentbg = CLEARLOOKS_STYLE (style)->colors.bg[state_type]; clearlooks_get_parent_bg (widget, ¶ms->parentbg); }
static void thinice_style_draw_box(GtkStyle * style, cairo_t *cr, GtkStateType state_type, GtkShadowType shadow_type, GtkWidget * widget, const gchar *detail, gint x, gint y, gint width, gint height) { ThiniceStyle *thinice_style = THINICE_STYLE (style); gboolean draw_border = TRUE; /***********************************************/ /* GTK Sanity Checks */ /***********************************************/ CHECK_ARGS /***********************************************/ /* GTK Special Cases - Ignored Widgets */ /***********************************************/ if ((CHECK_DETAIL(detail, "optionmenutab")) || (CHECK_DETAIL (detail, "slider")) || (CHECK_DETAIL (detail, "buttondefault")) || (CHECK_DETAIL (detail, "bar") && ((height < 1) && (width < 1)))) { return; } /***********************************************/ /* GTK Special Cases - adjust Size/Offset */ /***********************************************/ if ((CHECK_DETAIL (detail, "bar"))) { x += 1; y += 1; width -= 2; height -= 2; draw_border=FALSE; } else if (CHECK_DETAIL (detail, "handlebox_bin")) { draw_border=FALSE; } else if (CHECK_DETAIL (detail, "entry-progress")) { draw_border=FALSE; } /***********************************************/ /* Fill Box */ /***********************************************/ gtk_style_apply_default_background(style, cr, gtk_widget_get_window (widget), state_type, x, y, width, height); /***********************************************/ /* Draw Box Border */ /***********************************************/ if (draw_border) { thinice_style_draw_shadow(style, cr, state_type, shadow_type, widget, detail, x, y, width, height); } /***********************************************/ /* Draw Widget Specific Sub-Parts */ /***********************************************/ if (CHECK_DETAIL (detail, "button")) { /* Paint a triangle here instead of in "buttondefault" which is drawn _behind_ the current button */ if (widget && GE_WIDGET_HAS_DEFAULT (widget)) { ge_cairo_set_color(cr, &thinice_style->color_cube.bg[GTK_STATE_SELECTED]); cairo_move_to(cr, x+2.5, y+2.5); cairo_line_to(cr, x+10.5, y+2.5); cairo_line_to(cr, x+2.5, y+10.5); cairo_line_to(cr, x+2.5, y+2.5); cairo_fill(cr); ge_cairo_set_color(cr, &thinice_style->color_cube.dark[state_type]); cairo_move_to(cr, x + 2.5, y + 11); cairo_line_to(cr, x + 2.5, y + 2.5); cairo_line_to(cr, x + 11, y + 2.5); cairo_stroke(cr); cairo_set_line_width (cr, 0.5); ge_cairo_set_color(cr, &thinice_style->color_cube.light[state_type]); cairo_move_to(cr, x+11, y+3); cairo_line_to(cr, x+3, y+11); cairo_stroke(cr); } } /* Draw Option Menus and Combo Box "Tab" The Same Way Here */ if (CHECK_DETAIL(detail, "optionmenu") || (CHECK_DETAIL(detail, "button") && (ge_is_combo_box(widget, FALSE)) && !(ge_is_combo_box_entry(widget)))) { GtkRequisition indicator_size; GtkBorder indicator_spacing; CairoColor *dark; CairoColor *light; gint vline_x; if (state_type != GTK_STATE_INSENSITIVE) state_type = GTK_STATE_NORMAL; ge_option_menu_get_props (widget, &indicator_size, &indicator_spacing); if ((!widget) || (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)) vline_x = x + indicator_size.width + indicator_spacing.left + indicator_spacing.right; else vline_x = x + width - (indicator_size.width + indicator_spacing.left + indicator_spacing.right) - style->xthickness; dark = &thinice_style->color_cube.dark[state_type]; light = &thinice_style->color_cube.light[state_type]; thinice_draw_separator(cr, dark, light, FALSE, vline_x, y + style->ythickness + 1, style->xthickness, height - 2*style->ythickness - 2); if ((widget) && (gtk_widget_get_direction (GTK_WIDGET (widget)) == GTK_TEXT_DIR_RTL)) x += indicator_spacing.right + style->xthickness; else x += width - indicator_size.width - indicator_spacing.right - style->xthickness; y += ((height - indicator_size.height) / 2) + 1; width = indicator_size.width; height = indicator_size.height; thinice_style_draw_arrow (style, cr, state_type, shadow_type, NULL, "optionmenu", GTK_ARROW_DOWN, TRUE, x, y, width, height); } }