summaryrefslogtreecommitdiff
path: root/gtk/gtkcssshadowvalue.c
diff options
context:
space:
mode:
authorChris Cummins <christopher.e.cummins@intel.com>2013-04-05 10:54:03 +0100
committerRob Bradford <rob@linux.intel.com>2013-04-09 12:52:47 +0100
commitf478f16dbad1da98f812edf5a96e09e140ba36bb (patch)
treebfb4d411b40f8d34d63b4104fc3b20f5f4bc5ae7 /gtk/gtkcssshadowvalue.c
parentb37d83e98825af0eb3b5e644701b36a24dfd6212 (diff)
downloadgtk+-f478f16dbad1da98f812edf5a96e09e140ba36bb.tar.gz
cds: enable outset shadows
Adds conditional code paths to GdkCssShadowValue for painting outset shadows, and allows shadows to be applied in two passes (first outset then inset). This can be used to draw csd shadows in outer window borders. https://bugzilla.gnome.org/show_bug.cgi?id=695998 Signed-off-by: Rob Bradford <rob@linux.intel.com>
Diffstat (limited to 'gtk/gtkcssshadowvalue.c')
-rw-r--r--gtk/gtkcssshadowvalue.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c
index 618288807a..6e61cab426 100644
--- a/gtk/gtkcssshadowvalue.c
+++ b/gtk/gtkcssshadowvalue.c
@@ -445,6 +445,14 @@ _gtk_css_shadow_value_paint_spinner (const GtkCssValue *shadow,
cairo_restore (cr);
}
+gboolean
+_gtk_css_shadow_value_get_inset (const GtkCssValue *shadow)
+{
+ g_return_val_if_fail (shadow->class == &GTK_CSS_VALUE_SHADOW, FALSE);
+
+ return shadow->inset;
+}
+
void
_gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
cairo_t *cr,
@@ -457,15 +465,21 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
cairo_save (cr);
- _gtk_rounded_box_path (padding_box, cr);
- cairo_clip (cr);
+ if (shadow->inset)
+ {
+ _gtk_rounded_box_path (padding_box, cr);
+ cairo_clip (cr);
+ }
box = *padding_box;
_gtk_rounded_box_move (&box,
_gtk_css_number_value_get (shadow->hoffset, 0),
_gtk_css_number_value_get (shadow->voffset, 0));
spread = _gtk_css_number_value_get (shadow->spread, 0);
- _gtk_rounded_box_shrink (&box, spread, spread, spread, spread);
+ if (shadow->inset)
+ _gtk_rounded_box_shrink (&box, spread, spread, spread, spread);
+ else /* Outset */
+ _gtk_rounded_box_grow (&box, spread, spread, spread, spread);
clip_box = *padding_box;
radius = _gtk_css_number_value_get (shadow->radius, 0);
@@ -475,7 +489,8 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
_gtk_rounded_box_path (&box, cr);
- _gtk_rounded_box_clip_path (&clip_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);