summaryrefslogtreecommitdiff
path: root/gtk/gtkcssshadowvalue.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2013-05-06 09:48:10 +0200
committerAlexander Larsson <alexl@redhat.com>2013-05-06 16:20:03 +0200
commit70774bf9789df10ec298e4b5b44b98a2c83c9037 (patch)
treeebf653c87af6379ba804797bbab876b14ae24e6a /gtk/gtkcssshadowvalue.c
parentc91e706e2bbba1f45895996638c7065def087d21 (diff)
downloadgtk+-70774bf9789df10ec298e4b5b44b98a2c83c9037.tar.gz
GtkCssShadowValue: Break out the shadow rendering code
This makes it easier to call it multiple times which we want to do later.
Diffstat (limited to 'gtk/gtkcssshadowvalue.c')
-rw-r--r--gtk/gtkcssshadowvalue.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c
index 53ab8c1ab5..cf533a1ce6 100644
--- a/gtk/gtkcssshadowvalue.c
+++ b/gtk/gtkcssshadowvalue.c
@@ -475,6 +475,27 @@ _gtk_css_shadow_value_get_geometry (const GtkCssValue *shadow,
*spread = _gtk_css_number_value_get (shadow->spread, 0);
}
+static void
+draw_shadow (const GtkCssValue *shadow,
+ cairo_t *cr,
+ GtkRoundedBox *box,
+ GtkRoundedBox *clip_box)
+{
+ cairo_t *shadow_cr;
+
+ shadow_cr = gtk_css_shadow_value_start_drawing (shadow, cr);
+
+ cairo_set_fill_rule (shadow_cr, CAIRO_FILL_RULE_EVEN_ODD);
+ _gtk_rounded_box_path (box, shadow_cr);
+ if (shadow->inset)
+ _gtk_rounded_box_clip_path (clip_box, shadow_cr);
+
+ gdk_cairo_set_source_rgba (shadow_cr, _gtk_css_rgba_value_get_rgba (shadow->color));
+ cairo_fill (shadow_cr);
+
+ gtk_css_shadow_value_finish_drawing (shadow, shadow_cr);
+}
+
void
_gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
cairo_t *cr,
@@ -520,17 +541,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
clip_box = *padding_box;
_gtk_rounded_box_shrink (&clip_box, -radius, -radius, -radius, -radius);
- cr = gtk_css_shadow_value_start_drawing (shadow, cr);
-
- cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- _gtk_rounded_box_path (&box, cr);
- if (shadow->inset)
- _gtk_rounded_box_clip_path (&clip_box, cr);
-
- gdk_cairo_set_source_rgba (cr, _gtk_css_rgba_value_get_rgba (shadow->color));
- cairo_fill (cr);
-
- cr = gtk_css_shadow_value_finish_drawing (shadow, cr);
+ draw_shadow (shadow, cr, &box, &clip_box);
cairo_restore (cr);
}