diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt index fe439c97f1..fd7c85ab41 100644 --- a/docs/reference/gtk/gtk3-sections.txt +++ b/docs/reference/gtk/gtk3-sections.txt @@ -6258,6 +6258,7 @@ gtk_border_free gtk_render_arrow gtk_render_background +gtk_render_background_get_clip gtk_render_check gtk_render_expander gtk_render_extension diff --git a/gtk/gtkrender.c b/gtk/gtkrender.c index 6be35a0c21..42cd58f7f2 100644 --- a/gtk/gtkrender.c +++ b/gtk/gtkrender.c @@ -282,6 +282,39 @@ gtk_render_background (GtkStyleContext *context, cairo_restore (cr); } +/** + * gtk_render_background_get_clip: + * @context: a #GtkStyleContext + * @x: X origin of the rectangle + * @y: Y origin of the rectangle + * @width: rectangle width + * @height: rectangle height + * @out_clip: (out): return location for the clip + * + * Returns the area that will be affected (i.e. drawn to) when + * calling gtk_render_background() for the given @context and + * rectangle. + * + * Since: 3.20 + */ +void +gtk_render_background_get_clip (GtkStyleContext *context, + gdouble x, + gdouble y, + gdouble width, + gdouble height, + GdkRectangle *out_clip) +{ + GtkBorder shadow; + + _gtk_css_shadows_value_get_extents (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BOX_SHADOW), &shadow); + + out_clip->x = floor (x) - shadow.left; + out_clip->y = floor (y) - shadow.top; + out_clip->width = ceil (width) + shadow.left + shadow.right; + out_clip->height = ceil (height) + shadow.top + shadow.bottom; +} + /** * gtk_render_frame: * @context: a #GtkStyleContext diff --git a/gtk/gtkrender.h b/gtk/gtkrender.h index ea4b84ae63..81566c5452 100644 --- a/gtk/gtkrender.h +++ b/gtk/gtkrender.h @@ -59,6 +59,15 @@ void gtk_render_background (GtkStyleContext *context, gdouble y, gdouble width, gdouble height); + +GDK_AVAILABLE_IN_3_20 +void gtk_render_background_get_clip (GtkStyleContext *context, + gdouble x, + gdouble y, + gdouble width, + gdouble height, + GdkRectangle *out_clip); + GDK_AVAILABLE_IN_ALL void gtk_render_frame (GtkStyleContext *context, cairo_t *cr,