[gtk+] css: Round shadow extents properly
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] css: Round shadow extents properly
- Date: Wed, 20 Aug 2014 22:56:28 +0000 (UTC)
commit 2737c67ccefeade89af596700fdfc41d7fcf3588
Author: Benjamin Otte <otte redhat com>
Date: Wed Aug 20 23:19:59 2014 +0200
css: Round shadow extents properly
Otherwise drawing will be clipped.
Testcase included
gtk/gtkcssshadowsvalue.c | 10 ++++++----
testsuite/reftests/Makefile.am | 3 +++
testsuite/reftests/shadow-clip-rounding.css | 9 +++++++++
testsuite/reftests/shadow-clip-rounding.ref.ui | 23 +++++++++++++++++++++++
testsuite/reftests/shadow-clip-rounding.ui | 23 +++++++++++++++++++++++
5 files changed, 64 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c
index 6aafa92..f99401a 100644
--- a/gtk/gtkcssshadowsvalue.c
+++ b/gtk/gtkcssshadowsvalue.c
@@ -21,6 +21,8 @@
#include "gtkcssshadowsvalueprivate.h"
+#include <math.h>
+
#include "gtkcairoblurprivate.h"
#include "gtkcssshadowvalueprivate.h"
@@ -337,10 +339,10 @@ _gtk_css_shadows_value_get_extents (const GtkCssValue *shadows,
&radius, &spread);
clip_radius = _gtk_cairo_blur_compute_pixels (radius);
- b.top = MAX (0, clip_radius + spread - voffset);
- b.right = MAX (0, clip_radius + spread + hoffset);
- b.bottom = MAX (0, clip_radius + spread + voffset);
- b.left = MAX (0, clip_radius + spread - hoffset);
+ b.top = MAX (0, ceil (clip_radius + spread - voffset));
+ b.right = MAX (0, ceil (clip_radius + spread + hoffset));
+ b.bottom = MAX (0, ceil (clip_radius + spread + voffset));
+ b.left = MAX (0, ceil (clip_radius + spread - hoffset));
border->top = MAX (border->top, b.top);
border->right = MAX (border->right, b.right);
diff --git a/testsuite/reftests/Makefile.am b/testsuite/reftests/Makefile.am
index 103b523..f88876e 100644
--- a/testsuite/reftests/Makefile.am
+++ b/testsuite/reftests/Makefile.am
@@ -337,6 +337,9 @@ testdata = \
separator-size.ui \
set-default-direction.ui \
set-default-direction.ref.ui \
+ shadow-clip-rounding.css \
+ shadow-clip-rounding.ref.ui \
+ shadow-clip-rounding.ui \
shorthand-entry-border.css \
shorthand-entry-border.ref.ui \
shorthand-entry-border.ui \
diff --git a/testsuite/reftests/shadow-clip-rounding.css b/testsuite/reftests/shadow-clip-rounding.css
new file mode 100644
index 0000000..2a4912a
--- /dev/null
+++ b/testsuite/reftests/shadow-clip-rounding.css
@@ -0,0 +1,9 @@
+ import "reset-to-defaults.css";
+
+.test {
+ box-shadow: 0 0.99999px red;
+}
+
+.reference {
+ box-shadow: 0 1px red;
+}
diff --git a/testsuite/reftests/shadow-clip-rounding.ref.ui b/testsuite/reftests/shadow-clip-rounding.ref.ui
new file mode 100644
index 0000000..31f744d
--- /dev/null
+++ b/testsuite/reftests/shadow-clip-rounding.ref.ui
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.1 -->
+<interface>
+ <requires lib="gtk+" version="3.12"/>
+ <object class="GtkWindow" id="window1">
+ <property name="width_request">100</property>
+ <property name="height_request">100</property>
+ <property name="can_focus">False</property>
+ <property name="type">popup</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="label" translatable="yes">X</property>
+ <style>
+ <class name="reference"/>
+ </style>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/testsuite/reftests/shadow-clip-rounding.ui b/testsuite/reftests/shadow-clip-rounding.ui
new file mode 100644
index 0000000..0374162
--- /dev/null
+++ b/testsuite/reftests/shadow-clip-rounding.ui
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.1 -->
+<interface>
+ <requires lib="gtk+" version="3.12"/>
+ <object class="GtkWindow" id="window1">
+ <property name="width_request">100</property>
+ <property name="height_request">100</property>
+ <property name="can_focus">False</property>
+ <property name="type">popup</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="label" translatable="yes">X</property>
+ <style>
+ <class name="test"/>
+ </style>
+ </object>
+ </child>
+ </object>
+</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]