From b14dc6b5a4a1fa0f8aafe720eddb7c5f28feaec0 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 15 Dec 2015 21:55:22 -0500 Subject: [PATCH] gadget: Add api to get the border allocation This can be useful for giving input windows the right size. --- gtk/gtkcssgadget.c | 28 ++++++++++++++++++++++++++++ gtk/gtkcssgadgetprivate.h | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/gtk/gtkcssgadget.c b/gtk/gtkcssgadget.c index f1a0e975d0..0be480f8fd 100644 --- a/gtk/gtkcssgadget.c +++ b/gtk/gtkcssgadget.c @@ -670,3 +670,31 @@ gtk_css_node_style_changed_for_widget (GtkCssNode *node, _gtk_bitmask_free (changes); } +void +gtk_css_gadget_get_border_allocation (GtkCssGadget *gadget, + GtkAllocation *allocation, + int *baseline) +{ + GtkCssGadgetPrivate *priv = gtk_css_gadget_get_instance_private (gadget); + GtkBorder margin; + + g_return_if_fail (GTK_IS_CSS_GADGET (gadget)); + + get_box_margin (gtk_css_gadget_get_style (gadget), &margin); + + if (allocation) + { + allocation->x = priv->allocated_size.x + margin.left; + allocation->y = priv->allocated_size.y + margin.top; + allocation->width = priv->allocated_size.width - margin.left - margin.right; + allocation->height = priv->allocated_size.height - margin.top - margin.bottom; + } + if (baseline) + { + if (priv->allocated_baseline >= 0) + *baseline = priv->allocated_baseline - margin.top; + else + *baseline = -1; + } +} + diff --git a/gtk/gtkcssgadgetprivate.h b/gtk/gtkcssgadgetprivate.h index 4000724ddb..9d4b6e40ca 100644 --- a/gtk/gtkcssgadgetprivate.h +++ b/gtk/gtkcssgadgetprivate.h @@ -97,6 +97,10 @@ void gtk_css_gadget_allocate (GtkCssGadget void gtk_css_gadget_draw (GtkCssGadget *gadget, cairo_t *cr); +void gtk_css_gadget_get_border_allocation (GtkCssGadget *gadget, + GtkAllocation *allocation, + int *baseline); + G_END_DECLS #endif /* __GTK_CSS_GADGET_PRIVATE_H__ */