[gtk+] widget: Remove gtk_widget_get_content_allocation



commit 5f859a1f24c153adf48467f60c4066201dbd8c61
Author: Timm Bäder <mail baedert org>
Date:   Mon Aug 14 12:12:09 2017 +0200

    widget: Remove gtk_widget_get_content_allocation
    
    Replace it where we still need something similar, e.g. in
    gtk_widget_translate_coordinates

 gtk/gtkcombobox.c       |   12 ++------
 gtk/gtkentry.c          |    9 ++----
 gtk/gtkpaned.c          |    7 ++--
 gtk/gtkrange.c          |    2 +-
 gtk/gtkscale.c          |   23 ++++++++-------
 gtk/gtkscrolledwindow.c |   16 +++++-----
 gtk/gtktoolbar.c        |    2 +-
 gtk/gtkwidget.c         |   73 +++++++++++++++++++++++++++--------------------
 gtk/gtkwidgetprivate.h  |    2 -
 9 files changed, 74 insertions(+), 72 deletions(-)
---
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index 167124e..1ddbbe3 100644
--- a/gtk/gtkcombobox.c
+++ b/gtk/gtkcombobox.c
@@ -1392,8 +1392,6 @@ gtk_combo_box_menu_popup (GtkComboBox    *combo_box)
 {
   GtkComboBoxPrivate *priv = combo_box->priv;
   gint active_item;
-  GtkAllocation border_allocation;
-  GtkAllocation content_allocation;
   GtkWidget *active;
 
   update_menu_sensitivity (combo_box, priv->popup_widget);
@@ -1413,10 +1411,9 @@ gtk_combo_box_menu_popup (GtkComboBox    *combo_box)
 
   if (priv->wrap_width == 0)
     {
-      gint width, min_width, nat_width;
+      int width, height, min_width, nat_width;
 
-      gtk_widget_get_content_allocation (GTK_WIDGET (combo_box), &content_allocation);
-      width = content_allocation.width;
+      gtk_widget_get_content_size (GTK_WIDGET (combo_box), &width, &height);
       gtk_widget_set_size_request (priv->popup_widget, -1, -1);
       gtk_widget_measure (priv->popup_widget, GTK_ORIENTATION_HORIZONTAL, -1,
                           &min_width, &nat_width, NULL, NULL);
@@ -1437,14 +1434,11 @@ gtk_combo_box_menu_popup (GtkComboBox    *combo_box)
 
   if (priv->wrap_width > 0 || priv->cell_view == NULL)
     {
-      gtk_widget_get_border_allocation (GTK_WIDGET (combo_box), &border_allocation);
-      gtk_widget_get_content_allocation (GTK_WIDGET (combo_box), &content_allocation);
-
       g_object_set (priv->popup_widget,
                     "anchor-hints", (GDK_ANCHOR_FLIP_Y |
                                      GDK_ANCHOR_SLIDE |
                                      GDK_ANCHOR_RESIZE),
-                    "rect-anchor-dx", border_allocation.x - content_allocation.x,
+                    "rect-anchor-dx", 0,
                     NULL);
 
       gtk_menu_popup_at_widget (GTK_MENU (priv->popup_widget),
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index a0c2f5c..b05bfe2 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -2962,7 +2962,7 @@ gtk_entry_get_text_allocation (GtkEntry     *entry,
 {
   GtkEntryPrivate *priv = entry->priv;
 
-  gtk_widget_get_content_allocation (GTK_WIDGET (entry), allocation);
+  gtk_widget_get_own_allocation (GTK_WIDGET (entry), allocation);
   allocation->x = priv->text_x;
   allocation->width = priv->text_width;
 }
@@ -6170,7 +6170,6 @@ static void
 gtk_entry_move_adjustments (GtkEntry *entry)
 {
   GtkWidget *widget = GTK_WIDGET (entry);
-  GtkAllocation allocation;
   GtkAdjustment *adjustment;
   PangoContext *context;
   PangoFontMetrics *metrics;
@@ -6181,12 +6180,10 @@ gtk_entry_move_adjustments (GtkEntry *entry)
   if (!adjustment)
     return;
 
-  gtk_widget_get_content_allocation (GTK_WIDGET (entry), &allocation);
-
-  /* Cursor/char position, layout offset, border width, and widget allocation */
+  /* Cursor/char position, layout offset and border width*/
   gtk_entry_get_cursor_locations (entry, &x, NULL);
   get_layout_position (entry, &layout_x, NULL);
-  x += allocation.x + layout_x;
+  x += layout_x;
 
   /* Approximate width of a char, so user can see what is ahead/behind */
   context = gtk_widget_get_pango_context (widget);
diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c
index b22aca4..6bbc58b 100644
--- a/gtk/gtkpaned.c
+++ b/gtk/gtkpaned.c
@@ -1570,12 +1570,13 @@ update_drag (GtkPaned *paned,
              int       ypos)
 {
   GtkPanedPrivate *priv = paned->priv;
-  GtkAllocation allocation;
+  int width, height;
   gint pos;
   gint handle_size;
   gint size;
 
-  gtk_widget_get_content_allocation (GTK_WIDGET (paned), &allocation);
+  gtk_widget_get_content_size (GTK_WIDGET (paned), &width, &height);
+
   if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
     pos = xpos;
   else
@@ -1591,7 +1592,7 @@ update_drag (GtkPaned *paned,
                           NULL, &handle_size,
                           NULL, NULL);
 
-      size = allocation.width - pos - handle_size;
+      size = width - pos - handle_size;
     }
   else
     {
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 85a0312..2f21352 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -1832,7 +1832,7 @@ coord_to_value (GtkRange *range,
   GtkAllocation slider_alloc, trough_alloc;
 
   gtk_widget_get_outer_allocation (priv->slider_widget, &slider_alloc);
-  gtk_widget_get_content_allocation (priv->trough_widget, &trough_alloc);
+  gtk_widget_get_outer_allocation (priv->trough_widget, &trough_alloc);
 
   if (priv->orientation == GTK_ORIENTATION_VERTICAL)
     {
diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c
index 97cd127..dc72a09 100644
--- a/gtk/gtkscale.c
+++ b/gtk/gtkscale.c
@@ -327,9 +327,10 @@ gtk_scale_allocate_value (GtkScale      *scale,
   GtkWidget *widget = GTK_WIDGET (scale);
   GtkRange *range = GTK_RANGE (widget);
   GtkWidget *slider_widget;
-  GtkAllocation range_alloc, slider_alloc, value_alloc;
+  GtkAllocation slider_alloc, value_alloc;
+  int range_width, range_height;
 
-  gtk_widget_get_content_allocation (widget, &range_alloc);
+  gtk_widget_get_content_size (widget, &range_width, &range_height);
 
   slider_widget = gtk_range_get_slider_widget (range);
   gtk_widget_get_border_allocation (slider_widget, &slider_alloc);
@@ -349,12 +350,12 @@ gtk_scale_allocate_value (GtkScale      *scale,
         {
         case GTK_POS_LEFT:
           value_alloc.x = 0;
-          value_alloc.y = (range_alloc.height - value_alloc.height) / 2;
+          value_alloc.y = (range_height - value_alloc.height) / 2;
           break;
 
         case GTK_POS_RIGHT:
-          value_alloc.x = range_alloc.width - value_alloc.width;
-          value_alloc.y = (range_alloc.height - value_alloc.height) / 2;
+          value_alloc.x = range_width - value_alloc.width;
+          value_alloc.y = (range_height - value_alloc.height) / 2;
           break;
 
         case GTK_POS_TOP:
@@ -364,7 +365,7 @@ gtk_scale_allocate_value (GtkScale      *scale,
 
         case GTK_POS_BOTTOM:
           value_alloc.x = slider_alloc.x + (slider_alloc.width - value_alloc.width) / 2;
-          value_alloc.y = range_alloc.height - value_alloc.height;
+          value_alloc.y = range_height - value_alloc.height;
           break;
 
         default:
@@ -382,18 +383,18 @@ gtk_scale_allocate_value (GtkScale      *scale,
           break;
 
         case GTK_POS_RIGHT:
-          value_alloc.x = range_alloc.width - value_alloc.width;
+          value_alloc.x = range_width - value_alloc.width;
           value_alloc.y = (slider_alloc.y + (slider_alloc.height / 2)) - value_alloc.height / 2;
           break;
 
         case GTK_POS_TOP:
-          value_alloc.x = (range_alloc.width - value_alloc.width) / 2;
+          value_alloc.x = (range_width - value_alloc.width) / 2;
           value_alloc.y = 0;
           break;
 
         case GTK_POS_BOTTOM:
-          value_alloc.x = (range_alloc.width - value_alloc.width) / 2;
-          value_alloc.y = range_alloc.height - value_alloc.height;
+          value_alloc.x = (range_width - value_alloc.width) / 2;
+          value_alloc.y = range_height - value_alloc.height;
           break;
 
         default:
@@ -1537,7 +1538,7 @@ gtk_scale_real_get_layout_offsets (GtkScale *scale,
       return;
     }
 
-  gtk_widget_get_content_allocation (priv->value_widget, &value_alloc);
+  gtk_widget_get_outer_allocation (priv->value_widget, &value_alloc);
 
   *x = value_alloc.x;
   *y = value_alloc.y;
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index f49c832..2ab0e59 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -2881,7 +2881,7 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
   GtkScrolledWindowPrivate *priv;
   gint sb_width;
   gint sb_height;
-  GtkAllocation content_allocation;
+  int width, height;
 
   g_return_if_fail (widget != NULL);
   g_return_if_fail (allocation != NULL);
@@ -2895,12 +2895,12 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
   gtk_widget_measure (priv->hscrollbar, GTK_ORIENTATION_VERTICAL, -1,
                       &sb_height, NULL, NULL, NULL);
 
-  gtk_widget_get_content_allocation (widget, &content_allocation);
+  gtk_widget_get_content_size (widget, &width, &height);
 
-  allocation->x = content_allocation.x;
-  allocation->y = content_allocation.y;
-  allocation->width = content_allocation.width;
-  allocation->height = content_allocation.height;
+  allocation->x = 0;
+  allocation->y = 0;
+  allocation->width = width;
+  allocation->height = height;
 
   /* Subtract some things from our available allocation size */
   if (priv->vscrollbar_visible && !priv->use_indicators)
@@ -2917,7 +2917,7 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
            priv->window_placement == GTK_CORNER_BOTTOM_LEFT)))
         allocation->x += sb_width;
 
-      allocation->width = MAX (1, content_allocation.width - sb_width);
+      allocation->width = MAX (1, width - sb_width);
     }
 
   if (priv->hscrollbar_visible && !priv->use_indicators)
@@ -2927,7 +2927,7 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
          priv->window_placement == GTK_CORNER_BOTTOM_RIGHT)
        allocation->y += (sb_height);
 
-      allocation->height = MAX (1, content_allocation.height - sb_height);
+      allocation->height = MAX (1, height - sb_height);
     }
 }
 
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
index 1244cfb..4973be4 100644
--- a/gtk/gtktoolbar.c
+++ b/gtk/gtktoolbar.c
@@ -1067,7 +1067,7 @@ gtk_toolbar_begin_sliding (GtkToolbar *toolbar)
       g_source_set_name_by_id (priv->idle_id, "[gtk+] slide_idle_handler");
     }
 
-  gtk_widget_get_content_allocation (widget, &content_allocation);
+  gtk_widget_get_own_allocation (widget, &content_allocation);
 
   rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
   vertical = (priv->orientation == GTK_ORIENTATION_VERTICAL);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 2ed54ab..f53ce85 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -954,11 +954,11 @@ gtk_widget_real_pick (GtkWidget *widget,
         {
           if (x_out && y_out)
             {
-              GtkAllocation content_alloc;
-              gtk_widget_get_content_allocation (child, &content_alloc);
+              GtkAllocation own_alloc;
+              gtk_widget_get_own_allocation (child, &own_alloc);
 
-              *x_out = x - content_alloc.x;
-              *y_out = y - content_alloc.y;
+              *x_out = own_alloc.x + (x - allocation.x);
+              *y_out = own_alloc.y + (y - allocation.y);
             }
 
           return child;
@@ -5645,6 +5645,30 @@ gtk_widget_common_ancestor (GtkWidget *widget_a,
   return widget_a;
 }
 
+static void
+gtk_widget_get_origin_relative_to_parent (GtkWidget *widget,
+                                          int       *origin_x,
+                                          int       *origin_y)
+{
+  GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+  GtkBorder margin, border, padding;
+  GtkCssStyle *style;
+
+  style = gtk_css_node_get_style (priv->cssnode);
+  get_box_margin (style, &margin);
+  get_box_border (style, &border);
+  get_box_padding (style, &padding);
+
+  /* allocation is relative to the parent's origin */
+  *origin_x = priv->allocation.x;
+  *origin_y = priv->allocation.y;
+
+  /* ... but points to the upper left, excluding widget margins
+   * but including all the css properties */
+  *origin_x += margin.left + border.left + padding.left;
+  *origin_y += margin.top + border.top + padding.top;
+}
+
 /**
  * gtk_widget_translate_coordinates:
  * @src_widget:  a #GtkWidget
@@ -5685,12 +5709,12 @@ gtk_widget_translate_coordinates (GtkWidget  *src_widget,
   parent = src_widget;
   while (parent != ancestor)
     {
-      GtkAllocation content_alloc;
+      int origin_x, origin_y;
 
-      gtk_widget_get_content_allocation (parent, &content_alloc);
+      gtk_widget_get_origin_relative_to_parent (parent, &origin_x, &origin_y);
 
-      src_x += content_alloc.x;
-      src_y += content_alloc.y;
+      src_x += origin_x;
+      src_y += origin_y;
 
       parent = _gtk_widget_get_parent (parent);
     }
@@ -5698,12 +5722,12 @@ gtk_widget_translate_coordinates (GtkWidget  *src_widget,
   parent = dest_widget;
   while (parent != ancestor)
     {
-      GtkAllocation content_alloc;
+      int origin_x, origin_y;
 
-      gtk_widget_get_content_allocation (parent, &content_alloc);
+      gtk_widget_get_origin_relative_to_parent (parent, &origin_x, &origin_y);
 
-      src_x -= content_alloc.x;
-      src_y -= content_alloc.y;
+      src_x -= origin_x;
+      src_y -= origin_y;
 
       parent = _gtk_widget_get_parent (parent);
     }
@@ -13230,18 +13254,6 @@ gtk_widget_get_content_size (GtkWidget *widget,
                              int       *width,
                              int       *height)
 {
-  GtkAllocation alloc;
-
-  gtk_widget_get_content_allocation (widget, &alloc);
-
-  *width = alloc.width;
-  *height = alloc.height;
-}
-
-void
-gtk_widget_get_content_allocation (GtkWidget     *widget,
-                                   GtkAllocation *allocation)
-{
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
   GtkBorder margin, border, padding;
   GtkCssStyle *style;
@@ -13251,14 +13263,13 @@ gtk_widget_get_content_allocation (GtkWidget     *widget,
   get_box_border (style, &border);
   get_box_padding (style, &padding);
 
-  *allocation = priv->allocation;
+  *width = priv->allocation.width;
+  *height = priv->allocation.height;
 
-  allocation->x += margin.left + border.left + padding.left;
-  allocation->y += margin.top + border.top + padding.top;
-  allocation->width -= margin.left + border.left + padding.left +
-                       margin.right + border.right + padding.right;
-  allocation->height -= margin.top + border.top + padding.top +
-                        margin.bottom + border.bottom + padding.bottom;
+  *width -= margin.left + border.left + padding.left +
+            margin.right + border.right + padding.right;
+  *height -= margin.top + border.top + padding.top +
+             margin.bottom + border.bottom + padding.bottom;
 }
 
 void
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index d119aef..93dcbca 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -314,8 +314,6 @@ void              gtk_widget_focus_sort                    (GtkWidget        *wi
 gboolean          gtk_widget_focus_move                    (GtkWidget        *widget,
                                                             GtkDirectionType  direction,
                                                             GPtrArray        *focus_order);
-void              gtk_widget_get_content_allocation        (GtkWidget        *widget,
-                                                            GtkAllocation    *allocation);
 void              gtk_widget_get_border_allocation         (GtkWidget        *widget,
                                                             GtkAllocation    *allocation);
 void              gtk_widget_get_outer_allocation          (GtkWidget        *widget,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]