[gtk+] switch: Unclip the slider shadow



commit 83b8bcb63a1fcdafae1d6cd024a7f491e5654d6d
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Oct 3 16:20:50 2015 -0400

    switch: Unclip the slider shadow
    
    This commit arranges things so the shadow of the slider can
    extend outside the widget, even if the switch itself has no
    shadow.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=755791

 gtk/gtkswitch.c |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkswitch.c b/gtk/gtkswitch.c
index 3a2f8e9..103382d 100644
--- a/gtk/gtkswitch.c
+++ b/gtk/gtkswitch.c
@@ -52,6 +52,8 @@
 #include "a11y/gtkswitchaccessible.h"
 #include "gtkactionhelper.h"
 #include "gtkwidgetprivate.h"
+#include "gtkcssshadowsvalueprivate.h"
+#include "gtkstylecontextprivate.h"
 
 #include "fallback-c89.c"
 
@@ -447,6 +449,9 @@ gtk_switch_size_allocate (GtkWidget     *widget,
                           GtkAllocation *allocation)
 {
   GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
+  GtkStyleContext *context;
+  GtkBorder extents;
+  GtkAllocation clip;
 
   gtk_widget_set_allocation (widget, allocation);
 
@@ -457,7 +462,26 @@ gtk_switch_size_allocate (GtkWidget     *widget,
                             allocation->width,
                             allocation->height);
 
-  _gtk_widget_set_simple_clip (widget, NULL);
+  context = gtk_widget_get_style_context (widget);
+
+  gtk_style_context_save (context);
+
+  gtk_style_context_remove_class (context, GTK_STYLE_CLASS_TROUGH);
+  gtk_style_context_add_class (context, GTK_STYLE_CLASS_SLIDER);
+
+  _gtk_css_shadows_value_get_extents (_gtk_style_context_peek_property (context,
+                                                                        GTK_CSS_PROPERTY_BOX_SHADOW),
+                                      &extents);
+
+  gtk_style_context_restore (context);
+
+  clip = *allocation;
+  clip.x -= extents.left;
+  clip.y -= extents.top;
+  clip.width += extents.left + extents.right;
+  clip.height += extents.top + extents.bottom;
+
+  _gtk_widget_set_simple_clip (widget, &clip);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]