[gtk+] cssshadow: add a method to get the size of a shadows value
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] cssshadow: add a method to get the size of a shadows value
- Date: Mon, 22 Apr 2013 22:12:07 +0000 (UTC)
commit a44d6816d3c20748deefa45a0c3b5ace146e4540
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Mon Apr 22 16:50:39 2013 -0400
cssshadow: add a method to get the size of a shadows value
The method returns the size of each side of a GtkCssShadowsValue.
gtk/gtkcssshadowsvalue.c | 34 ++++++++++++++++++++++++++++++++++
gtk/gtkcssshadowsvalueprivate.h | 3 +++
gtk/gtkcssshadowvalue.c | 20 ++++++++++++++++++++
gtk/gtkcssshadowvalueprivate.h | 6 ++++++
4 files changed, 63 insertions(+)
---
diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c
index a71f4fe..3249491 100644
--- a/gtk/gtkcssshadowsvalue.c
+++ b/gtk/gtkcssshadowsvalue.c
@@ -300,3 +300,37 @@ _gtk_css_shadows_value_paint_box (const GtkCssValue *shadows,
_gtk_css_shadow_value_paint_box (shadows->values[i], cr, padding_box);
}
}
+
+void
+_gtk_css_shadows_value_get_extents (const GtkCssValue *shadows,
+ GtkBorder *border)
+{
+ guint i;
+ GtkBorder b = { 0 };
+ const GtkCssValue *shadow;
+ gdouble hoffset, voffset, spread, radius;
+
+ g_return_if_fail (shadows->class == >K_CSS_VALUE_SHADOWS);
+
+ for (i = 0; i < shadows->len; i++)
+ {
+ shadow = shadows->values[i];
+
+ if (_gtk_css_shadow_value_get_inset (shadow))
+ continue;
+
+ _gtk_css_shadow_value_get_geometry (shadow,
+ &hoffset, &voffset,
+ &radius, &spread);
+
+ b.top = MAX (0, radius + spread - voffset);
+ b.right = MAX (0, radius + spread + hoffset);
+ b.bottom = MAX (0, radius + spread + voffset);
+ b.left = MAX (0, radius + spread - hoffset);
+
+ border->top = MAX (border->top, b.top);
+ border->right = MAX (border->right, b.right);
+ border->bottom = MAX (border->bottom, b.bottom);
+ border->left = MAX (border->left, b.left);
+ }
+}
diff --git a/gtk/gtkcssshadowsvalueprivate.h b/gtk/gtkcssshadowsvalueprivate.h
index 7ee619e..2b227bd 100644
--- a/gtk/gtkcssshadowsvalueprivate.h
+++ b/gtk/gtkcssshadowsvalueprivate.h
@@ -49,6 +49,9 @@ void _gtk_css_shadows_value_paint_box (const GtkCssValue
const GtkRoundedBox *padding_box,
gboolean inset);
+void _gtk_css_shadows_value_get_extents (const GtkCssValue *shadows,
+ GtkBorder *border);
+
G_END_DECLS
#endif /* __GTK_CSS_SHADOWS_VALUE_H__ */
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c
index 6e61cab..4e7ca65 100644
--- a/gtk/gtkcssshadowvalue.c
+++ b/gtk/gtkcssshadowvalue.c
@@ -454,6 +454,26 @@ _gtk_css_shadow_value_get_inset (const GtkCssValue *shadow)
}
void
+_gtk_css_shadow_value_get_geometry (const GtkCssValue *shadow,
+ gdouble *hoffset,
+ gdouble *voffset,
+ gdouble *radius,
+ gdouble *spread)
+{
+ g_return_if_fail (shadow->class == >K_CSS_VALUE_SHADOW);
+
+ if (hoffset != NULL)
+ *hoffset = _gtk_css_number_value_get (shadow->hoffset, 0);
+ if (voffset != NULL)
+ *voffset = _gtk_css_number_value_get (shadow->voffset, 0);
+
+ if (radius != NULL)
+ *radius = _gtk_css_number_value_get (shadow->radius, 0);
+ if (spread != NULL)
+ *spread = _gtk_css_number_value_get (shadow->spread, 0);
+}
+
+void
_gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
cairo_t *cr,
const GtkRoundedBox *padding_box)
diff --git a/gtk/gtkcssshadowvalueprivate.h b/gtk/gtkcssshadowvalueprivate.h
index 0688fc3..e46b303 100644
--- a/gtk/gtkcssshadowvalueprivate.h
+++ b/gtk/gtkcssshadowvalueprivate.h
@@ -36,6 +36,12 @@ GtkCssValue * _gtk_css_shadow_value_parse (GtkCssParser
gboolean _gtk_css_shadow_value_get_inset (const GtkCssValue *shadow);
+void _gtk_css_shadow_value_get_geometry (const GtkCssValue *shadow,
+ gdouble *hoffset,
+ gdouble *voffset,
+ gdouble *radius,
+ gdouble *spread);
+
void _gtk_css_shadow_value_paint_layout (const GtkCssValue *shadow,
cairo_t *cr,
PangoLayout *layout);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]