static void thinice_style_draw_shadow(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); CairoColor *color1 = NULL; CairoColor *color2 = NULL; CHECK_ARGS switch (shadow_type) { case GTK_SHADOW_NONE: return; case GTK_SHADOW_IN: if (((x == 1) || (y == 1)) && (CHECK_DETAIL (detail, "entry") || CHECK_DETAIL (detail, "text"))) { color1 = color2 = &thinice_style->color_cube.base[state_type]; break; } case GTK_SHADOW_ETCHED_IN: color1 = &thinice_style->color_cube.light[state_type]; color2 = &thinice_style->color_cube.dark[state_type]; break; case GTK_SHADOW_OUT: case GTK_SHADOW_ETCHED_OUT: color1 = &thinice_style->color_cube.dark[state_type]; color2 = &thinice_style->color_cube.light[state_type]; break; } switch (shadow_type) { case GTK_SHADOW_NONE: break; case GTK_SHADOW_ETCHED_IN: case GTK_SHADOW_ETCHED_OUT: ge_cairo_set_color(cr, color1); ge_cairo_stroke_rectangle(cr, x + 1.5, y + 1.5, width - 3, height - 3); ge_cairo_set_color(cr, color2); ge_cairo_stroke_rectangle(cr, x + 0.5, y + 0.5, width - 3, height - 3); break; case GTK_SHADOW_IN: case GTK_SHADOW_OUT: ge_cairo_simple_border (cr, color2, color1, x, y, width, height, FALSE); break; } }
static void thinice_style_draw_check(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); CairoColor *color1 = NULL; CHECK_ARGS if (shadow_type == GTK_SHADOW_IN) { color1 = &thinice_style->color_cube.bg[GTK_STATE_ACTIVE]; } if (state_type == GTK_STATE_INSENSITIVE) { ge_cairo_set_color(cr, &thinice_style->color_cube.dark[state_type]); ge_cairo_stroke_rectangle(cr, x + 0.5, y + 0.5, width - 1, height - 1); } else { thinice_style_draw_box(style, cr, state_type, shadow_type, widget, detail, x, y, width, height); if (color1) { ge_cairo_set_color(cr, color1); cairo_rectangle(cr, x+1, y+1, width-2, height-2); cairo_fill(cr); } } }
static void clearlooks_glossy_scale_draw_gradient (cairo_t *cr, const CairoColor *c1, const CairoColor *c2, const CairoColor *c3, int x, int y, int width, int height, boolean horizontal) { cairo_pattern_t *pattern; pattern = cairo_pattern_create_linear (0, 0, horizontal ? 0 : width, horizontal ? height : 0); cairo_pattern_add_color_stop_rgb (pattern, 0.0, c1->r, c1->g, c1->b); cairo_pattern_add_color_stop_rgb (pattern, 1.0, c2->r, c2->g, c2->b); cairo_rectangle (cr, x+0.5, y+0.5, width-1, height-1); cairo_set_source (cr, pattern); cairo_fill (cr); cairo_pattern_destroy (pattern); clearlooks_set_mixed_color (cr, c3, c1, 0.3); ge_cairo_stroke_rectangle (cr, x, y, width, height); }
static void clearlooks_inverted_draw_scrollbar_slider (cairo_t *cr, const ClearlooksColors *colors, const WidgetParameters *widget, const ScrollBarParameters *scrollbar, int x, int y, int width, int height) { if (scrollbar->junction & CL_JUNCTION_BEGIN) { if (scrollbar->horizontal) { x -= 1; width += 1; } else { y -= 1; height += 1; } } if (scrollbar->junction & CL_JUNCTION_END) { if (scrollbar->horizontal) width += 1; else height += 1; } if (!scrollbar->horizontal) ge_cairo_exchange_axis (cr, &x, &y, &width, &height); cairo_translate (cr, x, y); if (scrollbar->has_color) { const CairoColor *border = &colors->shade[8]; CairoColor fill = scrollbar->color; CairoColor hilight; CairoColor shade1, shade2, shade3; cairo_pattern_t *pattern; if (widget->prelight) ge_shade_color (&fill, 1.1, &fill); cairo_set_line_width (cr, 1); ge_shade_color (&fill, 1.3, &hilight); ge_shade_color (&fill, 1.1, &shade1); ge_shade_color (&fill, 1.05, &shade2); ge_shade_color (&fill, 0.98, &shade3); pattern = cairo_pattern_create_linear (1, 1, 1, height-2); cairo_pattern_add_color_stop_rgb (pattern, 0, fill.r, fill.g, fill.b); cairo_pattern_add_color_stop_rgb (pattern, 0.5, shade3.r, shade3.g, shade3.b); cairo_pattern_add_color_stop_rgb (pattern, 0.5, shade2.r, shade2.g, shade2.b); cairo_pattern_add_color_stop_rgb (pattern, 1.0, shade1.r, shade1.g, shade1.b); cairo_rectangle (cr, 1, 1, width-2, height-2); cairo_set_source (cr, pattern); cairo_fill (cr); cairo_pattern_destroy (pattern); cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5); ge_cairo_stroke_rectangle (cr, 1.5, 1.5, width-3, height-3); ge_cairo_set_color (cr, border); ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1); } else { CairoColor border; CairoColor s1, s2, s3; cairo_pattern_t *pattern; int bar_x, i; const CairoColor *dark = &colors->shade[4]; const CairoColor *light = &colors->shade[0]; ge_shade_color(&colors->shade[6], 1.05, &border); pattern = cairo_pattern_create_linear(1, 1, 1, height-1); s1 = colors->bg[widget->state_type]; ge_shade_color(&s1, 0.95, &s2); ge_shade_color(&s1, 1.05, &s3); cairo_pattern_add_color_stop_rgb(pattern, 0, s2.r, s2.g, s2.b); cairo_pattern_add_color_stop_rgb(pattern, 1.0, s3.r, s3.g, s3.b); cairo_rectangle (cr, 1, 1, width-2, height-2); cairo_set_source(cr, pattern); cairo_fill(cr); cairo_pattern_destroy(pattern); widget->style_functions->draw_top_left_highlight (cr, &s2, widget, 1, 1, width-2, height-2, 0, widget->corners); clearlooks_set_border_gradient (cr, &border, 1.2, 0, height); ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1); /* draw handles */ cairo_set_line_width (cr, 1); bar_x = width/2 - 4; cairo_translate(cr, 0.5, 0.5); for (i=0; i<3; i++) { cairo_move_to (cr, bar_x, 4); cairo_line_to (cr, bar_x, height-5); ge_cairo_set_color (cr, dark); cairo_stroke (cr); cairo_move_to (cr, bar_x+1, 4); cairo_line_to (cr, bar_x+1, height-5); ge_cairo_set_color (cr, light); cairo_stroke (cr); bar_x += 3; } } }
static void clearlooks_inverted_draw_button (cairo_t *cr, const ClearlooksColors *colors, const WidgetParameters *params, int x, int y, int width, int height) { double xoffset = 0, yoffset = 0; double radius = params->radius; const CairoColor *fill = &colors->bg[params->state_type]; const CairoColor *border_disabled = &colors->shade[4]; CairoColor border_normal; CairoColor shadow; ge_shade_color(&colors->shade[6], 1.05, &border_normal); ge_shade_color (&border_normal, 0.925, &shadow); cairo_save (cr); cairo_translate (cr, x, y); cairo_set_line_width (cr, 1.0); if (params->xthickness == 3 || params->ythickness == 3) { if (params->xthickness == 3) xoffset = 1; if (params->ythickness == 3) yoffset = 1; } radius = MIN (radius, MIN ((width - 2.0 - xoffset * 2.0) / 2.0, (height - 2.0 - yoffset * 2) / 2.0)); if (params->xthickness == 3 || params->ythickness == 3) { params->style_functions->draw_inset (cr, ¶ms->parentbg, 0, 0, width, height, radius+1, params->corners); } ge_cairo_rounded_rectangle (cr, xoffset+1, yoffset+1, width-(xoffset*2)-2, height-(yoffset*2)-2, radius, params->corners); if (!params->active) { cairo_pattern_t *pattern; CairoColor top_shade, bottom_shade; ge_shade_color (fill, 0.95, &top_shade); ge_shade_color (fill, 1.05, &bottom_shade); pattern = cairo_pattern_create_linear (0, 0, 0, height); cairo_pattern_add_color_stop_rgb (pattern, 0.0, top_shade.r, top_shade.g, top_shade.b); cairo_pattern_add_color_stop_rgb (pattern, 1.0, bottom_shade.r, bottom_shade.g, bottom_shade.b); cairo_set_source (cr, pattern); cairo_fill (cr); cairo_pattern_destroy (pattern); } else { cairo_pattern_t *pattern; ge_cairo_set_color (cr, fill); cairo_fill_preserve (cr); pattern = cairo_pattern_create_linear (0, 0, 0, height); cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.0); cairo_pattern_add_color_stop_rgba (pattern, 0.4, shadow.r, shadow.g, shadow.b, 0.0); cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.2); cairo_set_source (cr, pattern); cairo_fill_preserve (cr); cairo_pattern_destroy (pattern); pattern = cairo_pattern_create_linear (0, yoffset+1, 0, 3+yoffset); cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, params->disabled ? 0.125 : 0.3); cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.0); cairo_set_source (cr, pattern); cairo_fill_preserve (cr); cairo_pattern_destroy (pattern); pattern = cairo_pattern_create_linear (xoffset+1, 0, 3+xoffset, 0); cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, params->disabled ? 0.125 : 0.3); cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.0); cairo_set_source (cr, pattern); cairo_fill (cr); cairo_pattern_destroy (pattern); } /* Drawing the border */ if (!params->active && params->is_default) { const CairoColor *l = &colors->shade[4]; const CairoColor *d = &colors->shade[4]; ge_cairo_set_color (cr, l); ge_cairo_stroke_rectangle (cr, 2.5, 2.5, width-5, height-5); ge_cairo_set_color (cr, d); ge_cairo_stroke_rectangle (cr, 3.5, 3.5, width-7, height-7); } if (params->disabled) ge_cairo_set_color (cr, border_disabled); else if (!params->active) clearlooks_set_border_gradient (cr, &border_normal, 1.32, 0, height); else ge_cairo_set_color (cr, &border_normal); ge_cairo_rounded_rectangle (cr, xoffset + 0.5, yoffset + 0.5, width-(xoffset*2)-1, height-(yoffset*2)-1, radius, params->corners); cairo_stroke (cr); /* Draw the "shadow" */ if (!params->active) { /* Draw right shadow */ cairo_move_to (cr, width-xoffset-1.5, yoffset + radius); cairo_line_to (cr, width-xoffset-1.5, height - yoffset - radius); cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.1); cairo_stroke (cr); /* Draw topleft shadow */ params->style_functions->draw_top_left_highlight (cr, fill, params, xoffset+1, yoffset+1, width-2*(xoffset+1), height-2*(yoffset+1), radius, params->corners); } cairo_restore (cr); }
static void clearlooks_glossy_draw_scrollbar_slider (cairo_t *cr, const ClearlooksColors *colors, const WidgetParameters *widget, const ScrollBarParameters *scrollbar, int x, int y, int width, int height) { const CairoColor *border = &colors->shade[7]; CairoColor fill = scrollbar->color; CairoColor hilight; CairoColor shade1, shade2, shade3; cairo_pattern_t *pattern; if (scrollbar->junction & CL_JUNCTION_BEGIN) { if (scrollbar->horizontal) { x -= 1; width += 1; } else { y -= 1; height += 1; } } if (scrollbar->junction & CL_JUNCTION_END) { if (scrollbar->horizontal) width += 1; else height += 1; } if (!scrollbar->horizontal) ge_cairo_exchange_axis (cr, &x, &y, &width, &height); cairo_translate (cr, x, y); if (widget->prelight) ge_shade_color (&fill, 1.1, &fill); cairo_set_line_width (cr, 1); ge_shade_color (&fill, 1.25, &hilight); ge_shade_color (&fill, 1.16, &shade1); ge_shade_color (&fill, 1.08, &shade2); ge_shade_color (&fill, 1.08, &shade3); pattern = cairo_pattern_create_linear (1, 1, 1, height-2); cairo_pattern_add_color_stop_rgb (pattern, 0, shade1.r, shade1.g, shade1.b); cairo_pattern_add_color_stop_rgb (pattern, 0.5, shade2.r, shade2.g, shade2.b); cairo_pattern_add_color_stop_rgb (pattern, 0.5, fill.r, fill.g, fill.b); cairo_pattern_add_color_stop_rgb (pattern, 1, shade3.r, shade3.g, shade3.b); cairo_rectangle (cr, 1, 1, width-2, height-2); cairo_set_source (cr, pattern); cairo_fill (cr); cairo_pattern_destroy (pattern); if (scrollbar->has_color) { cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5); ge_cairo_stroke_rectangle (cr, 1.5, 1.5, width-3, height-3); } clearlooks_set_mixed_color (cr, border, &fill, scrollbar->has_color? 0.4 : 0.2); ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1); }