[gtk+/wip/baedert/drawing: 3/5] widget: Add private _get_border_allocation
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/baedert/drawing: 3/5] widget: Add private _get_border_allocation
- Date: Fri, 5 May 2017 08:34:22 +0000 (UTC)
commit b5e8c6588501f67fcb6d3267221cbc5291a87100
Author: Timm Bäder <mail baedert org>
Date: Fri May 5 09:29:36 2017 +0200
widget: Add private _get_border_allocation
gtk/gtkwidget.c | 53 ++++++++++++++++++++++++++++++-----------------
gtk/gtkwidgetprivate.h | 2 +
2 files changed, 36 insertions(+), 19 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 2cd8f30..83fb8ce 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -3804,6 +3804,8 @@ gtk_widget_init (GTypeInstance *instance, gpointer g_class)
priv->allocation.y = -1;
priv->allocation.width = 1;
priv->allocation.height = 1;
+ priv->clip = priv->allocation;
+ priv->clip_set = TRUE;
priv->user_alpha = 255;
priv->alpha = 255;
priv->window = NULL;
@@ -5528,9 +5530,9 @@ gtk_widget_size_allocate_with_baseline (GtkWidget *widget,
baseline_changed = old_baseline != baseline;
size_changed = (old_allocation.width != real_allocation.width ||
- old_allocation.height != real_allocation.height);
+ old_allocation.height != real_allocation.height);
position_changed = (old_allocation.x != real_allocation.x ||
- old_allocation.y != real_allocation.y);
+ old_allocation.y != real_allocation.y);
if (!alloc_needed && !size_changed && !position_changed && !baseline_changed)
goto out;
@@ -5554,12 +5556,18 @@ gtk_widget_size_allocate_with_baseline (GtkWidget *widget,
margin.bottom + border.bottom + padding.bottom;
/* TODO: Baseline! */
+ priv->clip_set = FALSE;
priv->allocated_baseline = baseline;
if (g_signal_has_handler_pending (widget, widget_signals[SIZE_ALLOCATE], 0, FALSE))
g_signal_emit (widget, widget_signals[SIZE_ALLOCATE], 0, &real_allocation);
else
GTK_WIDGET_GET_CLASS (widget)->size_allocate (widget, &real_allocation);
+ if (!priv->clip_set)
+ {
+ g_warning ("%s %p did not set a clip in size_allocate", G_OBJECT_TYPE_NAME (widget), widget);
+ }
+
/* Size allocation is god... after consulting god, no further requests or allocations are needed */
#ifdef G_ENABLE_DEBUG
if (GTK_DEBUG_CHECK (GEOMETRY) && gtk_widget_get_resize_needed (widget))
@@ -13700,23 +13708,7 @@ gtk_widget_set_clip (GtkWidget *widget,
allocation.height += shadow.top + shadow.bottom;
gdk_rectangle_union (&allocation, clip, &priv->clip);
-
- while (priv->parent &&
- _gtk_widget_get_window (widget) == _gtk_widget_get_window (priv->parent))
- {
- GtkWidgetPrivate *parent_priv = priv->parent->priv;
- GdkRectangle union_rect;
-
- gdk_rectangle_union (&priv->clip,
- &parent_priv->clip,
- &union_rect);
-
- if (gdk_rectangle_equal (&parent_priv->clip, &union_rect))
- break;
-
- parent_priv->clip = union_rect;
- priv = parent_priv;
- }
+ priv->clip_set = TRUE;
}
/*
@@ -13878,6 +13870,28 @@ gtk_widget_get_content_allocation (GtkWidget *widget,
margin.bottom + border.bottom + padding.bottom;
}
+void
+gtk_widget_get_border_allocation (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+ GtkBorder margin, border;
+ GtkCssStyle *style;
+
+ style = gtk_css_node_get_style (priv->cssnode);
+ get_box_margin (style, &margin);
+ get_box_border (style, &border);
+
+ *allocation = priv->allocation;
+
+ allocation->x += margin.left + border.left;
+ allocation->y += margin.top + border.top;
+ allocation->width -= margin.left + border.left +
+ margin.right + border.right;
+ allocation->height -= margin.top + border.top +
+ margin.bottom + border.bottom;
+}
+
/**
* gtk_widget_set_allocation:
* @widget: a #GtkWidget
@@ -13909,6 +13923,7 @@ gtk_widget_set_allocation (GtkWidget *widget,
priv->allocation = *allocation;
priv->clip = *allocation;
+ priv->clip_set = TRUE;
}
/**
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 0000ef2..2dc5054 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -316,6 +316,8 @@ gboolean gtk_widget_focus_move (GtkWidget *wi
GPtrArray *focus_order);
void gtk_widget_get_content_allocation (GtkWidget *widget,
GtkAllocation *allocation);
+void gtk_widget_get_border_allocation (GtkWidget *widget,
+ GtkAllocation *allocation);
/* inline getters */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]