summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2016-10-22 16:06:14 +0200
committerTimm Bäder <mail@baedert.org>2016-10-22 19:05:47 +0200
commit9992a616efa47205ac16ed8be255eda5e7aadf6c (patch)
tree3879538642de33a77472bafe3e6e8afea3b3e343
parent6525b95e2502080c08b65317c910204c2b6125da (diff)
downloadgtk+-9992a616efa47205ac16ed8be255eda5e7aadf6c.tar.gz
widget: Use ::measure vfunc to measure size
Add a new ::measure vfunc similar to GtkCssGadget's that widget implementations have to override instead of the old get_preferred_width, get_preferred_height, get_preferred_width_for_height, get_preferred_height_for_width and get_preferred_height_and_baseline_for_width.
-rw-r--r--demos/gtk-demo/offscreen_window.c43
-rw-r--r--demos/gtk-demo/offscreen_window2.c43
-rw-r--r--gtk/gtkaccellabel.c46
-rw-r--r--gtk/gtkactionbar.c44
-rw-r--r--gtk/gtkapplicationwindow.c136
-rw-r--r--gtk/gtkbbox.c136
-rw-r--r--gtk/gtkbin.c122
-rw-r--r--gtk/gtkbox.c101
-rw-r--r--gtk/gtkboxgadget.c10
-rw-r--r--gtk/gtkbutton.c111
-rw-r--r--gtk/gtkcalendar.c43
-rw-r--r--gtk/gtkcellview.c80
-rw-r--r--gtk/gtkcheckbutton.c155
-rw-r--r--gtk/gtkcolorswatch.c31
-rw-r--r--gtk/gtkcombobox.c88
-rw-r--r--gtk/gtkentry.c65
-rw-r--r--gtk/gtkeventbox.c71
-rw-r--r--gtk/gtkexpander.c82
-rw-r--r--gtk/gtkfixed.c70
-rw-r--r--gtk/gtkflowbox.c118
-rw-r--r--gtk/gtkframe.c83
-rw-r--r--gtk/gtkgrid.c73
-rw-r--r--gtk/gtkheaderbar.c65
-rw-r--r--gtk/gtkicon.c46
-rw-r--r--gtk/gtkiconview.c152
-rw-r--r--gtk/gtkimage.c65
-rw-r--r--gtk/gtklabel.c102
-rw-r--r--gtk/gtklayout.c33
-rw-r--r--gtk/gtklevelbar.c31
-rw-r--r--gtk/gtklistbox.c141
-rw-r--r--gtk/gtkmagnifier.c55
-rw-r--r--gtk/gtkmenu.c320
-rw-r--r--gtk/gtkmenubar.c86
-rw-r--r--gtk/gtkmenuitem.c45
-rw-r--r--gtk/gtkmodelbutton.c111
-rw-r--r--gtk/gtknotebook.c102
-rw-r--r--gtk/gtkoffscreenwindow.c65
-rw-r--r--gtk/gtkpaned.c114
-rw-r--r--gtk/gtkpathbar.c145
-rw-r--r--gtk/gtkpopover.c179
-rw-r--r--gtk/gtkprogressbar.c43
-rw-r--r--gtk/gtkrange.c48
-rw-r--r--gtk/gtkrevealer.c102
-rw-r--r--gtk/gtkscale.c82
-rw-r--r--gtk/gtkscrolledwindow.c75
-rw-r--r--gtk/gtkseparator.c32
-rw-r--r--gtk/gtkseparatortoolitem.c45
-rw-r--r--gtk/gtksizerequest.c96
-rw-r--r--gtk/gtkspinbutton.c60
-rw-r--r--gtk/gtkspinner.c31
-rw-r--r--gtk/gtkstack.c93
-rw-r--r--gtk/gtkswitch.c31
-rw-r--r--gtk/gtktextview.c44
-rw-r--r--gtk/gtktoolbar.c47
-rw-r--r--gtk/gtktoolitem.c38
-rw-r--r--gtk/gtktoolitemgroup.c31
-rw-r--r--gtk/gtktoolpalette.c30
-rw-r--r--gtk/gtktreemenu.c102
-rw-r--r--gtk/gtktreeview.c90
-rw-r--r--gtk/gtkviewport.c97
-rw-r--r--gtk/gtkwidget.c73
-rw-r--r--gtk/gtkwidget.h52
-rw-r--r--gtk/gtkwidgetprivate.h8
-rw-r--r--gtk/gtkwindow.c337
-rw-r--r--tests/gtkoffscreenbox.c42
65 files changed, 1533 insertions, 3804 deletions
diff --git a/demos/gtk-demo/offscreen_window.c b/demos/gtk-demo/offscreen_window.c
index 9480025869..1affe04d1b 100644
--- a/demos/gtk-demo/offscreen_window.c
+++ b/demos/gtk-demo/offscreen_window.c
@@ -39,12 +39,13 @@ void gtk_rotated_bin_set_angle (GtkRotatedBin *bin,
static void gtk_rotated_bin_realize (GtkWidget *widget);
static void gtk_rotated_bin_unrealize (GtkWidget *widget);
-static void gtk_rotated_bin_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_rotated_bin_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_rotated_bin_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_rotated_bin_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_rotated_bin_damage (GtkWidget *widget,
@@ -152,8 +153,7 @@ gtk_rotated_bin_class_init (GtkRotatedBinClass *klass)
widget_class->realize = gtk_rotated_bin_realize;
widget_class->unrealize = gtk_rotated_bin_unrealize;
- widget_class->get_preferred_width = gtk_rotated_bin_get_preferred_width;
- widget_class->get_preferred_height = gtk_rotated_bin_get_preferred_height;
+ widget_class->measure = gtk_rotated_bin_measure;
widget_class->size_allocate = gtk_rotated_bin_size_allocate;
widget_class->draw = gtk_rotated_bin_draw;
@@ -396,27 +396,22 @@ gtk_rotated_bin_size_request (GtkWidget *widget,
}
static void
-gtk_rotated_bin_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_rotated_bin_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkRequisition requisition;
gtk_rotated_bin_size_request (widget, &requisition);
- *minimum = *natural = requisition.width;
-}
-
-static void
-gtk_rotated_bin_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkRequisition requisition;
-
- gtk_rotated_bin_size_request (widget, &requisition);
-
- *minimum = *natural = requisition.height;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *minimum = *natural = requisition.width;
+ else
+ *minimum = *natural = requisition.height;
}
static void
diff --git a/demos/gtk-demo/offscreen_window2.c b/demos/gtk-demo/offscreen_window2.c
index 06c4a0aa15..22bbe5237e 100644
--- a/demos/gtk-demo/offscreen_window2.c
+++ b/demos/gtk-demo/offscreen_window2.c
@@ -36,12 +36,13 @@ GtkWidget* gtk_mirror_bin_new (void);
static void gtk_mirror_bin_realize (GtkWidget *widget);
static void gtk_mirror_bin_unrealize (GtkWidget *widget);
-static void gtk_mirror_bin_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_mirror_bin_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_mirror_bin_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_mirror_bin_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_mirror_bin_damage (GtkWidget *widget,
@@ -91,8 +92,7 @@ gtk_mirror_bin_class_init (GtkMirrorBinClass *klass)
widget_class->realize = gtk_mirror_bin_realize;
widget_class->unrealize = gtk_mirror_bin_unrealize;
- widget_class->get_preferred_width = gtk_mirror_bin_get_preferred_width;
- widget_class->get_preferred_height = gtk_mirror_bin_get_preferred_height;
+ widget_class->measure = gtk_mirror_bin_measure;
widget_class->size_allocate = gtk_mirror_bin_size_allocate;
widget_class->draw = gtk_mirror_bin_draw;
@@ -320,27 +320,22 @@ gtk_mirror_bin_size_request (GtkWidget *widget,
}
static void
-gtk_mirror_bin_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_mirror_bin_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkRequisition requisition;
gtk_mirror_bin_size_request (widget, &requisition);
- *minimum = *natural = requisition.width;
-}
-
-static void
-gtk_mirror_bin_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkRequisition requisition;
-
- gtk_mirror_bin_size_request (widget, &requisition);
-
- *minimum = *natural = requisition.height;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *minimum = *natural = requisition.width;
+ else
+ *minimum = *natural = requisition.height;
}
static void
diff --git a/gtk/gtkaccellabel.c b/gtk/gtkaccellabel.c
index a6c3e13019..3be1e68b7a 100644
--- a/gtk/gtkaccellabel.c
+++ b/gtk/gtkaccellabel.c
@@ -142,11 +142,13 @@ static void gtk_accel_label_finalize (GObject *object);
static GskRenderNode *gtk_accel_label_get_render_node (GtkWidget *widget,
GskRenderer *renderer);
static const gchar *gtk_accel_label_get_string (GtkAccelLabel *accel_label);
-
-
-static void gtk_accel_label_get_preferred_width (GtkWidget *widget,
- gint *min_width,
- gint *nat_width);
+static void gtk_accel_label_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
G_DEFINE_TYPE_WITH_PRIVATE (GtkAccelLabel, gtk_accel_label, GTK_TYPE_LABEL)
@@ -162,7 +164,7 @@ gtk_accel_label_class_init (GtkAccelLabelClass *class)
gobject_class->get_property = gtk_accel_label_get_property;
widget_class->get_render_node = gtk_accel_label_get_render_node;
- widget_class->get_preferred_width = gtk_accel_label_get_preferred_width;
+ widget_class->measure = gtk_accel_label_measure;
widget_class->destroy = gtk_accel_label_destroy;
gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_ACCEL_LABEL);
@@ -413,21 +415,33 @@ gtk_accel_label_get_accel_layout (GtkAccelLabel *accel_label)
}
static void
-gtk_accel_label_get_preferred_width (GtkWidget *widget,
- gint *min_width,
- gint *nat_width)
+gtk_accel_label_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (widget);
- PangoLayout *layout;
- gint width;
- GTK_WIDGET_CLASS (gtk_accel_label_parent_class)->get_preferred_width (widget, min_width, nat_width);
+ GTK_WIDGET_CLASS (gtk_accel_label_parent_class)->measure (widget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
- layout = gtk_accel_label_get_accel_layout (accel_label);
- pango_layout_get_pixel_size (layout, &width, NULL);
- accel_label->priv->accel_string_width = width;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ PangoLayout *layout;
+ int width;
- g_object_unref (layout);
+ layout = gtk_accel_label_get_accel_layout (accel_label);
+ pango_layout_get_pixel_size (layout, &width, NULL);
+ accel_label->priv->accel_string_width = width;
+
+ g_object_unref (layout);
+ }
}
static gint
diff --git a/gtk/gtkactionbar.c b/gtk/gtkactionbar.c
index 870cb3b513..9de2de0e18 100644
--- a/gtk/gtkactionbar.c
+++ b/gtk/gtkactionbar.c
@@ -256,40 +256,27 @@ gtk_action_bar_measure (GtkCssGadget *gadget,
GtkWidget *widget = gtk_css_gadget_get_owner (gadget);
GtkActionBarPrivate *priv = gtk_action_bar_get_instance_private (GTK_ACTION_BAR (widget));
- if (orientation == GTK_ORIENTATION_HORIZONTAL)
- gtk_widget_get_preferred_width_for_height (priv->revealer, for_size, minimum, natural);
- else
- gtk_widget_get_preferred_height_and_baseline_for_width (priv->revealer, for_size, minimum, natural, minimum_baseline, natural_baseline);
-}
-
-static void
-gtk_action_bar_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- GtkActionBarPrivate *priv = gtk_action_bar_get_instance_private (GTK_ACTION_BAR (widget));
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
+ gtk_widget_measure (priv->revealer,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
static void
-gtk_action_bar_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_action_bar_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkActionBarPrivate *priv = gtk_action_bar_get_instance_private (GTK_ACTION_BAR (widget));
gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
@@ -312,8 +299,7 @@ gtk_action_bar_class_init (GtkActionBarClass *klass)
widget_class->destroy = gtk_action_bar_destroy;
widget_class->get_render_node = gtk_action_bar_get_render_node;
widget_class->size_allocate = gtk_action_bar_size_allocate;
- widget_class->get_preferred_width_for_height = gtk_action_bar_get_preferred_width_for_height;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_action_bar_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_action_bar_measure_;
container_class->add = gtk_action_bar_add;
container_class->remove = gtk_action_bar_remove;
diff --git a/gtk/gtkapplicationwindow.c b/gtk/gtkapplicationwindow.c
index 7929812d62..5742d910e3 100644
--- a/gtk/gtkapplicationwindow.c
+++ b/gtk/gtkapplicationwindow.c
@@ -526,104 +526,71 @@ enum {
static GParamSpec *gtk_application_window_properties[N_PROPS];
static void
-gtk_application_window_real_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height)
+gtk_application_window_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (widget);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- GTK_WIDGET_CLASS (gtk_application_window_parent_class)
- ->get_preferred_height (widget, minimum_height, natural_height);
+ GTK_WIDGET_CLASS (gtk_application_window_parent_class)->measure (widget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
- if (window->priv->menubar != NULL)
+ if (priv->menubar != NULL)
{
- gint menubar_min_height, menubar_nat_height;
-
- gtk_widget_get_preferred_height (window->priv->menubar, &menubar_min_height, &menubar_nat_height);
- *minimum_height += menubar_min_height;
- *natural_height += menubar_nat_height;
- }
-}
-
-static void
-gtk_application_window_real_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height)
-{
- GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (widget);
+ int menubar_min, menubar_nat;
- GTK_WIDGET_CLASS (gtk_application_window_parent_class)
- ->get_preferred_height_for_width (widget, width, minimum_height, natural_height);
-
- if (window->priv->menubar != NULL)
- {
- gint menubar_min_height, menubar_nat_height;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ GtkBorder border = {0};
+ int menubar_height = 0;
- gtk_widget_get_preferred_height_for_width (window->priv->menubar, width, &menubar_min_height, &menubar_nat_height);
- *minimum_height += menubar_min_height;
- *natural_height += menubar_nat_height;
- }
-}
+ gtk_widget_get_preferred_height_for_width (priv->menubar, for_size, &menubar_height, NULL);
-static void
-gtk_application_window_real_get_preferred_width (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width)
-{
- GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (widget);
+ GTK_WIDGET_CLASS (gtk_application_window_parent_class)->measure (widget,
+ orientation,
+ for_size - menubar_height,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
- GTK_WIDGET_CLASS (gtk_application_window_parent_class)
- ->get_preferred_width (widget, minimum_width, natural_width);
- if (window->priv->menubar != NULL)
- {
- gint menubar_min_width, menubar_nat_width;
- GtkBorder border = { 0 };
+ gtk_widget_get_preferred_width_for_height (window->priv->menubar, menubar_height, &menubar_min, &menubar_nat);
- gtk_widget_get_preferred_width (window->priv->menubar, &menubar_min_width, &menubar_nat_width);
+ _gtk_window_get_shadow_width (GTK_WINDOW (widget), &border);
+ menubar_min += border.left + border.right;
+ menubar_nat += border.left + border.right;
- _gtk_window_get_shadow_width (GTK_WINDOW (widget), &border);
+ *minimum = MAX (*minimum, menubar_min);
+ *natural = MAX (*natural, menubar_nat);
- menubar_min_width += border.left + border.right;
- menubar_nat_width += border.left + border.right;
-
- *minimum_width = MAX (*minimum_width, menubar_min_width);
- *natural_width = MAX (*natural_width, menubar_nat_width);
+ }
+ else /* VERTICAL */
+ {
+ GTK_WIDGET_CLASS (gtk_application_window_parent_class)->measure (widget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
+
+ gtk_widget_get_preferred_height_for_width (priv->menubar, for_size, &menubar_min, &menubar_nat);
+ *minimum += menubar_min;
+ *natural += menubar_nat;
+ }
}
-}
-
-static void
-gtk_application_window_real_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width)
-{
- GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (widget);
- gint menubar_height;
-
- if (window->priv->menubar != NULL)
- gtk_widget_get_preferred_height (window->priv->menubar, &menubar_height, NULL);
else
- menubar_height = 0;
-
- GTK_WIDGET_CLASS (gtk_application_window_parent_class)
- ->get_preferred_width_for_height (widget, height - menubar_height, minimum_width, natural_width);
-
- if (window->priv->menubar != NULL)
{
- gint menubar_min_width, menubar_nat_width;
- GtkBorder border = { 0 };
-
- gtk_widget_get_preferred_width_for_height (window->priv->menubar, menubar_height, &menubar_min_width, &menubar_nat_width);
-
- _gtk_window_get_shadow_width (GTK_WINDOW (widget), &border);
-
- menubar_min_width += border.left + border.right;
- menubar_nat_width += border.left + border.right;
-
- *minimum_width = MAX (*minimum_width, menubar_min_width);
- *natural_width = MAX (*natural_width, menubar_nat_width);
+ GTK_WIDGET_CLASS (gtk_application_window_parent_class)->measure (widget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
}
@@ -841,10 +808,7 @@ gtk_application_window_class_init (GtkApplicationWindowClass *class)
GObjectClass *object_class = G_OBJECT_CLASS (class);
container_class->forall = gtk_application_window_real_forall_internal;
- widget_class->get_preferred_height = gtk_application_window_real_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_application_window_real_get_preferred_height_for_width;
- widget_class->get_preferred_width = gtk_application_window_real_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_application_window_real_get_preferred_width_for_height;
+ widget_class->measure = gtk_application_window_measure;
widget_class->size_allocate = gtk_application_window_real_size_allocate;
widget_class->realize = gtk_application_window_real_realize;
widget_class->unrealize = gtk_application_window_real_unrealize;
diff --git a/gtk/gtkbbox.c b/gtk/gtkbbox.c
index 3d2a8ef074..111a63813d 100644
--- a/gtk/gtkbbox.c
+++ b/gtk/gtkbbox.c
@@ -94,28 +94,13 @@ static void gtk_button_box_get_property (GObject *object,
GParamSpec *pspec);
static GskRenderNode *gtk_button_box_get_render_node (GtkWidget *widget,
GskRenderer *renderer);
-
-static void gtk_button_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_button_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_button_box_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural);
-static void gtk_button_box_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural);
-static void gtk_button_box_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline);
-
+static void gtk_button_box_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_button_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_button_box_remove (GtkContainer *container,
@@ -181,11 +166,7 @@ gtk_button_box_class_init (GtkButtonBoxClass *class)
gobject_class->get_property = gtk_button_box_get_property;
gobject_class->finalize = gtk_button_box_finalize;
- widget_class->get_preferred_width = gtk_button_box_get_preferred_width;
- widget_class->get_preferred_height = gtk_button_box_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_button_box_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_button_box_get_preferred_height_for_width;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_button_box_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_button_box_measure_;
widget_class->size_allocate = gtk_button_box_size_allocate;
widget_class->get_render_node = gtk_button_box_get_render_node;
@@ -808,96 +789,15 @@ gtk_button_box_measure (GtkCssGadget *gadget,
}
static void
-gtk_button_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkButtonBoxPrivate *priv = GTK_BUTTON_BOX (widget)->priv;
- GtkCssGadget *gadget;
-
- if (priv->layout_style == GTK_BUTTONBOX_EXPAND)
- gadget = gtk_box_get_gadget (GTK_BOX (widget));
- else
- gadget = priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_button_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkButtonBoxPrivate *priv = GTK_BUTTON_BOX (widget)->priv;
- GtkCssGadget *gadget;
-
- if (priv->layout_style == GTK_BUTTONBOX_EXPAND)
- gadget = gtk_box_get_gadget (GTK_BOX (widget));
- else
- gadget = priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_button_box_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- GtkButtonBoxPrivate *priv = GTK_BUTTON_BOX (widget)->priv;
- GtkCssGadget *gadget;
-
- if (priv->layout_style == GTK_BUTTONBOX_EXPAND)
- gadget = gtk_box_get_gadget (GTK_BOX (widget));
- else
- gadget = priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_button_box_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- GtkButtonBoxPrivate *priv = GTK_BUTTON_BOX (widget)->priv;
- GtkCssGadget *gadget;
-
- if (priv->layout_style == GTK_BUTTONBOX_EXPAND)
- gadget = gtk_box_get_gadget (GTK_BOX (widget));
- else
- gadget = priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_button_box_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_button_box_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
- GtkButtonBoxPrivate *priv = GTK_BUTTON_BOX (widget)->priv;
+ GtkButtonBoxPrivate *priv = gtk_button_box_get_instance_private (GTK_BUTTON_BOX (widget));
GtkCssGadget *gadget;
if (priv->layout_style == GTK_BUTTONBOX_EXPAND)
@@ -906,8 +806,8 @@ gtk_button_box_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
gadget = priv->gadget;
gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
diff --git a/gtk/gtkbin.c b/gtk/gtkbin.c
index 2fba246162..c5e1bc5a02 100644
--- a/gtk/gtkbin.c
+++ b/gtk/gtkbin.c
@@ -56,20 +56,13 @@ static void gtk_bin_forall (GtkContainer *container,
gpointer callback_data);
static GType gtk_bin_child_type (GtkContainer *container);
-static void gtk_bin_get_preferred_width (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width);
-static void gtk_bin_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_bin_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width);
-static void gtk_bin_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height);
+static void gtk_bin_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_bin_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
@@ -81,10 +74,7 @@ gtk_bin_class_init (GtkBinClass *class)
GtkWidgetClass *widget_class = (GtkWidgetClass*) class;
GtkContainerClass *container_class = (GtkContainerClass*) class;
- widget_class->get_preferred_width = gtk_bin_get_preferred_width;
- widget_class->get_preferred_height = gtk_bin_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_bin_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_bin_get_preferred_height_for_width;
+ widget_class->measure = gtk_bin_measure;
widget_class->size_allocate = gtk_bin_size_allocate;
container_class->add = gtk_bin_add;
@@ -172,90 +162,28 @@ gtk_bin_forall (GtkContainer *container,
}
static void
-gtk_bin_get_preferred_width (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width)
+gtk_bin_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
- GtkBin *bin = GTK_BIN (widget);
- GtkBinPrivate *priv = bin->priv;
-
- *minimum_width = 0;
- *natural_width = 0;
+ GtkBinPrivate *priv = gtk_bin_get_instance_private (GTK_BIN (widget));
- if (priv->child && gtk_widget_get_visible (priv->child))
+ if (priv->child != NULL && gtk_widget_get_visible (priv->child))
{
- gint child_min, child_nat;
- gtk_widget_get_preferred_width (priv->child,
- &child_min, &child_nat);
- *minimum_width = child_min;
- *natural_width = child_nat;
+ gtk_widget_measure (priv->child,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
-}
-
-static void
-gtk_bin_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height)
-{
- GtkBin *bin = GTK_BIN (widget);
- GtkBinPrivate *priv = bin->priv;
-
- *minimum_height = 0;
- *natural_height = 0;
-
- if (priv->child && gtk_widget_get_visible (priv->child))
- {
- gint child_min, child_nat;
- gtk_widget_get_preferred_height (priv->child,
- &child_min, &child_nat);
- *minimum_height = child_min;
- *natural_height = child_nat;
- }
-}
-
-static void
-gtk_bin_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width)
-{
- GtkBin *bin = GTK_BIN (widget);
- GtkBinPrivate *priv = bin->priv;
-
- *minimum_width = 0;
- *natural_width = 0;
-
- if (priv->child && gtk_widget_get_visible (priv->child))
- {
- gint child_min, child_nat;
- gtk_widget_get_preferred_width_for_height (priv->child, height,
- &child_min, &child_nat);
-
- *minimum_width = child_min;
- *natural_width = child_nat;
- }
-}
-
-static void
-gtk_bin_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height)
-{
- GtkBin *bin = GTK_BIN (widget);
- GtkBinPrivate *priv = bin->priv;
-
- *minimum_height = 0;
- *natural_height = 0;
-
- if (priv->child && gtk_widget_get_visible (priv->child))
+ else
{
- gint child_min, child_nat;
- gtk_widget_get_preferred_height_for_width (priv->child, width,
- &child_min, &child_nat);
-
- *minimum_height = child_min;
- *natural_height = child_nat;
+ *minimum = 0;
+ *natural = 0;
}
}
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index a3f0c42626..91a27e52e2 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -195,29 +195,13 @@ static GType gtk_box_child_type (GtkContainer *container);
static GtkWidgetPath * gtk_box_get_path_for_child
(GtkContainer *container,
GtkWidget *child);
-
-
-static void gtk_box_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_box_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_box_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width);
-static void gtk_box_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_box_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height,
- gint *minimum_baseline,
- gint *natural_baseline);
-
+static void gtk_box_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static GskRenderNode * gtk_box_get_render_node (GtkWidget *widget,
GskRenderer *renderer);
@@ -252,11 +236,7 @@ gtk_box_class_init (GtkBoxClass *class)
widget_class->get_render_node = gtk_box_get_render_node;
widget_class->size_allocate = gtk_box_size_allocate;
- widget_class->get_preferred_width = gtk_box_get_preferred_width;
- widget_class->get_preferred_height = gtk_box_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_box_get_preferred_height_for_width;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_box_get_preferred_height_and_baseline_for_width;
- widget_class->get_preferred_width_for_height = gtk_box_get_preferred_width_for_height;
+ widget_class->measure = gtk_box_measure;
widget_class->direction_changed = gtk_box_direction_changed;
container_class->add = gtk_box_add;
@@ -1660,27 +1640,19 @@ gtk_box_get_size (GtkWidget *widget,
}
static void
-gtk_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_box_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -1963,34 +1935,6 @@ gtk_box_compute_size_for_orientation (GtkBox *box,
}
static void
-gtk_box_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_box_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
-{
- gtk_css_gadget_get_preferred_size (GTK_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- minimum_baseline, natural_baseline);
-}
-
-static void
gtk_box_get_content_size (GtkCssGadget *gadget,
GtkOrientation orientation,
gint for_size,
@@ -2022,15 +1966,6 @@ gtk_box_get_content_size (GtkCssGadget *gadget,
}
static void
-gtk_box_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height)
-{
- gtk_box_get_preferred_height_and_baseline_for_width (widget, width, minimum_height, natural_height, NULL, NULL);
-}
-
-static void
gtk_box_init (GtkBox *box)
{
GtkBoxPrivate *private;
diff --git a/gtk/gtkboxgadget.c b/gtk/gtkboxgadget.c
index 10bc0dff0b..fb230c0c1f 100644
--- a/gtk/gtkboxgadget.c
+++ b/gtk/gtkboxgadget.c
@@ -126,11 +126,11 @@ gtk_box_gadget_measure_child (GObject *child,
{
if (GTK_IS_WIDGET (child))
{
- _gtk_widget_get_preferred_size_for_size (GTK_WIDGET (child),
- orientation,
- for_size,
- minimum, natural,
- minimum_baseline, natural_baseline);
+ gtk_widget_measure (GTK_WIDGET (child),
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
else
{
diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c
index 45c638bfee..543ed4e7e9 100644
--- a/gtk/gtkbutton.c
+++ b/gtk/gtkbutton.c
@@ -149,27 +149,13 @@ static void gtk_button_do_release (GtkButton *button,
static void gtk_button_actionable_iface_init (GtkActionableInterface *iface);
-static void gtk_button_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_button_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_button_get_preferred_width_for_height (GtkWidget *widget,
- gint for_size,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_button_get_preferred_height_for_width (GtkWidget *widget,
- gint for_size,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_button_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_size,
- gint *natural_size,
- gint *minimum_baseline,
- gint *natural_baseline);
-
+static void gtk_button_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_button_measure (GtkCssGadget *gadget,
GtkOrientation orientation,
int for_size,
@@ -231,11 +217,7 @@ gtk_button_class_init (GtkButtonClass *klass)
gobject_class->set_property = gtk_button_set_property;
gobject_class->get_property = gtk_button_get_property;
- widget_class->get_preferred_width = gtk_button_get_preferred_width;
- widget_class->get_preferred_height = gtk_button_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_button_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_button_get_preferred_height_for_width;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_button_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_button_measure_;
widget_class->screen_changed = gtk_button_screen_changed;
widget_class->realize = gtk_button_realize;
widget_class->unrealize = gtk_button_unrealize;
@@ -1109,11 +1091,11 @@ gtk_button_measure (GtkCssGadget *gadget,
if (child && gtk_widget_get_visible (child))
{
- _gtk_widget_get_preferred_size_for_size (child,
- orientation,
- for_size,
- minimum, natural,
- minimum_baseline, natural_baseline);
+ gtk_widget_measure (child,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
else
{
@@ -1127,67 +1109,18 @@ gtk_button_measure (GtkCssGadget *gadget,
}
static void
-gtk_button_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_BUTTON (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_button_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_BUTTON (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_button_get_preferred_width_for_height (GtkWidget *widget,
- gint for_size,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_BUTTON (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- for_size,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_button_get_preferred_height_for_width (GtkWidget *widget,
- gint for_size,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_BUTTON (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- for_size,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_button_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint for_size,
- gint *minimum_size,
- gint *natural_size,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_button_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_BUTTON (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
+ orientation,
for_size,
- minimum_size, natural_size,
+ minimum, natural,
minimum_baseline, natural_baseline);
}
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c
index 74889037ac..24f34a34ca 100644
--- a/gtk/gtkcalendar.c
+++ b/gtk/gtkcalendar.c
@@ -261,12 +261,13 @@ static void gtk_calendar_realize (GtkWidget *widget);
static void gtk_calendar_unrealize (GtkWidget *widget);
static void gtk_calendar_map (GtkWidget *widget);
static void gtk_calendar_unmap (GtkWidget *widget);
-static void gtk_calendar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_calendar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_calendar_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_calendar_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_calendar_draw (GtkWidget *widget,
@@ -365,8 +366,7 @@ gtk_calendar_class_init (GtkCalendarClass *class)
widget_class->map = gtk_calendar_map;
widget_class->unmap = gtk_calendar_unmap;
widget_class->draw = gtk_calendar_draw;
- widget_class->get_preferred_width = gtk_calendar_get_preferred_width;
- widget_class->get_preferred_height = gtk_calendar_get_preferred_height;
+ widget_class->measure = gtk_calendar_measure;
widget_class->size_allocate = gtk_calendar_size_allocate;
widget_class->button_press_event = gtk_calendar_button_press;
widget_class->button_release_event = gtk_calendar_button_release;
@@ -2035,27 +2035,22 @@ gtk_calendar_size_request (GtkWidget *widget,
}
static void
-gtk_calendar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_calendar_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkRequisition requisition;
gtk_calendar_size_request (widget, &requisition);
- *minimum = *natural = requisition.width;
-}
-
-static void
-gtk_calendar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkRequisition requisition;
-
- gtk_calendar_size_request (widget, &requisition);
-
- *minimum = *natural = requisition.height;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *minimum = *natural = requisition.width;
+ else /* VERTICAL */
+ *minimum = *natural = requisition.height;
}
static void
diff --git a/gtk/gtkcellview.c b/gtk/gtkcellview.c
index 80c7f564ad..2ae9e93981 100644
--- a/gtk/gtkcellview.c
+++ b/gtk/gtkcellview.c
@@ -97,21 +97,13 @@ static void gtk_cell_view_buildable_custom_tag_end (GtkBuildable
gpointer *data);
static GtkSizeRequestMode gtk_cell_view_get_request_mode (GtkWidget *widget);
-static void gtk_cell_view_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_cell_view_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_cell_view_get_preferred_width_for_height (GtkWidget *widget,
- gint avail_size,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_cell_view_get_preferred_height_for_width (GtkWidget *widget,
- gint avail_size,
- gint *minimum_size,
- gint *natural_size);
-
+static void gtk_cell_view_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void context_size_changed_cb (GtkCellAreaContext *context,
GParamSpec *pspec,
GtkWidget *view);
@@ -202,10 +194,7 @@ gtk_cell_view_class_init (GtkCellViewClass *klass)
widget_class->draw = gtk_cell_view_draw;
widget_class->size_allocate = gtk_cell_view_size_allocate;
widget_class->get_request_mode = gtk_cell_view_get_request_mode;
- widget_class->get_preferred_width = gtk_cell_view_get_preferred_width;
- widget_class->get_preferred_height = gtk_cell_view_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_cell_view_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_cell_view_get_preferred_height_for_width;
+ widget_class->measure = gtk_cell_view_measure_;
/* properties */
g_object_class_override_property (gobject_class, PROP_ORIENTATION, "orientation");
@@ -681,54 +670,21 @@ gtk_cell_view_get_request_mode (GtkWidget *widget)
return gtk_cell_area_get_request_mode (priv->area);
}
-static void
-gtk_cell_view_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_CELL_VIEW (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_cell_view_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_CELL_VIEW (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
static void
-gtk_cell_view_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_CELL_VIEW (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_cell_view_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
+gtk_cell_view_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_CELL_VIEW (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
diff --git a/gtk/gtkcheckbutton.c b/gtk/gtkcheckbutton.c
index f6f8d376f5..646ea6ac1e 100644
--- a/gtk/gtkcheckbutton.c
+++ b/gtk/gtkcheckbutton.c
@@ -78,26 +78,6 @@
*/
-static void gtk_check_button_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_check_button_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural);
-static void gtk_check_button_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_check_button_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural);
-static void gtk_check_button_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline);
static void gtk_check_button_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static GskRenderNode *gtk_check_button_get_render_node (GtkWidget *widget,
@@ -196,6 +176,30 @@ gtk_check_button_remove (GtkContainer *container,
}
static void
+gtk_check_button_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
+{
+ GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
+ GtkCssGadget *gadget;
+
+ if (gtk_toggle_button_get_mode (GTK_TOGGLE_BUTTON (widget)))
+ gadget = priv->gadget;
+ else
+ gadget = GTK_BUTTON (widget)->priv->gadget;
+
+ gtk_css_gadget_get_preferred_size (gadget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
+}
+
+static void
gtk_check_button_class_init (GtkCheckButtonClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
@@ -204,11 +208,7 @@ gtk_check_button_class_init (GtkCheckButtonClass *class)
object_class->finalize = gtk_check_button_finalize;
- widget_class->get_preferred_width = gtk_check_button_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_check_button_get_preferred_width_for_height;
- widget_class->get_preferred_height = gtk_check_button_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_check_button_get_preferred_height_for_width;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_check_button_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_check_button_measure;
widget_class->size_allocate = gtk_check_button_size_allocate;
widget_class->get_render_node = gtk_check_button_get_render_node;
widget_class->state_flags_changed = gtk_check_button_state_flags_changed;
@@ -338,111 +338,6 @@ gtk_check_button_new_with_mnemonic (const gchar *label)
}
static void
-gtk_check_button_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
- GtkCssGadget *gadget;
-
- if (gtk_toggle_button_get_mode (GTK_TOGGLE_BUTTON (widget)))
- gadget = priv->gadget;
- else
- gadget = GTK_BUTTON (widget)->priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_check_button_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
- GtkCssGadget *gadget;
-
- if (gtk_toggle_button_get_mode (GTK_TOGGLE_BUTTON (widget)))
- gadget = priv->gadget;
- else
- gadget = GTK_BUTTON (widget)->priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_check_button_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
-{
- GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
- GtkCssGadget *gadget;
-
- if (gtk_toggle_button_get_mode (GTK_TOGGLE_BUTTON (widget)))
- gadget = priv->gadget;
- else
- gadget = GTK_BUTTON (widget)->priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- minimum_baseline, natural_baseline);
-}
-
-static void
-gtk_check_button_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
- GtkCssGadget *gadget;
-
- if (gtk_toggle_button_get_mode (GTK_TOGGLE_BUTTON (widget)))
- gadget = priv->gadget;
- else
- gadget = GTK_BUTTON (widget)->priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_check_button_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
- GtkCssGadget *gadget;
-
- if (gtk_toggle_button_get_mode (GTK_TOGGLE_BUTTON (widget)))
- gadget = priv->gadget;
- else
- gadget = GTK_BUTTON (widget)->priv->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
gtk_check_button_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index ec5dbec865..971503ac02 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -523,28 +523,22 @@ swatch_size_allocate (GtkWidget *widget,
}
static void
-swatch_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_color_swatch_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_COLOR_SWATCH (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
-static void
-swatch_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_COLOR_SWATCH (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
+
static gboolean
swatch_popup_menu (GtkWidget *widget)
@@ -674,8 +668,7 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class)
object_class->finalize = swatch_finalize;
object_class->dispose = swatch_dispose;
- widget_class->get_preferred_width = swatch_get_preferred_width;
- widget_class->get_preferred_height = swatch_get_preferred_height;
+ widget_class->measure = gtk_color_swatch_measure_;
widget_class->draw = swatch_draw;
widget_class->drag_begin = swatch_drag_begin;
widget_class->drag_data_get = swatch_drag_data_get;
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index 864819f13e..2a007a38f3 100644
--- a/gtk/gtkcombobox.c
+++ b/gtk/gtkcombobox.c
@@ -468,11 +468,11 @@ gtk_combo_box_measure (GtkCssGadget *gadget,
GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
GtkComboBoxPrivate *priv = combo_box->priv;
- _gtk_widget_get_preferred_size_for_size (priv->box,
- orientation,
- size,
- minimum, natural,
- minimum_baseline, natural_baseline);
+ gtk_widget_measure (priv->box,
+ orientation,
+ size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
static void
@@ -525,72 +525,25 @@ gtk_combo_box_allocate (GtkCssGadget *gadget,
}
static void
-gtk_combo_box_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
+gtk_combo_box_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gint dummy;
/* https://bugzilla.gnome.org/show_bug.cgi?id=729496 */
- if (natural_size == NULL)
- natural_size = &dummy;
-
- gtk_css_gadget_get_preferred_size (GTK_COMBO_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_combo_box_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gint min_width;
+ if (natural == NULL)
+ natural = &dummy;
- /* Combo box is height-for-width only
- * (so we always just reserve enough height for the minimum width)
- */
- gtk_css_gadget_get_preferred_size (GTK_COMBO_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- &min_width, NULL,
- NULL, NULL);
- gtk_css_gadget_get_preferred_size (GTK_COMBO_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- min_width,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_combo_box_get_preferred_width_for_height (GtkWidget *widget,
- gint avail_size,
- gint *minimum_size,
- gint *natural_size)
-{
- /* Combo box is height-for-width only
- * (so we assume we always reserved enough height for the minimum width)
- */
- gtk_css_gadget_get_preferred_size (GTK_COMBO_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- avail_size,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_combo_box_get_preferred_height_for_width (GtkWidget *widget,
- gint avail_size,
- gint *minimum_size,
- gint *natural_size)
-{
gtk_css_gadget_get_preferred_size (GTK_COMBO_BOX (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- avail_size,
- minimum_size, natural_size,
- NULL, NULL);
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
static void
@@ -667,10 +620,7 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
widget_class->mnemonic_activate = gtk_combo_box_mnemonic_activate;
widget_class->grab_focus = gtk_combo_box_grab_focus;
widget_class->style_updated = gtk_combo_box_style_updated;
- widget_class->get_preferred_width = gtk_combo_box_get_preferred_width;
- widget_class->get_preferred_height = gtk_combo_box_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_combo_box_get_preferred_height_for_width;
- widget_class->get_preferred_width_for_height = gtk_combo_box_get_preferred_width_for_height;
+ widget_class->measure = gtk_combo_box_measure_;
widget_class->destroy = gtk_combo_box_destroy;
widget_class->compute_expand = gtk_combo_box_compute_expand;
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index d0b485de6e..2f91597355 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -412,18 +412,6 @@ static void gtk_entry_realize (GtkWidget *widget);
static void gtk_entry_unrealize (GtkWidget *widget);
static void gtk_entry_map (GtkWidget *widget);
static void gtk_entry_unmap (GtkWidget *widget);
-static void gtk_entry_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_entry_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_entry_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height,
- gint *minimum_baseline,
- gint *natural_baseline);
static void gtk_entry_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gint gtk_entry_draw (GtkWidget *widget,
@@ -693,6 +681,14 @@ static void buffer_connect_signals (GtkEntry *entry);
static void buffer_disconnect_signals (GtkEntry *entry);
static GtkEntryBuffer *get_buffer (GtkEntry *entry);
+static void gtk_entry_measure_ (GtkWidget *gadget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
+
static void gtk_entry_measure (GtkCssGadget *gadget,
GtkOrientation orientation,
int for_size,
@@ -763,9 +759,7 @@ gtk_entry_class_init (GtkEntryClass *class)
widget_class->unmap = gtk_entry_unmap;
widget_class->realize = gtk_entry_realize;
widget_class->unrealize = gtk_entry_unrealize;
- widget_class->get_preferred_width = gtk_entry_get_preferred_width;
- widget_class->get_preferred_height = gtk_entry_get_preferred_height;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_entry_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_entry_measure_;
widget_class->size_allocate = gtk_entry_size_allocate;
widget_class->draw = gtk_entry_draw;
widget_class->enter_notify_event = gtk_entry_enter_notify;
@@ -3180,40 +3174,17 @@ gtk_entry_unrealize (GtkWidget *widget)
}
static void
-gtk_entry_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_ENTRY (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_entry_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_ENTRY (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_entry_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_entry_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_ENTRY (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
diff --git a/gtk/gtkeventbox.c b/gtk/gtkeventbox.c
index 24e11cd2e5..99f5b5fd5f 100644
--- a/gtk/gtkeventbox.c
+++ b/gtk/gtkeventbox.c
@@ -59,18 +59,6 @@ static void gtk_event_box_realize (GtkWidget *widget);
static void gtk_event_box_unrealize (GtkWidget *widget);
static void gtk_event_box_map (GtkWidget *widget);
static void gtk_event_box_unmap (GtkWidget *widget);
-static void gtk_event_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_event_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_event_box_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline);
static void gtk_event_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_event_box_draw (GtkWidget *widget,
@@ -99,9 +87,6 @@ gtk_event_box_class_init (GtkEventBoxClass *class)
widget_class->unrealize = gtk_event_box_unrealize;
widget_class->map = gtk_event_box_map;
widget_class->unmap = gtk_event_box_unmap;
- widget_class->get_preferred_width = gtk_event_box_get_preferred_width;
- widget_class->get_preferred_height = gtk_event_box_get_preferred_height;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_event_box_get_preferred_height_and_baseline_for_width;
widget_class->size_allocate = gtk_event_box_size_allocate;
widget_class->draw = gtk_event_box_draw;
@@ -481,62 +466,6 @@ gtk_event_box_unmap (GtkWidget *widget)
}
static void
-gtk_event_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkBin *bin = GTK_BIN (widget);
- GtkWidget *child;
-
- *minimum = 0;
- *natural = 0;
-
- child = gtk_bin_get_child (bin);
- if (child && gtk_widget_get_visible (child))
- gtk_widget_get_preferred_width (child, minimum, natural);
-}
-
-static void
-gtk_event_box_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
-{
- GtkBin *bin = GTK_BIN (widget);
- GtkWidget *child;
-
- *minimum = 0;
- *natural = 0;
-
- if (minimum_baseline)
- *minimum_baseline = -1;
-
- if (natural_baseline)
- *natural_baseline = -1;
-
- child = gtk_bin_get_child (bin);
- if (child && gtk_widget_get_visible (child))
- gtk_widget_get_preferred_height_and_baseline_for_width (child,
- width,
- minimum,
- natural,
- minimum_baseline,
- natural_baseline);
-}
-
-static void
-gtk_event_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_event_box_get_preferred_height_and_baseline_for_width (widget, -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
gtk_event_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
diff --git a/gtk/gtkexpander.c b/gtk/gtkexpander.c
index 8d44c0118a..dcbbb101aa 100644
--- a/gtk/gtkexpander.c
+++ b/gtk/gtkexpander.c
@@ -220,20 +220,13 @@ static void gtk_expander_buildable_add_child (GtkBuildable *buildable,
/* GtkWidget */
-static void gtk_expander_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_expander_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_expander_get_preferred_height_for_width (GtkWidget *layout,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_expander_get_preferred_width_for_height (GtkWidget *layout,
- gint width,
- gint *minimum_height,
- gint *natural_height);
+static void gtk_expander_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_expander_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_state);
static void gtk_expander_direction_changed (GtkWidget *widget,
@@ -277,10 +270,7 @@ gtk_expander_class_init (GtkExpanderClass *klass)
widget_class->focus = gtk_expander_focus;
widget_class->drag_motion = gtk_expander_drag_motion;
widget_class->drag_leave = gtk_expander_drag_leave;
- widget_class->get_preferred_width = gtk_expander_get_preferred_width;
- widget_class->get_preferred_height = gtk_expander_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_expander_get_preferred_height_for_width;
- widget_class->get_preferred_width_for_height = gtk_expander_get_preferred_width_for_height;
+ widget_class->measure = gtk_expander_measure;
widget_class->state_flags_changed = gtk_expander_state_flags_changed;
widget_class->direction_changed = gtk_expander_direction_changed;
@@ -1119,53 +1109,19 @@ gtk_expander_activate (GtkExpander *expander)
}
static void
-gtk_expander_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
+gtk_expander_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_EXPANDER (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_expander_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_EXPANDER (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_expander_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_EXPANDER (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_expander_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_EXPANDER (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum_size, natural_size,
- NULL, NULL);
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
/**
diff --git a/gtk/gtkfixed.c b/gtk/gtkfixed.c
index 9e6b681036..2e57c661b9 100644
--- a/gtk/gtkfixed.c
+++ b/gtk/gtkfixed.c
@@ -86,12 +86,15 @@ enum {
};
static void gtk_fixed_realize (GtkWidget *widget);
-static void gtk_fixed_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_fixed_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_fixed_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
+
+
static void gtk_fixed_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_fixed_draw (GtkWidget *widget,
@@ -129,8 +132,7 @@ gtk_fixed_class_init (GtkFixedClass *class)
container_class = (GtkContainerClass*) class;
widget_class->realize = gtk_fixed_realize;
- widget_class->get_preferred_width = gtk_fixed_get_preferred_width;
- widget_class->get_preferred_height = gtk_fixed_get_preferred_height;
+ widget_class->measure = gtk_fixed_measure;
widget_class->size_allocate = gtk_fixed_size_allocate;
widget_class->draw = gtk_fixed_draw;
@@ -368,9 +370,13 @@ gtk_fixed_realize (GtkWidget *widget)
}
static void
-gtk_fixed_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_fixed_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkFixed *fixed = GTK_FIXED (widget);
GtkFixedPrivate *priv = fixed->priv;
@@ -388,38 +394,18 @@ gtk_fixed_get_preferred_width (GtkWidget *widget,
if (!gtk_widget_get_visible (child->widget))
continue;
- gtk_widget_get_preferred_width (child->widget, &child_min, &child_nat);
-
- *minimum = MAX (*minimum, child->x + child_min);
- *natural = MAX (*natural, child->x + child_nat);
- }
-}
-
-static void
-gtk_fixed_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkFixed *fixed = GTK_FIXED (widget);
- GtkFixedPrivate *priv = fixed->priv;
- GtkFixedChild *child;
- GList *children;
- gint child_min, child_nat;
+ gtk_widget_measure (child->widget, orientation, -1, &child_min, &child_nat, NULL, NULL);
- *minimum = 0;
- *natural = 0;
-
- for (children = priv->children; children; children = children->next)
- {
- child = children->data;
-
- if (!gtk_widget_get_visible (child->widget))
- continue;
-
- gtk_widget_get_preferred_height (child->widget, &child_min, &child_nat);
-
- *minimum = MAX (*minimum, child->y + child_min);
- *natural = MAX (*natural, child->y + child_nat);
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ *minimum = MAX (*minimum, child->x + child_min);
+ *natural = MAX (*natural, child->x + child_nat);
+ }
+ else /* VERTICAL */
+ {
+ *minimum = MAX (*minimum, child->y + child_min);
+ *natural = MAX (*natural, child->y + child_nat);
+ }
}
}
diff --git a/gtk/gtkflowbox.c b/gtk/gtkflowbox.c
index 3c21e63ab7..22c56d3589 100644
--- a/gtk/gtkflowbox.c
+++ b/gtk/gtkflowbox.c
@@ -414,53 +414,19 @@ gtk_flow_box_child_get_request_mode (GtkWidget *widget)
}
static void
-gtk_flow_box_child_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (CHILD_PRIV (GTK_FLOW_BOX_CHILD (widget))->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_flow_box_child_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (CHILD_PRIV (GTK_FLOW_BOX_CHILD (widget))->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_flow_box_child_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (CHILD_PRIV (GTK_FLOW_BOX_CHILD (widget))->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_flow_box_child_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
+gtk_flow_box_child_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (CHILD_PRIV (GTK_FLOW_BOX_CHILD (widget))->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -587,10 +553,7 @@ gtk_flow_box_child_class_init (GtkFlowBoxChildClass *class)
widget_class->get_render_node = gtk_flow_box_child_get_render_node;
widget_class->get_request_mode = gtk_flow_box_child_get_request_mode;
- widget_class->get_preferred_height = gtk_flow_box_child_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_flow_box_child_get_preferred_height_for_width;
- widget_class->get_preferred_width = gtk_flow_box_child_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_flow_box_child_get_preferred_width_for_height;
+ widget_class->measure = gtk_flow_box_child_measure_;
widget_class->size_allocate = gtk_flow_box_child_size_allocate;
widget_class->focus = gtk_flow_box_child_focus;
@@ -2062,53 +2025,19 @@ get_largest_aligned_line_length (GtkFlowBox *box,
}
static void
-gtk_flow_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (BOX_PRIV (widget)->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_flow_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (BOX_PRIV (widget)->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_flow_box_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (BOX_PRIV (widget)->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_flow_box_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
+gtk_flow_box_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (BOX_PRIV (widget)->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -3771,10 +3700,7 @@ gtk_flow_box_class_init (GtkFlowBoxClass *class)
widget_class->get_render_node = gtk_flow_box_get_render_node;
widget_class->key_press_event = gtk_flow_box_key_press_event;
widget_class->get_request_mode = gtk_flow_box_get_request_mode;
- widget_class->get_preferred_width = gtk_flow_box_get_preferred_width;
- widget_class->get_preferred_height = gtk_flow_box_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_flow_box_get_preferred_height_for_width;
- widget_class->get_preferred_width_for_height = gtk_flow_box_get_preferred_width_for_height;
+ widget_class->measure = gtk_flow_box_measure_;
container_class->add = gtk_flow_box_add;
container_class->remove = gtk_flow_box_remove;
diff --git a/gtk/gtkframe.c b/gtk/gtkframe.c
index 6a5ed09fbf..270ab1e928 100644
--- a/gtk/gtkframe.c
+++ b/gtk/gtkframe.c
@@ -144,21 +144,13 @@ static void gtk_frame_buildable_add_child (GtkBuildable *buildable,
GtkBuilder *builder,
GObject *child,
const gchar *type);
-
-static void gtk_frame_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_frame_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_frame_get_preferred_height_for_width(GtkWidget *layout,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_frame_get_preferred_width_for_height(GtkWidget *layout,
- gint width,
- gint *minimum_height,
- gint *natural_height);
+static void gtk_frame_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ gint for_size,
+ gint *minimum_size,
+ gint *natural_size,
+ gint *minimum_baseline,
+ gint *natural_baseline);
static void gtk_frame_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_state);
@@ -252,10 +244,7 @@ gtk_frame_class_init (GtkFrameClass *class)
widget_class->get_render_node = gtk_frame_get_render_node;
widget_class->size_allocate = gtk_frame_size_allocate;
- widget_class->get_preferred_width = gtk_frame_get_preferred_width;
- widget_class->get_preferred_height = gtk_frame_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_frame_get_preferred_height_for_width;
- widget_class->get_preferred_width_for_height = gtk_frame_get_preferred_width_for_height;
+ widget_class->measure = gtk_frame_measure_;
widget_class->state_flags_changed = gtk_frame_state_flags_changed;
container_class->remove = gtk_frame_remove;
@@ -982,56 +971,20 @@ gtk_frame_measure_border (GtkCssGadget *gadget,
}
}
-
-static void
-gtk_frame_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_FRAME (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
static void
-gtk_frame_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
+gtk_frame_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ gint for_size,
+ gint *minimum,
+ gint *natural,
+ gint *minimum_baseline,
+ gint *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_FRAME (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_frame_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_FRAME (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-
-static void
-gtk_frame_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_FRAME (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
diff --git a/gtk/gtkgrid.c b/gtk/gtkgrid.c
index 1c5855d5b1..729904c025 100644
--- a/gtk/gtkgrid.c
+++ b/gtk/gtkgrid.c
@@ -1488,66 +1488,17 @@ gtk_grid_get_size_for_size (GtkGrid *grid,
}
static void
-gtk_grid_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_GRID (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_grid_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_GRID (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_grid_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_GRID (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_grid_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_GRID (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_grid_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_grid_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_GRID (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
@@ -1732,11 +1683,7 @@ gtk_grid_class_init (GtkGridClass *class)
object_class->finalize = gtk_grid_finalize;
widget_class->size_allocate = gtk_grid_size_allocate;
- widget_class->get_preferred_width = gtk_grid_get_preferred_width;
- widget_class->get_preferred_height = gtk_grid_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_grid_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_grid_get_preferred_height_for_width;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_grid_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_grid_measure_;
widget_class->get_render_node = gtk_grid_get_render_node;
container_class->add = gtk_grid_add;
diff --git a/gtk/gtkheaderbar.c b/gtk/gtkheaderbar.c
index 23a567423d..592abe3d53 100644
--- a/gtk/gtkheaderbar.c
+++ b/gtk/gtkheaderbar.c
@@ -904,61 +904,21 @@ gtk_header_bar_get_content_size (GtkCssGadget *gadget,
}
static void
-gtk_header_bar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_header_bar_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (GTK_HEADER_BAR (widget));
gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_header_bar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (GTK_HEADER_BAR (widget));
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_header_bar_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (GTK_HEADER_BAR (widget));
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_header_bar_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (GTK_HEADER_BAR (widget));
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -1949,10 +1909,7 @@ gtk_header_bar_class_init (GtkHeaderBarClass *class)
widget_class->destroy = gtk_header_bar_destroy;
widget_class->size_allocate = gtk_header_bar_size_allocate;
- widget_class->get_preferred_width = gtk_header_bar_get_preferred_width;
- widget_class->get_preferred_height = gtk_header_bar_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_header_bar_get_preferred_height_for_width;
- widget_class->get_preferred_width_for_height = gtk_header_bar_get_preferred_width_for_height;
+ widget_class->measure = gtk_header_bar_measure;
widget_class->realize = gtk_header_bar_realize;
widget_class->unrealize = gtk_header_bar_unrealize;
widget_class->hierarchy_changed = gtk_header_bar_hierarchy_changed;
diff --git a/gtk/gtkicon.c b/gtk/gtkicon.c
index 3e5e80f39f..65068b53d4 100644
--- a/gtk/gtkicon.c
+++ b/gtk/gtkicon.c
@@ -94,49 +94,25 @@ gtk_icon_set_property (GObject *object,
}
static void
-gtk_icon_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint for_width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_icon_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkIcon *self = GTK_ICON (widget);
GtkIconPrivate *priv = gtk_icon_get_instance_private (self);
gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- for_width,
+ orientation,
+ for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
static void
-gtk_icon_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_icon_get_preferred_height_and_baseline_for_width (widget, -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_icon_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkIcon *self = GTK_ICON (widget);
- GtkIconPrivate *priv = gtk_icon_get_instance_private (self);
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
gtk_icon_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
@@ -175,9 +151,7 @@ gtk_icon_class_init (GtkIconClass *klass)
oclass->finalize = gtk_icon_finalize;
wclass->size_allocate = gtk_icon_size_allocate;
- wclass->get_preferred_width = gtk_icon_get_preferred_width;
- wclass->get_preferred_height = gtk_icon_get_preferred_height;
- wclass->get_preferred_height_and_baseline_for_width = gtk_icon_get_preferred_height_and_baseline_for_width;
+ wclass->measure = gtk_icon_measure;
wclass->draw = gtk_icon_draw;
icon_props[PROP_CSS_NAME] =
diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c
index 4e828b2b71..638f9e09a7 100644
--- a/gtk/gtkiconview.c
+++ b/gtk/gtkiconview.c
@@ -144,22 +144,13 @@ static void gtk_icon_view_destroy (GtkWidget
static void gtk_icon_view_realize (GtkWidget *widget);
static void gtk_icon_view_unrealize (GtkWidget *widget);
static GtkSizeRequestMode gtk_icon_view_get_request_mode (GtkWidget *widget);
-static void gtk_icon_view_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_icon_view_get_preferred_width_for_height
- (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural);
-static void gtk_icon_view_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_icon_view_get_preferred_height_for_width
- (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural);
+static void gtk_icon_view_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_icon_view_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_icon_view_draw (GtkWidget *widget,
@@ -361,10 +352,7 @@ gtk_icon_view_class_init (GtkIconViewClass *klass)
widget_class->realize = gtk_icon_view_realize;
widget_class->unrealize = gtk_icon_view_unrealize;
widget_class->get_request_mode = gtk_icon_view_get_request_mode;
- widget_class->get_preferred_width = gtk_icon_view_get_preferred_width;
- widget_class->get_preferred_height = gtk_icon_view_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_icon_view_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_icon_view_get_preferred_height_for_width;
+ widget_class->measure = gtk_icon_view_measure;
widget_class->size_allocate = gtk_icon_view_size_allocate;
widget_class->draw = gtk_icon_view_draw;
widget_class->motion_notify_event = gtk_icon_view_motion;
@@ -1607,13 +1595,19 @@ gtk_icon_view_get_request_mode (GtkWidget *widget)
}
static void
-gtk_icon_view_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_icon_view_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkIconView *icon_view = GTK_ICON_VIEW (widget);
GtkIconViewPrivate *priv = icon_view->priv;
- int item_min, item_nat;
+ GtkOrientation other_orientation = orientation == GTK_ORIENTATION_HORIZONTAL ?
+ GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL;
+ int item_min, item_nat, items, item_size, n_items;
if (gtk_icon_view_is_empty (icon_view))
{
@@ -1621,113 +1615,37 @@ gtk_icon_view_get_preferred_width (GtkWidget *widget,
return;
}
- gtk_icon_view_get_preferred_item_size (icon_view, GTK_ORIENTATION_HORIZONTAL, -1, &item_min, &item_nat);
-
- if (priv->columns > 0)
- {
- *minimum = item_min * priv->columns + priv->column_spacing * (priv->columns - 1);
- *natural = item_nat * priv->columns + priv->column_spacing * (priv->columns - 1);
- }
- else
- {
- int n_items = gtk_icon_view_get_n_items (icon_view);
-
- *minimum = item_min;
- *natural = item_nat * n_items + priv->column_spacing * (n_items - 1);
- }
-
- *minimum += 2 * priv->margin;
- *natural += 2 * priv->margin;
-}
-
-static void
-gtk_icon_view_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- GtkIconView *icon_view = GTK_ICON_VIEW (widget);
- GtkIconViewPrivate *priv = icon_view->priv;
- int item_min, item_nat, rows, row_height, n_items;
-
- if (gtk_icon_view_is_empty (icon_view))
- {
- *minimum = *natural = 2 * priv->margin;
- return;
- }
-
- gtk_icon_view_compute_n_items_for_size (icon_view, GTK_ORIENTATION_VERTICAL, height, &rows, &row_height, NULL, NULL);
n_items = gtk_icon_view_get_n_items (icon_view);
- gtk_icon_view_get_preferred_item_size (icon_view, GTK_ORIENTATION_HORIZONTAL, row_height, &item_min, &item_nat);
- *minimum = (item_min + priv->column_spacing) * ((n_items + rows - 1) / rows) - priv->column_spacing;
- *natural = (item_nat + priv->column_spacing) * ((n_items + rows - 1) / rows) - priv->column_spacing;
-
- *minimum += 2 * priv->margin;
- *natural += 2 * priv->margin;
-}
-
-static void
-gtk_icon_view_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkIconView *icon_view = GTK_ICON_VIEW (widget);
- GtkIconViewPrivate *priv = icon_view->priv;
- int item_min, item_nat, n_items;
-
- if (gtk_icon_view_is_empty (icon_view))
+ if (for_size < 0)
{
- *minimum = *natural = 2 * priv->margin;
- return;
- }
-
- gtk_icon_view_get_preferred_item_size (icon_view, GTK_ORIENTATION_VERTICAL, -1, &item_min, &item_nat);
- n_items = gtk_icon_view_get_n_items (icon_view);
+ gtk_icon_view_get_preferred_item_size (icon_view, orientation, -1, &item_min, &item_nat);
- if (priv->columns > 0)
- {
- int n_rows = (n_items + priv->columns - 1) / priv->columns;
+ if (priv->columns > 0)
+ {
+ int n_rows = (n_items + priv->columns - 1) / priv->columns;
- *minimum = item_min * n_rows + priv->row_spacing * (n_rows - 1);
- *natural = item_nat * n_rows + priv->row_spacing * (n_rows - 1);
+ *minimum = item_min * n_rows + priv->row_spacing * (n_rows - 1);
+ *natural = item_nat * n_rows + priv->row_spacing * (n_rows - 1);
+ }
+ else
+ {
+ *minimum = item_min;
+ *natural = item_nat * n_items + priv->row_spacing * (n_items - 1);
+ }
}
else
{
- *minimum = item_min;
- *natural = item_nat * n_items + priv->row_spacing * (n_items - 1);
+ gtk_icon_view_compute_n_items_for_size (icon_view, orientation, for_size, NULL, NULL, &items, &item_size);
+ gtk_icon_view_get_preferred_item_size (icon_view, other_orientation, item_size, &item_min, &item_nat);
+ *minimum = (item_min + priv->row_spacing) * ((n_items + items - 1) / items) - priv->row_spacing;
+ *natural = (item_nat + priv->row_spacing) * ((n_items + items - 1) / items) - priv->row_spacing;
}
*minimum += 2 * priv->margin;
*natural += 2 * priv->margin;
}
-static void
-gtk_icon_view_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- GtkIconView *icon_view = GTK_ICON_VIEW (widget);
- GtkIconViewPrivate *priv = icon_view->priv;
- int item_min, item_nat, columns, column_width, n_items;
-
- if (gtk_icon_view_is_empty (icon_view))
- {
- *minimum = *natural = 2 * priv->margin;
- return;
- }
-
- gtk_icon_view_compute_n_items_for_size (icon_view, GTK_ORIENTATION_HORIZONTAL, width, NULL, NULL, &columns, &column_width);
- n_items = gtk_icon_view_get_n_items (icon_view);
-
- gtk_icon_view_get_preferred_item_size (icon_view, GTK_ORIENTATION_VERTICAL, column_width, &item_min, &item_nat);
- *minimum = (item_min + priv->row_spacing) * ((n_items + columns - 1) / columns) - priv->row_spacing;
- *natural = (item_nat + priv->row_spacing) * ((n_items + columns - 1) / columns) - priv->row_spacing;
-
- *minimum += 2 * priv->margin;
- *natural += 2 * priv->margin;
-}
static void
gtk_icon_view_allocate_children (GtkIconView *icon_view)
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c
index 3d196f3120..cb8b5430b0 100644
--- a/gtk/gtkimage.c
+++ b/gtk/gtkimage.c
@@ -148,19 +148,13 @@ static void gtk_image_size_allocate (GtkWidget *widget,
GtkAllocation*allocation);
static void gtk_image_unmap (GtkWidget *widget);
static void gtk_image_unrealize (GtkWidget *widget);
-static void gtk_image_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_image_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_image_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline);
-
+static void gtk_image_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_image_get_content_size (GtkCssGadget *gadget,
GtkOrientation orientation,
gint for_size,
@@ -218,9 +212,7 @@ gtk_image_class_init (GtkImageClass *class)
widget_class = GTK_WIDGET_CLASS (class);
widget_class->get_render_node = gtk_image_get_render_node;
- widget_class->get_preferred_width = gtk_image_get_preferred_width;
- widget_class->get_preferred_height = gtk_image_get_preferred_height;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_image_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_image_measure;
widget_class->size_allocate = gtk_image_size_allocate;
widget_class->unmap = gtk_image_unmap;
widget_class->unrealize = gtk_image_unrealize;
@@ -1578,40 +1570,17 @@ gtk_image_clear (GtkImage *image)
}
static void
-gtk_image_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_IMAGE (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_image_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_IMAGE (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_image_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_image_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_IMAGE (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 5ea67e0950..1f74a8b4fa 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -549,26 +549,13 @@ static void gtk_label_drag_gesture_update (GtkGestureDrag *gesture,
GtkLabel *label);
static GtkSizeRequestMode gtk_label_get_request_mode (GtkWidget *widget);
-static void gtk_label_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_label_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_label_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width);
-static void gtk_label_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_label_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height,
- gint *minimum_baseline,
- gint *natural_baseline);
+static void gtk_label_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_label_measure (GtkCssGadget *gadget,
GtkOrientation orientation,
@@ -640,11 +627,7 @@ gtk_label_class_init (GtkLabelClass *class)
widget_class->popup_menu = gtk_label_popup_menu;
widget_class->focus = gtk_label_focus;
widget_class->get_request_mode = gtk_label_get_request_mode;
- widget_class->get_preferred_width = gtk_label_get_preferred_width;
- widget_class->get_preferred_height = gtk_label_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_label_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_label_get_preferred_height_for_width;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_label_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_label_measure_;
class->move_cursor = gtk_label_move_cursor;
class->copy_clipboard = gtk_label_copy_clipboard;
@@ -3869,67 +3852,18 @@ gtk_label_measure (GtkCssGadget *gadget,
}
static void
-gtk_label_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_LABEL (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_label_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_LABEL (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_label_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width)
-{
- gtk_css_gadget_get_preferred_size (GTK_LABEL (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum_width, natural_width,
- NULL, NULL);
-}
-
-static void
-gtk_label_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height)
-{
- gtk_css_gadget_get_preferred_size (GTK_LABEL (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum_height, natural_height,
- NULL, NULL);
-}
-
-static void
-gtk_label_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_label_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_LABEL (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum_height, natural_height,
+ orientation,
+ for_size,
+ minimum, natural,
minimum_baseline, natural_baseline);
}
diff --git a/gtk/gtklayout.c b/gtk/gtklayout.c
index 81e716a487..56347b205f 100644
--- a/gtk/gtklayout.c
+++ b/gtk/gtklayout.c
@@ -123,12 +123,13 @@ static void gtk_layout_finalize (GObject *object);
static void gtk_layout_realize (GtkWidget *widget);
static void gtk_layout_unrealize (GtkWidget *widget);
static void gtk_layout_map (GtkWidget *widget);
-static void gtk_layout_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_layout_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_layout_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_layout_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gint gtk_layout_draw (GtkWidget *widget,
@@ -687,8 +688,7 @@ gtk_layout_class_init (GtkLayoutClass *class)
widget_class->realize = gtk_layout_realize;
widget_class->unrealize = gtk_layout_unrealize;
widget_class->map = gtk_layout_map;
- widget_class->get_preferred_width = gtk_layout_get_preferred_width;
- widget_class->get_preferred_height = gtk_layout_get_preferred_height;
+ widget_class->measure = gtk_layout_measure;
widget_class->size_allocate = gtk_layout_size_allocate;
widget_class->draw = gtk_layout_draw;
@@ -937,20 +937,17 @@ gtk_layout_unrealize (GtkWidget *widget)
}
static void
-gtk_layout_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_layout_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
*minimum = *natural = 0;
}
-static void
-gtk_layout_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- *minimum = *natural = 0;
-}
static void
gtk_layout_size_allocate (GtkWidget *widget,
diff --git a/gtk/gtklevelbar.c b/gtk/gtklevelbar.c
index 709b7d4899..f7229f5934 100644
--- a/gtk/gtklevelbar.c
+++ b/gtk/gtklevelbar.c
@@ -426,27 +426,19 @@ gtk_level_bar_measure_trough (GtkCssGadget *gadget,
}
static void
-gtk_level_bar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_level_bar_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_LEVEL_BAR (widget)->priv->trough_gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_level_bar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_LEVEL_BAR (widget)->priv->trough_gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -976,8 +968,7 @@ gtk_level_bar_class_init (GtkLevelBarClass *klass)
wclass->draw = gtk_level_bar_draw;
wclass->size_allocate = gtk_level_bar_size_allocate;
- wclass->get_preferred_width = gtk_level_bar_get_preferred_width;
- wclass->get_preferred_height = gtk_level_bar_get_preferred_height;
+ wclass->measure = gtk_level_bar_measure;
wclass->state_flags_changed = gtk_level_bar_state_flags_changed;
wclass->direction_changed = gtk_level_bar_direction_changed;
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index 98440d2a7d..90ebaca6d9 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -239,22 +239,6 @@ static void gtk_list_box_move_cursor (GtkListBo
static void gtk_list_box_finalize (GObject *obj);
static void gtk_list_box_parent_set (GtkWidget *widget,
GtkWidget *prev_parent);
-
-static void gtk_list_box_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_list_box_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_list_box_get_preferred_width (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width);
-static void gtk_list_box_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width);
-
static void gtk_list_box_select_row_internal (GtkListBox *box,
GtkListBoxRow *row);
static void gtk_list_box_unselect_row_internal (GtkListBox *box,
@@ -302,6 +286,13 @@ static void gtk_list_box_allocate (GtkCssGadget *gadget,
int baseline,
GtkAllocation *out_clip,
gpointer data);
+static void gtk_list_box_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
@@ -424,10 +415,7 @@ gtk_list_box_class_init (GtkListBoxClass *klass)
widget_class->realize = gtk_list_box_realize;
widget_class->compute_expand = gtk_list_box_compute_expand;
widget_class->get_request_mode = gtk_list_box_get_request_mode;
- widget_class->get_preferred_height = gtk_list_box_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_list_box_get_preferred_height_for_width;
- widget_class->get_preferred_width = gtk_list_box_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_list_box_get_preferred_width_for_height;
+ widget_class->measure = gtk_list_box_measure_;
widget_class->size_allocate = gtk_list_box_size_allocate;
widget_class->drag_leave = gtk_list_box_drag_leave;
widget_class->parent_set = gtk_list_box_parent_set;
@@ -2558,53 +2546,19 @@ gtk_list_box_get_request_mode (GtkWidget *widget)
}
static void
-gtk_list_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (BOX_PRIV (widget)->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_list_box_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (BOX_PRIV (widget)->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_list_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_list_box_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (BOX_PRIV (widget)->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_list_box_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (BOX_PRIV (widget)->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -3299,53 +3253,19 @@ gtk_list_box_row_measure (GtkCssGadget *gadget,
}
static void
-gtk_list_box_row_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (ROW_PRIV (GTK_LIST_BOX_ROW (widget))->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_list_box_row_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (ROW_PRIV (GTK_LIST_BOX_ROW (widget))->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_list_box_row_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (ROW_PRIV (GTK_LIST_BOX_ROW (widget))->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_list_box_row_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
+gtk_list_box_row_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (ROW_PRIV (GTK_LIST_BOX_ROW (widget))->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -3723,10 +3643,7 @@ gtk_list_box_row_class_init (GtkListBoxRowClass *klass)
widget_class->show = gtk_list_box_row_show;
widget_class->hide = gtk_list_box_row_hide;
widget_class->get_render_node = gtk_list_box_row_get_render_node;
- widget_class->get_preferred_height = gtk_list_box_row_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_list_box_row_get_preferred_height_for_width;
- widget_class->get_preferred_width = gtk_list_box_row_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_list_box_row_get_preferred_width_for_height;
+ widget_class->measure = gtk_list_box_row_measure_;
widget_class->size_allocate = gtk_list_box_row_size_allocate;
widget_class->focus = gtk_list_box_row_focus;
widget_class->grab_focus = gtk_list_box_row_grab_focus;
diff --git a/gtk/gtkmagnifier.c b/gtk/gtkmagnifier.c
index 5d937673d1..f34f1bbdfa 100644
--- a/gtk/gtkmagnifier.c
+++ b/gtk/gtkmagnifier.c
@@ -134,46 +134,32 @@ _gtk_magnifier_draw (GtkWidget *widget,
}
static void
-gtk_magnifier_get_preferred_width (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width)
+gtk_magnifier_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
- GtkMagnifier *magnifier;
- GtkMagnifierPrivate *priv;
- gint width;
-
- magnifier = GTK_MAGNIFIER (widget);
- priv = _gtk_magnifier_get_instance_private (magnifier);
+ GtkMagnifier *magnifier = GTK_MAGNIFIER (widget);
+ GtkMagnifierPrivate *priv = _gtk_magnifier_get_instance_private (magnifier);
+ gint size;
if (priv->resize && priv->inspected)
- width = priv->magnification * gtk_widget_get_allocated_width (priv->inspected);
+ {
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ size = priv->magnification * gtk_widget_get_allocated_width (priv->inspected);
+ else
+ size = priv->magnification * gtk_widget_get_allocated_height (priv->inspected);
+ }
else
- width = 0;
+ size = 0;
- *minimum_width = width;
- *natural_width = width;
+ *minimum = size;
+ *natural = size;
}
-static void
-gtk_magnifier_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height)
-{
- GtkMagnifier *magnifier;
- GtkMagnifierPrivate *priv;
- gint height;
-
- magnifier = GTK_MAGNIFIER (widget);
- priv = _gtk_magnifier_get_instance_private (magnifier);
-
- if (priv->resize && priv->inspected)
- height = priv->magnification * gtk_widget_get_allocated_height (priv->inspected);
- else
- height = 0;
-
- *minimum_height = height;
- *natural_height = height;
-}
static void
resize_handler (GtkWidget *widget,
@@ -284,8 +270,7 @@ _gtk_magnifier_class_init (GtkMagnifierClass *klass)
widget_class->destroy = _gtk_magnifier_destroy;
widget_class->draw = _gtk_magnifier_draw;
- widget_class->get_preferred_width = gtk_magnifier_get_preferred_width;
- widget_class->get_preferred_height = gtk_magnifier_get_preferred_height;
+ widget_class->measure = gtk_magnifier_measure;
widget_class->map = gtk_magnifier_map;
widget_class->unmap = gtk_magnifier_unmap;
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index e98dcdaaec..6e306ba0f6 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -305,17 +305,13 @@ static gboolean gtk_menu_real_can_activate_accel (GtkWidget *widget,
guint signal_id);
static void _gtk_menu_refresh_accel_paths (GtkMenu *menu,
gboolean group_changed);
-
-static void gtk_menu_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_menu_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_menu_get_preferred_height_for_width (GtkWidget *widget,
- gint for_size,
- gint *minimum_size,
- gint *natural_size);
+static void gtk_menu_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static const gchar attach_data_key[] = "gtk-menu-attach-data";
@@ -525,9 +521,7 @@ gtk_menu_class_init (GtkMenuClass *class)
widget_class->focus = gtk_menu_focus;
widget_class->can_activate_accel = gtk_menu_real_can_activate_accel;
widget_class->grab_notify = gtk_menu_grab_notify;
- widget_class->get_preferred_width = gtk_menu_get_preferred_width;
- widget_class->get_preferred_height = gtk_menu_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_menu_get_preferred_height_for_width;
+ widget_class->measure = gtk_menu_measure;
container_class->remove = gtk_menu_remove;
container_class->get_child_property = gtk_menu_get_child_property;
@@ -3016,189 +3010,189 @@ gtk_menu_show (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_menu_parent_class)->show (widget);
}
-
-static void
-gtk_menu_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
+static void gtk_menu_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
- GtkMenu *menu;
- GtkMenuShell *menu_shell;
- GtkMenuPrivate *priv;
- GtkWidget *child;
- GList *children;
- guint max_toggle_size;
- guint max_accel_width;
- gint child_min, child_nat;
- gint min_width, nat_width;
- GtkBorder padding;
+ GtkMenu *menu = GTK_MENU (widget);
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL (widget);
+ GtkMenuPrivate *priv = gtk_menu_get_instance_private (menu);
+ GtkWidget *child;
- menu = GTK_MENU (widget);
- menu_shell = GTK_MENU_SHELL (widget);
- priv = menu->priv;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ GList *children;
+ guint max_toggle_size;
+ guint max_accel_width;
+ gint child_min, child_nat;
+ gint min_width, nat_width;
+ GtkBorder padding;
- min_width = nat_width = 0;
+ min_width = nat_width = 0;
- max_toggle_size = 0;
- max_accel_width = 0;
+ max_toggle_size = 0;
+ max_accel_width = 0;
- children = menu_shell->priv->children;
- while (children)
- {
- gint part;
- gint toggle_size;
- gint l, r, t, b;
+ children = menu_shell->priv->children;
+ while (children)
+ {
+ gint part;
+ gint toggle_size;
+ gint l, r, t, b;
- child = children->data;
- children = children->next;
+ child = children->data;
+ children = children->next;
- if (! gtk_widget_get_visible (child))
- continue;
+ if (! gtk_widget_get_visible (child))
+ continue;
- get_effective_child_attach (child, &l, &r, &t, &b);
+ get_effective_child_attach (child, &l, &r, &t, &b);
- /* It's important to size_request the child
- * before doing the toggle size request, in
- * case the toggle size request depends on the size
- * request of a child of the child (e.g. for ImageMenuItem)
- */
- gtk_widget_get_preferred_width (child, &child_min, &child_nat);
+ /* It's important to size_request the child
+ * before doing the toggle size request, in
+ * case the toggle size request depends on the size
+ * request of a child of the child (e.g. for ImageMenuItem)
+ */
+ gtk_widget_get_preferred_width (child, &child_min, &child_nat);
- gtk_menu_item_toggle_size_request (GTK_MENU_ITEM (child), &toggle_size);
- max_toggle_size = MAX (max_toggle_size, toggle_size);
- max_accel_width = MAX (max_accel_width,
- GTK_MENU_ITEM (child)->priv->accelerator_width);
+ gtk_menu_item_toggle_size_request (GTK_MENU_ITEM (child), &toggle_size);
+ max_toggle_size = MAX (max_toggle_size, toggle_size);
+ max_accel_width = MAX (max_accel_width,
+ GTK_MENU_ITEM (child)->priv->accelerator_width);
- part = child_min / (r - l);
- min_width = MAX (min_width, part);
+ part = child_min / (r - l);
+ min_width = MAX (min_width, part);
- part = child_nat / (r - l);
- nat_width = MAX (nat_width, part);
- }
+ part = child_nat / (r - l);
+ nat_width = MAX (nat_width, part);
+ }
- /* If the menu doesn't include any images or check items
- * reserve the space so that all menus are consistent.
- * We only do this for 'ordinary' menus, not for combobox
- * menus or multi-column menus
- */
- if (max_toggle_size == 0 &&
- gtk_menu_get_n_columns (menu) == 1 &&
- !priv->no_toggle_size)
- {
- GtkWidget *menu_item;
- GtkCssGadget *indicator_gadget;
- gint indicator_width;
-
- /* Create a GtkCheckMenuItem, to query indicator size */
- menu_item = gtk_check_menu_item_new ();
- indicator_gadget = _gtk_check_menu_item_get_indicator_gadget
- (GTK_CHECK_MENU_ITEM (menu_item));
-
- gtk_css_gadget_get_preferred_size (indicator_gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- &indicator_width, NULL,
- NULL, NULL);
- max_toggle_size = indicator_width;
-
- gtk_widget_destroy (menu_item);
- }
+ /* If the menu doesn't include any images or check items
+ * reserve the space so that all menus are consistent.
+ * We only do this for 'ordinary' menus, not for combobox
+ * menus or multi-column menus
+ */
+ if (max_toggle_size == 0 &&
+ gtk_menu_get_n_columns (menu) == 1 &&
+ !priv->no_toggle_size)
+ {
+ GtkWidget *menu_item;
+ GtkCssGadget *indicator_gadget;
+ gint indicator_width;
+
+ /* Create a GtkCheckMenuItem, to query indicator size */
+ menu_item = gtk_check_menu_item_new ();
+ indicator_gadget = _gtk_check_menu_item_get_indicator_gadget
+ (GTK_CHECK_MENU_ITEM (menu_item));
+
+ gtk_css_gadget_get_preferred_size (indicator_gadget,
+ GTK_ORIENTATION_HORIZONTAL,
+ -1,
+ &indicator_width, NULL,
+ NULL, NULL);
+ max_toggle_size = indicator_width;
+
+ gtk_widget_destroy (menu_item);
+ }
- min_width += 2 * max_toggle_size + max_accel_width;
- min_width *= gtk_menu_get_n_columns (menu);
+ min_width += 2 * max_toggle_size + max_accel_width;
+ min_width *= gtk_menu_get_n_columns (menu);
- nat_width += 2 * max_toggle_size + max_accel_width;
- nat_width *= gtk_menu_get_n_columns (menu);
+ nat_width += 2 * max_toggle_size + max_accel_width;
+ nat_width *= gtk_menu_get_n_columns (menu);
- get_menu_padding (widget, &padding);
- min_width += padding.left + padding.right;
- nat_width += padding.left + padding.right;
+ get_menu_padding (widget, &padding);
+ min_width += padding.left + padding.right;
+ nat_width += padding.left + padding.right;
- priv->toggle_size = max_toggle_size;
- priv->accel_size = max_accel_width;
+ priv->toggle_size = max_toggle_size;
+ priv->accel_size = max_accel_width;
- *minimum_size = min_width;
- *natural_size = nat_width;
-}
+ *minimum = min_width;
+ *natural = nat_width;
-static void
-gtk_menu_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gint min_width, nat_width;
+ }
+ else /* VERTICAL */
+ {
+ if (for_size < 0)
+ {
+ gint min_width, nat_width;
- /* Menus are height-for-width only, just return the height
- * for the minimum width
- */
- GTK_WIDGET_GET_CLASS (widget)->get_preferred_width (widget, &min_width, &nat_width);
- GTK_WIDGET_GET_CLASS (widget)->get_preferred_height_for_width (widget, min_width, minimum_size, natural_size);
-}
+ /* Menus are height-for-width only, just return the height
+ * for the minimum width
+ */
+ GTK_WIDGET_GET_CLASS (widget)->measure (widget, GTK_ORIENTATION_HORIZONTAL, -1,
+ &min_width, &nat_width, NULL, NULL);
+ GTK_WIDGET_GET_CLASS (widget)->measure (widget, GTK_ORIENTATION_VERTICAL, min_width,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
+ }
+ else
+ {
+ GtkBorder padding, arrow_border;
+ guint *min_heights, *nat_heights;
+ gint n_heights, i;
+ gint min_height, single_height, nat_height;
-static void
-gtk_menu_get_preferred_height_for_width (GtkWidget *widget,
- gint for_size,
- gint *minimum_size,
- gint *natural_size)
-{
- GtkBorder padding, arrow_border;
- GtkMenu *menu = GTK_MENU (widget);
- GtkMenuPrivate *priv = menu->priv;
- guint *min_heights, *nat_heights;
- gint n_heights, i;
- gint min_height, single_height, nat_height;
+ get_menu_padding (widget, &padding);
- get_menu_padding (widget, &padding);
+ min_height = nat_height = padding.top + padding.bottom;
+ single_height = 0;
- min_height = nat_height = padding.top + padding.bottom;
- single_height = 0;
+ n_heights =
+ calculate_line_heights (menu, for_size, &min_heights, &nat_heights);
- n_heights =
- calculate_line_heights (menu, for_size, &min_heights, &nat_heights);
+ for (i = 0; i < n_heights; i++)
+ {
+ min_height += min_heights[i];
+ single_height = MAX (single_height, min_heights[i]);
+ nat_height += nat_heights[i];
+ }
- for (i = 0; i < n_heights; i++)
- {
- min_height += min_heights[i];
- single_height = MAX (single_height, min_heights[i]);
- nat_height += nat_heights[i];
- }
+ get_arrows_border (menu, &arrow_border);
+ single_height += padding.top + padding.bottom
+ + arrow_border.top + arrow_border.bottom;
+ min_height = MIN (min_height, single_height);
- get_arrows_border (menu, &arrow_border);
- single_height += padding.top + padding.bottom
- + arrow_border.top + arrow_border.bottom;
- min_height = MIN (min_height, single_height);
+ if (priv->have_position)
+ {
+ GdkDisplay *display;
+ GdkMonitor *monitor;
+ GdkRectangle workarea;
+ GtkBorder border;
- if (priv->have_position)
- {
- GdkDisplay *display;
- GdkMonitor *monitor;
- GdkRectangle workarea;
- GtkBorder border;
+ display = gtk_widget_get_display (priv->toplevel);
+ monitor = gdk_display_get_monitor (display, priv->monitor_num);
+ gdk_monitor_get_workarea (monitor, &workarea);
- display = gtk_widget_get_display (priv->toplevel);
- monitor = gdk_display_get_monitor (display, priv->monitor_num);
- gdk_monitor_get_workarea (monitor, &workarea);
+ if (priv->position_y + min_height > workarea.y + workarea.height)
+ min_height = workarea.y + workarea.height - priv->position_y;
- if (priv->position_y + min_height > workarea.y + workarea.height)
- min_height = workarea.y + workarea.height - priv->position_y;
+ if (priv->position_y + nat_height > workarea.y + workarea.height)
+ nat_height = workarea.y + workarea.height - priv->position_y;
- if (priv->position_y + nat_height > workarea.y + workarea.height)
- nat_height = workarea.y + workarea.height - priv->position_y;
+ _gtk_window_get_shadow_width (GTK_WINDOW (priv->toplevel), &border);
- _gtk_window_get_shadow_width (GTK_WINDOW (priv->toplevel), &border);
+ if (priv->position_y + border.top < workarea.y)
+ {
+ min_height -= workarea.y - (priv->position_y + border.top);
+ nat_height -= workarea.y - (priv->position_y + border.top);
+ }
+ }
- if (priv->position_y + border.top < workarea.y)
- {
- min_height -= workarea.y - (priv->position_y + border.top);
- nat_height -= workarea.y - (priv->position_y + border.top);
- }
- }
+ *minimum = min_height;
+ *natural = nat_height;
+
+ g_free (min_heights);
+ g_free (nat_heights);
- *minimum_size = min_height;
- *natural_size = nat_height;
- g_free (min_heights);
- g_free (nat_heights);
+ }
+ }
}
static gboolean
diff --git a/gtk/gtkmenubar.c b/gtk/gtkmenubar.c
index bdf2ce0214..c1feaff8a3 100644
--- a/gtk/gtkmenubar.c
+++ b/gtk/gtkmenubar.c
@@ -85,20 +85,13 @@ static void gtk_menu_bar_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
static void gtk_menu_bar_finalize (GObject *object);
-static void gtk_menu_bar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_menu_bar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_menu_bar_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural);
-static void gtk_menu_bar_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural);
+static void gtk_menu_bar_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_menu_bar_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gint gtk_menu_bar_draw (GtkWidget *widget,
@@ -149,10 +142,7 @@ gtk_menu_bar_class_init (GtkMenuBarClass *class)
gobject_class->set_property = gtk_menu_bar_set_property;
gobject_class->finalize = gtk_menu_bar_finalize;
- widget_class->get_preferred_width = gtk_menu_bar_get_preferred_width;
- widget_class->get_preferred_height = gtk_menu_bar_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_menu_bar_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_menu_bar_get_preferred_height_for_width;
+ widget_class->measure = gtk_menu_bar_measure_;
widget_class->size_allocate = gtk_menu_bar_size_allocate;
widget_class->draw = gtk_menu_bar_draw;
widget_class->hierarchy_changed = gtk_menu_bar_hierarchy_changed;
@@ -374,7 +364,11 @@ gtk_menu_bar_measure (GtkCssGadget *gadget,
if (gtk_widget_get_visible (child))
{
- _gtk_widget_get_preferred_size_for_size (child, orientation, size, &child_minimum, &child_natural, NULL, NULL);
+ gtk_widget_measure (child,
+ orientation,
+ size,
+ &child_minimum, &child_natural,
+ NULL, NULL);
if (use_toggle_size)
{
@@ -402,53 +396,19 @@ gtk_menu_bar_measure (GtkCssGadget *gadget,
}
static void
-gtk_menu_bar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_MENU_BAR (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_menu_bar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_MENU_BAR (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_menu_bar_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_MENU_BAR (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_menu_bar_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
+gtk_menu_bar_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_MENU_BAR (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
index b989d32d5d..9330a441e1 100644
--- a/gtk/gtkmenuitem.c
+++ b/gtk/gtkmenuitem.c
@@ -560,41 +560,22 @@ gtk_menu_item_measure (GtkCssGadget *gadget,
}
static void
-gtk_menu_item_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
+gtk_menu_item_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_MENU_ITEM (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
-static void
-gtk_menu_item_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_MENU_ITEM (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-static void
-gtk_menu_item_get_preferred_height_for_width (GtkWidget *widget,
- gint for_size,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_MENU_ITEM (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- for_size,
- minimum_size, natural_size,
- NULL, NULL);
-}
static void
gtk_menu_item_class_init (GtkMenuItemClass *klass)
@@ -620,9 +601,7 @@ gtk_menu_item_class_init (GtkMenuItemClass *klass)
widget_class->mnemonic_activate = gtk_menu_item_mnemonic_activate;
widget_class->parent_set = gtk_menu_item_parent_set;
widget_class->can_activate_accel = gtk_menu_item_can_activate_accel;
- widget_class->get_preferred_width = gtk_menu_item_get_preferred_width;
- widget_class->get_preferred_height = gtk_menu_item_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_menu_item_get_preferred_height_for_width;
+ widget_class->measure = gtk_menu_item_measure_;
widget_class->direction_changed = gtk_menu_item_direction_changed;
container_class->forall = gtk_menu_item_forall;
diff --git a/gtk/gtkmodelbutton.c b/gtk/gtkmodelbutton.c
index 9fe21e779e..9cc190a613 100644
--- a/gtk/gtkmodelbutton.c
+++ b/gtk/gtkmodelbutton.c
@@ -632,10 +632,13 @@ needs_indicator (GtkModelButton *button)
}
static void
-gtk_model_button_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
+gtk_model_button_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkCssGadget *gadget;
@@ -645,93 +648,13 @@ gtk_model_button_get_preferred_width_for_height (GtkWidget *widget,
gadget = GTK_MODEL_BUTTON (widget)->gadget;
gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_model_button_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkCssGadget *gadget;
-
- if (GTK_MODEL_BUTTON (widget)->iconic)
- gadget = GTK_BUTTON (widget)->priv->gadget;
- else
- gadget = GTK_MODEL_BUTTON (widget)->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_model_button_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
-{
- GtkCssGadget *gadget;
-
- if (GTK_MODEL_BUTTON (widget)->iconic)
- gadget = GTK_BUTTON (widget)->priv->gadget;
- else
- gadget = GTK_MODEL_BUTTON (widget)->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
static void
-gtk_model_button_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- GtkCssGadget *gadget;
-
- if (GTK_MODEL_BUTTON (widget)->iconic)
- gadget = GTK_BUTTON (widget)->priv->gadget;
- else
- gadget = GTK_MODEL_BUTTON (widget)->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_model_button_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkCssGadget *gadget;
-
- if (GTK_MODEL_BUTTON (widget)->iconic)
- gadget = GTK_BUTTON (widget)->priv->gadget;
- else
- gadget = GTK_MODEL_BUTTON (widget)->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
gtk_model_button_measure (GtkCssGadget *gadget,
GtkOrientation orientation,
int for_size,
@@ -761,11 +684,11 @@ gtk_model_button_measure (GtkCssGadget *gadget,
if (child && gtk_widget_get_visible (child))
{
- _gtk_widget_get_preferred_size_for_size (child,
- GTK_ORIENTATION_HORIZONTAL,
- for_size,
- minimum, natural,
- minimum_baseline, natural_baseline);
+ gtk_widget_measure (child,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
else
{
@@ -1073,11 +996,7 @@ gtk_model_button_class_init (GtkModelButtonClass *class)
object_class->get_property = gtk_model_button_get_property;
object_class->set_property = gtk_model_button_set_property;
- widget_class->get_preferred_width = gtk_model_button_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_model_button_get_preferred_width_for_height;
- widget_class->get_preferred_height = gtk_model_button_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_model_button_get_preferred_height_for_width;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_model_button_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_model_button_measure_;
widget_class->size_allocate = gtk_model_button_size_allocate;
widget_class->draw = gtk_model_button_draw;
widget_class->destroy = gtk_model_button_destroy;
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index c7755db770..9e768b10b8 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -361,22 +361,13 @@ static void gtk_notebook_map (GtkWidget *widget);
static void gtk_notebook_unmap (GtkWidget *widget);
static void gtk_notebook_realize (GtkWidget *widget);
static void gtk_notebook_unrealize (GtkWidget *widget);
-static void gtk_notebook_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_notebook_get_preferred_height(GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_notebook_get_preferred_width_for_height
- (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural);
-static void gtk_notebook_get_preferred_height_for_width
- (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural);
+static void gtk_notebook_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_notebook_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_notebook_draw (GtkWidget *widget,
@@ -711,10 +702,7 @@ gtk_notebook_class_init (GtkNotebookClass *class)
widget_class->unmap = gtk_notebook_unmap;
widget_class->realize = gtk_notebook_realize;
widget_class->unrealize = gtk_notebook_unrealize;
- widget_class->get_preferred_width = gtk_notebook_get_preferred_width;
- widget_class->get_preferred_height = gtk_notebook_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_notebook_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_notebook_get_preferred_height_for_width;
+ widget_class->measure = gtk_notebook_measure;
widget_class->size_allocate = gtk_notebook_size_allocate;
widget_class->draw = gtk_notebook_draw;
widget_class->button_press_event = gtk_notebook_button_press;
@@ -2254,64 +2242,34 @@ gtk_notebook_measure_stack (GtkCssGadget *gadget,
if (gtk_widget_get_visible (page->child))
{
- _gtk_widget_get_preferred_size_for_size (page->child,
- orientation,
- size,
- &child_minimum,
- &child_natural,
- NULL,
- NULL);
+ gtk_widget_measure (page->child,
+ orientation,
+ size,
+ &child_minimum, &child_natural,
+ NULL, NULL);
*minimum = MAX (*minimum, child_minimum);
*natural = MAX (*natural, child_natural);
}
}
}
-
-static void
-gtk_notebook_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- GtkNotebook *notebook = GTK_NOTEBOOK (widget);
- GtkNotebookPrivate *priv = notebook->priv;
-
- gtk_css_gadget_get_preferred_size (priv->gadget, GTK_ORIENTATION_HORIZONTAL, height, minimum, natural, NULL, NULL);
-}
-
-static void
-gtk_notebook_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- GtkNotebook *notebook = GTK_NOTEBOOK (widget);
- GtkNotebookPrivate *priv = notebook->priv;
-
- gtk_css_gadget_get_preferred_size (priv->gadget, GTK_ORIENTATION_VERTICAL, width, minimum, natural, NULL, NULL);
-}
-
-static void
-gtk_notebook_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkNotebook *notebook = GTK_NOTEBOOK (widget);
- GtkNotebookPrivate *priv = notebook->priv;
-
- gtk_css_gadget_get_preferred_size (priv->gadget, GTK_ORIENTATION_HORIZONTAL, -1, minimum, natural, NULL, NULL);
-}
-
static void
-gtk_notebook_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_notebook_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
GtkNotebookPrivate *priv = notebook->priv;
- gtk_css_gadget_get_preferred_size (priv->gadget, GTK_ORIENTATION_VERTICAL, -1, minimum, natural, NULL, NULL);
+ gtk_css_gadget_get_preferred_size (priv->gadget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
static void
@@ -4530,11 +4488,11 @@ measure_tab (GtkCssGadget *gadget,
{
GtkNotebookPage *page = data;
- _gtk_widget_get_preferred_size_for_size (page->tab_label,
- orientation,
- for_size,
- minimum, natural,
- minimum_baseline, natural_baseline);
+ gtk_widget_measure (page->tab_label,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
static void
diff --git a/gtk/gtkoffscreenwindow.c b/gtk/gtkoffscreenwindow.c
index 367927ff77..1c6204c27f 100644
--- a/gtk/gtkoffscreenwindow.c
+++ b/gtk/gtkoffscreenwindow.c
@@ -50,65 +50,37 @@
G_DEFINE_TYPE (GtkOffscreenWindow, gtk_offscreen_window, GTK_TYPE_WINDOW);
static void
-gtk_offscreen_window_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_offscreen_window_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkBin *bin = GTK_BIN (widget);
- GtkWidget *child;
- gint default_width;
+ GtkWidget *child = gtk_bin_get_child (bin);
+ int default_size;
*minimum = 0;
*natural = 0;
- child = gtk_bin_get_child (bin);
-
if (child != NULL && gtk_widget_get_visible (child))
{
- gint child_min, child_nat;
-
- gtk_widget_get_preferred_width (child, &child_min, &child_nat);
-
- *minimum += child_min;
- *natural += child_nat;
- }
-
- gtk_window_get_default_size (GTK_WINDOW (widget),
- &default_width, NULL);
-
- *minimum = MAX (*minimum, default_width);
- *natural = MAX (*natural, default_width);
-}
-
-static void
-gtk_offscreen_window_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkBin *bin = GTK_BIN (widget);
- GtkWidget *child;
- gint default_height;
-
- *minimum = 0;
- *natural = 0;
-
- child = gtk_bin_get_child (bin);
-
- if (child != NULL && gtk_widget_get_visible (child))
- {
- gint child_min, child_nat;
-
- gtk_widget_get_preferred_height (child, &child_min, &child_nat);
+ int child_min, child_nat;
+ gtk_widget_measure (child, orientation, for_size, &child_min, &child_nat, NULL, NULL);
*minimum += child_min;
*natural += child_nat;
}
- gtk_window_get_default_size (GTK_WINDOW (widget),
- NULL, &default_height);
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ gtk_window_get_default_size (GTK_WINDOW (widget), &default_size, NULL);
+ else
+ gtk_window_get_default_size (GTK_WINDOW (widget), NULL, &default_size);
- *minimum = MAX (*minimum, default_height);
- *natural = MAX (*natural, default_height);
+ *minimum = MAX (*minimum, default_size);
+ *natural = MAX (*natural, default_size);
}
static void
@@ -250,8 +222,7 @@ gtk_offscreen_window_class_init (GtkOffscreenWindowClass *class)
widget_class->realize = gtk_offscreen_window_realize;
widget_class->show = gtk_offscreen_window_show;
widget_class->hide = gtk_offscreen_window_hide;
- widget_class->get_preferred_width = gtk_offscreen_window_get_preferred_width;
- widget_class->get_preferred_height = gtk_offscreen_window_get_preferred_height;
+ widget_class->measure = gtk_offscreen_window_measure;
widget_class->size_allocate = gtk_offscreen_window_size_allocate;
container_class->check_resize = gtk_offscreen_window_check_resize;
diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c
index 5ecc415a02..088b6c7f9c 100644
--- a/gtk/gtkpaned.c
+++ b/gtk/gtkpaned.c
@@ -205,24 +205,13 @@ static void gtk_paned_get_child_property (GtkContainer *container,
GValue *value,
GParamSpec *pspec);
static void gtk_paned_finalize (GObject *object);
-
-static void gtk_paned_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_paned_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_paned_get_preferred_width_for_height
- (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural);
-static void gtk_paned_get_preferred_height_for_width
- (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural);
-
+static void gtk_paned_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_paned_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_paned_realize (GtkWidget *widget);
@@ -326,10 +315,7 @@ gtk_paned_class_init (GtkPanedClass *class)
object_class->get_property = gtk_paned_get_property;
object_class->finalize = gtk_paned_finalize;
- widget_class->get_preferred_width = gtk_paned_get_preferred_width;
- widget_class->get_preferred_height = gtk_paned_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_paned_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_paned_get_preferred_height_for_width;
+ widget_class->measure = gtk_paned_measure_;
widget_class->size_allocate = gtk_paned_size_allocate;
widget_class->realize = gtk_paned_realize;
widget_class->unrealize = gtk_paned_unrealize;
@@ -1056,7 +1042,7 @@ gtk_paned_get_preferred_size_for_orientation (GtkWidget *widget,
if (priv->child1 && gtk_widget_get_visible (priv->child1))
{
- _gtk_widget_get_preferred_size_for_size (priv->child1, priv->orientation, size, &child_min, &child_nat, NULL, NULL);
+ gtk_widget_measure (priv->child1, priv->orientation, size, &child_min, &child_nat, NULL, NULL);
if (priv->child1_shrink)
*minimum = 0;
else
@@ -1066,7 +1052,7 @@ gtk_paned_get_preferred_size_for_orientation (GtkWidget *widget,
if (priv->child2 && gtk_widget_get_visible (priv->child2))
{
- _gtk_widget_get_preferred_size_for_size (priv->child2, priv->orientation, size, &child_min, &child_nat, NULL, NULL);
+ gtk_widget_measure (priv->child2, priv->orientation, size, &child_min, &child_nat, NULL, NULL);
if (!priv->child2_shrink)
*minimum += child_min;
@@ -1113,8 +1099,8 @@ gtk_paned_get_preferred_size_for_opposite_orientation (GtkWidget *widget,
NULL, &handle_size,
NULL, NULL);
- _gtk_widget_get_preferred_size_for_size (priv->child1, priv->orientation, -1, &child1_req, NULL, NULL, NULL);
- _gtk_widget_get_preferred_size_for_size (priv->child2, priv->orientation, -1, &child2_req, NULL, NULL, NULL);
+ gtk_widget_measure (priv->child1, priv->orientation, -1, &child1_req, NULL, NULL, NULL);
+ gtk_widget_measure (priv->child2, priv->orientation, -1, &child2_req, NULL, NULL, NULL);
gtk_paned_compute_position (paned,
size - handle_size, child1_req, child2_req,
@@ -1132,23 +1118,23 @@ gtk_paned_get_preferred_size_for_opposite_orientation (GtkWidget *widget,
if (priv->child1 && gtk_widget_get_visible (priv->child1))
{
- _gtk_widget_get_preferred_size_for_size (priv->child1,
- OPPOSITE_ORIENTATION (priv->orientation),
- for_child1,
- &child_min, &child_nat,
- NULL, NULL);
-
+ gtk_widget_measure (priv->child1,
+ OPPOSITE_ORIENTATION (priv->orientation),
+ for_child1,
+ &child_min, &child_nat,
+ NULL, NULL);
+
*minimum = child_min;
*natural = child_nat;
}
if (priv->child2 && gtk_widget_get_visible (priv->child2))
{
- _gtk_widget_get_preferred_size_for_size (priv->child2,
- OPPOSITE_ORIENTATION (priv->orientation),
- for_child2,
- &child_min, &child_nat,
- NULL, NULL);
+ gtk_widget_measure (priv->child2,
+ OPPOSITE_ORIENTATION (priv->orientation),
+ for_child2,
+ &child_min, &child_nat,
+ NULL, NULL);
*minimum = MAX (*minimum, child_min);
*natural = MAX (*natural, child_nat);
@@ -1176,53 +1162,19 @@ gtk_paned_measure (GtkCssGadget *gadget,
}
static void
-gtk_paned_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_PANED (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_paned_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_PANED (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_paned_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_PANED (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_paned_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
+gtk_paned_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_PANED (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c
index e8a90bf477..7ad0c831cc 100644
--- a/gtk/gtkpathbar.c
+++ b/gtk/gtkpathbar.c
@@ -117,12 +117,13 @@ static void gtk_path_bar_finalize (GObject *object);
static void gtk_path_bar_dispose (GObject *object);
static void gtk_path_bar_realize (GtkWidget *widget);
static void gtk_path_bar_unrealize (GtkWidget *widget);
-static void gtk_path_bar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_path_bar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_path_bar_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_path_bar_map (GtkWidget *widget);
static void gtk_path_bar_unmap (GtkWidget *widget);
static void gtk_path_bar_size_allocate (GtkWidget *widget,
@@ -221,8 +222,7 @@ gtk_path_bar_class_init (GtkPathBarClass *path_bar_class)
gobject_class->finalize = gtk_path_bar_finalize;
gobject_class->dispose = gtk_path_bar_dispose;
- widget_class->get_preferred_width = gtk_path_bar_get_preferred_width;
- widget_class->get_preferred_height = gtk_path_bar_get_preferred_height;
+ widget_class->measure = gtk_path_bar_measure;
widget_class->realize = gtk_path_bar_realize;
widget_class->unrealize = gtk_path_bar_unrealize;
widget_class->map = gtk_path_bar_map;
@@ -328,94 +328,89 @@ gtk_path_bar_dispose (GObject *object)
* Ideally, our size is determined by another widget, and we are just filling
* available space.
*/
+
static void
-gtk_path_bar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_path_bar_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
+ GtkPathBar *path_bar = GTK_PATH_BAR (widget);
ButtonData *button_data;
- GtkPathBar *path_bar;
GList *list;
- gint child_height;
- gint height;
- gint child_min, child_nat;
+ int child_size;
+ int size = 0;
+ int child_min, child_nat;
- path_bar = GTK_PATH_BAR (widget);
+ *minimum = 0;
+ *natural = 0;
- *minimum = *natural = 0;
- height = 0;
- for (list = path_bar->priv->button_list; list; list = list->next)
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
- button_data = BUTTON_DATA (list->data);
- gtk_widget_get_preferred_width (button_data->button, &child_min, &child_nat);
- gtk_widget_get_preferred_height (button_data->button, &child_height, NULL);
- height = MAX (height, child_height);
-
- if (button_data->type == NORMAL_BUTTON)
+ for (list = path_bar->priv->button_list; list; list = list->next)
{
- /* Use 2*Height as button width because of ellipsized label. */
- child_min = MAX (child_min, child_height * 2);
- child_nat = MAX (child_min, child_height * 2);
+ button_data = BUTTON_DATA (list->data);
+ gtk_widget_get_preferred_width (button_data->button, &child_min, &child_nat);
+ gtk_widget_get_preferred_height (button_data->button, &child_size, NULL);
+ size = MAX (size, child_size);
+
+ if (button_data->type == NORMAL_BUTTON)
+ {
+ /* Use 2*Height as button width because of ellipsized label. */
+ child_min = MAX (child_min, child_size * 2);
+ child_nat = MAX (child_min, child_size * 2);
+ }
+
+ *minimum = MAX (*minimum, child_min);
+ *natural = *natural + child_nat;
}
- *minimum = MAX (*minimum, child_min);
- *natural = *natural + child_nat;
- }
+ /* Add space for slider, if we have more than one path */
+ /* Theoretically, the slider could be bigger than the other button. But we're
+ * not going to worry about that now.
+ */
+ path_bar->priv->slider_width = 0;
- /* Add space for slider, if we have more than one path */
- /* Theoretically, the slider could be bigger than the other button. But we're
- * not going to worry about that now.
- */
- path_bar->priv->slider_width = 0;
+ gtk_widget_get_preferred_width (path_bar->priv->up_slider_button, &child_min, &child_nat);
+ if (path_bar->priv->button_list && path_bar->priv->button_list->next != NULL)
+ {
+ *minimum += child_min;
+ *natural += child_nat;
+ }
+ path_bar->priv->slider_width = MAX (path_bar->priv->slider_width, child_min);
- gtk_widget_get_preferred_width (path_bar->priv->up_slider_button, &child_min, &child_nat);
- if (path_bar->priv->button_list && path_bar->priv->button_list->next != NULL)
- {
- *minimum += child_min;
- *natural += child_nat;
- }
- path_bar->priv->slider_width = MAX (path_bar->priv->slider_width, child_min);
+ gtk_widget_get_preferred_width (path_bar->priv->down_slider_button, &child_min, &child_nat);
+ if (path_bar->priv->button_list && path_bar->priv->button_list->next != NULL)
+ {
+ *minimum += child_min;
+ *natural += child_nat;
+ }
+ path_bar->priv->slider_width = MAX (path_bar->priv->slider_width, child_min);
- gtk_widget_get_preferred_width (path_bar->priv->down_slider_button, &child_min, &child_nat);
- if (path_bar->priv->button_list && path_bar->priv->button_list->next != NULL)
- {
- *minimum += child_min;
- *natural += child_nat;
}
- path_bar->priv->slider_width = MAX (path_bar->priv->slider_width, child_min);
-}
-
-static void
-gtk_path_bar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- ButtonData *button_data;
- GtkPathBar *path_bar;
- GList *list;
- gint child_min, child_nat;
-
- path_bar = GTK_PATH_BAR (widget);
+ else /* VERTICAL */
+ {
+ for (list = path_bar->priv->button_list; list; list = list->next)
+ {
+ button_data = BUTTON_DATA (list->data);
+ gtk_widget_get_preferred_height (button_data->button, &child_min, &child_nat);
- *minimum = *natural = 0;
+ *minimum = MAX (*minimum, child_min);
+ *natural = MAX (*natural, child_nat);
+ }
- for (list = path_bar->priv->button_list; list; list = list->next)
- {
- button_data = BUTTON_DATA (list->data);
- gtk_widget_get_preferred_height (button_data->button, &child_min, &child_nat);
+ gtk_widget_get_preferred_height (path_bar->priv->up_slider_button, &child_min, &child_nat);
+ *minimum = MAX (*minimum, child_min);
+ *natural = MAX (*natural, child_nat);
+ gtk_widget_get_preferred_height (path_bar->priv->down_slider_button, &child_min, &child_nat);
*minimum = MAX (*minimum, child_min);
*natural = MAX (*natural, child_nat);
}
-
- gtk_widget_get_preferred_height (path_bar->priv->up_slider_button, &child_min, &child_nat);
- *minimum = MAX (*minimum, child_min);
- *natural = MAX (*natural, child_nat);
-
- gtk_widget_get_preferred_height (path_bar->priv->down_slider_button, &child_min, &child_nat);
- *minimum = MAX (*minimum, child_min);
- *natural = MAX (*natural, child_nat);
}
static void
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 97df45bb61..743f8a21de 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -1241,145 +1241,69 @@ get_minimal_size (GtkPopover *popover,
}
static void
-gtk_popover_get_preferred_width (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width)
+gtk_popover_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkPopover *popover = GTK_POPOVER (widget);
- GtkWidget *child;
- gint min, nat, extra, minimal_size;
- GtkBorder border, margin;
-
- child = gtk_bin_get_child (GTK_BIN (widget));
- min = nat = 0;
-
- if (child)
- gtk_widget_get_preferred_width (child, &min, &nat);
-
- get_padding_and_border (widget, &border);
- get_margin (widget, &margin);
- minimal_size = get_minimal_size (popover, GTK_ORIENTATION_HORIZONTAL);
-
- min = MAX (min, minimal_size) + border.left + border.right;
- nat = MAX (nat, minimal_size) + border.left + border.right;
- extra = MAX (TAIL_HEIGHT, margin.left) + MAX (TAIL_HEIGHT, margin.right);
-
- min += extra;
- nat += extra;
-
- *minimum_width = min;
- *natural_width = nat;
-}
-
-static void
-gtk_popover_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width)
-{
- GtkPopover *popover = GTK_POPOVER (widget);
- GtkWidget *child;
- GdkRectangle child_rect;
- gint min, nat, extra, minimal_size;
- gint child_height;
+ GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
GtkBorder border, margin;
-
- child = gtk_bin_get_child (GTK_BIN (widget));
- min = nat = 0;
-
- gtk_popover_get_rect_for_size (popover, 0, height, &child_rect);
- child_height = child_rect.height;
-
+ int minimal_size, extra;
get_padding_and_border (widget, &border);
get_margin (widget, &margin);
- child_height -= border.top + border.bottom;
- minimal_size = get_minimal_size (popover, GTK_ORIENTATION_HORIZONTAL);
-
- if (child)
- gtk_widget_get_preferred_width_for_height (child, child_height, &min, &nat);
-
- min = MAX (min, minimal_size) + border.left + border.right;
- nat = MAX (nat, minimal_size) + border.left + border.right;
- extra = MAX (TAIL_HEIGHT, margin.left) + MAX (TAIL_HEIGHT, margin.right);
-
- min += extra;
- nat += extra;
-
- *minimum_width = min;
- *natural_width = nat;
-}
-static void
-gtk_popover_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height)
-{
- GtkPopover *popover = GTK_POPOVER (widget);
- GtkWidget *child;
- gint min, nat, extra, minimal_size;
- GtkBorder border, margin;
-
- child = gtk_bin_get_child (GTK_BIN (widget));
- min = nat = 0;
+ *minimum = 0;
+ *natural = 0;
- if (child)
- gtk_widget_get_preferred_height (child, &min, &nat);
-
- get_padding_and_border (widget, &border);
- get_margin (widget, &margin);
- minimal_size = get_minimal_size (popover, GTK_ORIENTATION_VERTICAL);
-
- min = MAX (min, minimal_size) + border.top + border.bottom;
- nat = MAX (nat, minimal_size) + border.top + border.bottom;
- extra = MAX (TAIL_HEIGHT, margin.top) + MAX (TAIL_HEIGHT, margin.bottom);
-
- min += extra;
- nat += extra;
-
- *minimum_height = min;
- *natural_height = nat;
-}
-
-static void
-gtk_popover_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height)
-{
- GtkPopover *popover = GTK_POPOVER (widget);
- GtkWidget *child;
- GdkRectangle child_rect;
- gint min, nat, extra, minimal_size;
- gint child_width;
- GtkBorder border, margin;
-
- child = gtk_bin_get_child (GTK_BIN (widget));
- min = nat = 0;
-
- get_padding_and_border (widget, &border);
- get_margin (widget, &margin);
+ if (child != NULL)
+ {
+ if (for_size >= 0)
+ {
+ int child_size;
+ GdkRectangle child_rect;
- gtk_popover_get_rect_for_size (popover, width, 0, &child_rect);
- child_width = child_rect.width;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ gtk_popover_get_rect_for_size (popover, for_size, 0, &child_rect);
+ child_size = child_rect.width;
+ }
+ else
+ {
+ gtk_popover_get_rect_for_size (popover, 0, for_size, &child_rect);
+ child_size = child_rect.height;
+ }
- child_width -= border.left + border.right;
- minimal_size = get_minimal_size (popover, GTK_ORIENTATION_VERTICAL);
- if (child)
- gtk_widget_get_preferred_height_for_width (child, child_width, &min, &nat);
+ gtk_widget_measure (child, orientation, child_size, minimum, natural, NULL, NULL);
- min = MAX (min, minimal_size) + border.top + border.bottom;
- nat = MAX (nat, minimal_size) + border.top + border.bottom;
- extra = MAX (TAIL_HEIGHT, margin.top) + MAX (TAIL_HEIGHT, margin.bottom);
+ }
+ else
+ {
+ gtk_widget_measure (child, orientation, -1, minimum, natural, NULL, NULL);
+ }
+ }
- min += extra;
- nat += extra;
+ minimal_size = get_minimal_size (popover, orientation);
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ *minimum = MAX (*minimum, minimal_size) + border.left + border.right;
+ *natural = MAX (*natural, minimal_size) + border.left + border.right;
+ extra = MAX (TAIL_HEIGHT, margin.left) + MAX (TAIL_HEIGHT, margin.right);
+ }
+ else
+ {
+ *minimum = MAX (*minimum, minimal_size) + border.top + border.bottom;
+ *natural = MAX (*natural, minimal_size) + border.top + border.bottom;
+ extra = MAX (TAIL_HEIGHT, margin.bottom) + MAX (TAIL_HEIGHT, margin.top);
- if (minimum_height)
- *minimum_height = min;
+ }
- if (natural_height)
- *natural_height = nat;
+ *minimum += extra;
+ *natural += extra;
}
static void
@@ -1635,10 +1559,7 @@ gtk_popover_class_init (GtkPopoverClass *klass)
widget_class->realize = gtk_popover_realize;
widget_class->map = gtk_popover_map;
widget_class->unmap = gtk_popover_unmap;
- widget_class->get_preferred_width = gtk_popover_get_preferred_width;
- widget_class->get_preferred_height = gtk_popover_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_popover_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_popover_get_preferred_height_for_width;
+ widget_class->measure = gtk_popover_measure;
widget_class->size_allocate = gtk_popover_size_allocate;
widget_class->draw = gtk_popover_draw;
widget_class->button_press_event = gtk_popover_button_press;
diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c
index 7056a31550..d42f7f48e1 100644
--- a/gtk/gtkprogressbar.c
+++ b/gtk/gtkprogressbar.c
@@ -150,12 +150,6 @@ static void gtk_progress_bar_get_property (GObject *object,
GParamSpec *pspec);
static void gtk_progress_bar_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
-static void gtk_progress_bar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_progress_bar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
static gboolean gtk_progress_bar_draw (GtkWidget *widget,
cairo_t *cr);
@@ -169,6 +163,13 @@ static void gtk_progress_bar_direction_changed (GtkWidget *widget,
static void gtk_progress_bar_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_state);
+static void gtk_progress_bar_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ gint for_size,
+ gint *minimum,
+ gint *natural,
+ gint *minimum_baseline,
+ gint *natural_baseline);
static void gtk_progress_bar_measure (GtkCssGadget *gadget,
GtkOrientation orientation,
gint for_size,
@@ -236,8 +237,7 @@ gtk_progress_bar_class_init (GtkProgressBarClass *class)
widget_class->draw = gtk_progress_bar_draw;
widget_class->size_allocate = gtk_progress_bar_size_allocate;
- widget_class->get_preferred_width = gtk_progress_bar_get_preferred_width;
- widget_class->get_preferred_height = gtk_progress_bar_get_preferred_height;
+ widget_class->measure = gtk_progress_bar_measure_;
widget_class->direction_changed = gtk_progress_bar_direction_changed;
widget_class->state_flags_changed = gtk_progress_bar_state_flags_changed;
@@ -914,28 +914,21 @@ gtk_progress_bar_allocate_trough (GtkCssGadget *gadget,
gtk_css_gadget_allocate (priv->progress_gadget, &alloc, -1, out_clip);
}
-static void
-gtk_progress_bar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_PROGRESS_BAR (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
static void
-gtk_progress_bar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_progress_bar_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_PROGRESS_BAR (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static gboolean
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 6a7394bf3f..6c881afa71 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -177,14 +177,13 @@ static void gtk_range_get_property (GObject *object,
GParamSpec *pspec);
static void gtk_range_finalize (GObject *object);
static void gtk_range_destroy (GtkWidget *widget);
-static void gtk_range_get_preferred_width
- (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_range_get_preferred_height
- (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_range_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_range_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_range_realize (GtkWidget *widget);
@@ -323,8 +322,7 @@ gtk_range_class_init (GtkRangeClass *class)
gobject_class->finalize = gtk_range_finalize;
widget_class->destroy = gtk_range_destroy;
- widget_class->get_preferred_width = gtk_range_get_preferred_width;
- widget_class->get_preferred_height = gtk_range_get_preferred_height;
+ widget_class->measure = gtk_range_measure_;
widget_class->size_allocate = gtk_range_size_allocate;
widget_class->realize = gtk_range_realize;
widget_class->unrealize = gtk_range_unrealize;
@@ -1677,11 +1675,13 @@ gtk_range_measure (GtkCssGadget *gadget,
}
}
-static void
-gtk_range_size_request (GtkWidget *widget,
- GtkOrientation orientation,
- gint *minimum,
- gint *natural)
+static void gtk_range_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkRange *range = GTK_RANGE (widget);
GtkRangePrivate *priv = range->priv;
@@ -1703,24 +1703,6 @@ gtk_range_size_request (GtkWidget *widget,
}
static void
-gtk_range_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_range_size_request (widget, GTK_ORIENTATION_HORIZONTAL,
- minimum, natural);
-}
-
-static void
-gtk_range_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_range_size_request (widget, GTK_ORIENTATION_VERTICAL,
- minimum, natural);
-}
-
-static void
gtk_range_allocate_trough (GtkCssGadget *gadget,
const GtkAllocation *allocation,
int baseline,
diff --git a/gtk/gtkrevealer.c b/gtk/gtkrevealer.c
index 2b5461387d..857cd7a78e 100644
--- a/gtk/gtkrevealer.c
+++ b/gtk/gtkrevealer.c
@@ -102,20 +102,13 @@ static void gtk_revealer_real_map (GtkWidget
static void gtk_revealer_real_unmap (GtkWidget *widget);
static gboolean gtk_revealer_real_draw (GtkWidget *widget,
cairo_t *cr);
-static void gtk_revealer_real_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_revealer_real_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_revealer_real_get_preferred_width (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width);
-static void gtk_revealer_real_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width);
+static void gtk_revealer_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
G_DEFINE_TYPE_WITH_PRIVATE (GtkRevealer, gtk_revealer, GTK_TYPE_BIN)
@@ -228,10 +221,7 @@ gtk_revealer_class_init (GtkRevealerClass *klass)
widget_class->map = gtk_revealer_real_map;
widget_class->unmap = gtk_revealer_real_unmap;
widget_class->draw = gtk_revealer_real_draw;
- widget_class->get_preferred_height = gtk_revealer_real_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_revealer_real_get_preferred_height_for_width;
- widget_class->get_preferred_width = gtk_revealer_real_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_revealer_real_get_preferred_width_for_height;
+ widget_class->measure = gtk_revealer_measure;
container_class->add = gtk_revealer_real_add;
@@ -783,37 +773,6 @@ set_height_with_paddings (GtkRevealer *revealer,
}
static void
-gtk_revealer_real_get_preferred_height (GtkWidget *widget,
- gint *minimum_height_out,
- gint *natural_height_out)
-{
- GtkRevealer *revealer = GTK_REVEALER (widget);
- gint minimum_height;
- gint natural_height;
-
- GTK_WIDGET_CLASS (gtk_revealer_parent_class)->get_preferred_height (widget, &minimum_height, &natural_height);
-
- set_height_with_paddings (revealer, minimum_height, natural_height,
- minimum_height_out, natural_height_out);
-}
-
-static void
-gtk_revealer_real_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height_out,
- gint *natural_height_out)
-{
- GtkRevealer *revealer = GTK_REVEALER (widget);
- gint minimum_height;
- gint natural_height;
-
- GTK_WIDGET_CLASS (gtk_revealer_parent_class)->get_preferred_height_for_width (widget, width, &minimum_height, &natural_height);
-
- set_height_with_paddings (revealer, minimum_height, natural_height,
- minimum_height_out, natural_height_out);
-}
-
-static void
set_width_with_paddings (GtkRevealer *revealer,
gint preferred_minimum_width,
gint preferred_natural_width,
@@ -847,33 +806,24 @@ set_width_with_paddings (GtkRevealer *revealer,
}
static void
-gtk_revealer_real_get_preferred_width (GtkWidget *widget,
- gint *minimum_width_out,
- gint *natural_width_out)
-{
- GtkRevealer *revealer = GTK_REVEALER (widget);
- gint minimum_width;
- gint natural_width;
-
- GTK_WIDGET_CLASS (gtk_revealer_parent_class)->get_preferred_width (widget, &minimum_width, &natural_width);
- set_width_with_paddings (revealer, minimum_width, natural_width,
- minimum_width_out, natural_width_out);
-}
-
-static void
-gtk_revealer_real_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width_out,
- gint *natural_width_out)
-{
- GtkRevealer *revealer = GTK_REVEALER (widget);
- gint minimum_width;
- gint natural_width;
-
- GTK_WIDGET_CLASS (gtk_revealer_parent_class)->get_preferred_width_for_height (widget, height, &minimum_width, &natural_width);
-
- set_width_with_paddings (revealer, minimum_width, natural_width,
- minimum_width_out, natural_width_out);
+gtk_revealer_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
+{
+ int min_size, nat_size;
+ GTK_WIDGET_CLASS (gtk_revealer_parent_class)->measure (widget,
+ orientation,
+ for_size,
+ &min_size, &nat_size,
+ NULL, NULL);
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ set_width_with_paddings (GTK_REVEALER (widget), min_size, nat_size, minimum, natural);
+ else
+ set_height_with_paddings (GTK_REVEALER (widget), min_size, nat_size, minimum, natural);
}
/**
diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c
index 2ca27647c6..f621ab40e1 100644
--- a/gtk/gtkscale.c
+++ b/gtk/gtkscale.c
@@ -190,12 +190,13 @@ static void gtk_scale_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
-static void gtk_scale_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_scale_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_scale_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_scale_get_range_border (GtkRange *range,
GtkBorder *border);
static void gtk_scale_get_range_size_request (GtkRange *range,
@@ -718,8 +719,7 @@ gtk_scale_class_init (GtkScaleClass *class)
widget_class->screen_changed = gtk_scale_screen_changed;
widget_class->draw = gtk_scale_draw;
widget_class->size_allocate = gtk_scale_size_allocate;
- widget_class->get_preferred_width = gtk_scale_get_preferred_width;
- widget_class->get_preferred_height = gtk_scale_get_preferred_height;
+ widget_class->measure = gtk_scale_measure;
range_class->get_range_border = gtk_scale_get_range_border;
range_class->get_range_size_request = gtk_scale_get_range_size_request;
@@ -1699,66 +1699,42 @@ gtk_scale_measure_marks (GtkCssGadget *gadget,
}
static void
-gtk_scale_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkScale *scale = GTK_SCALE (widget);
- GtkScalePrivate *priv = scale->priv;
-
- GTK_WIDGET_CLASS (gtk_scale_parent_class)->get_preferred_width (widget, minimum, natural);
-
- if (gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)) == GTK_ORIENTATION_HORIZONTAL)
- {
- int top_marks_width = 0, bottom_marks_width = 0, marks_width;
-
- if (priv->top_marks_gadget)
- gtk_css_gadget_get_preferred_size (priv->top_marks_gadget,
- GTK_ORIENTATION_HORIZONTAL, -1,
- &top_marks_width, NULL,
- NULL, NULL);
- if (priv->bottom_marks_gadget)
- gtk_css_gadget_get_preferred_size (priv->bottom_marks_gadget,
- GTK_ORIENTATION_HORIZONTAL, -1,
- &bottom_marks_width, NULL,
- NULL, NULL);
-
- marks_width = MAX (top_marks_width, bottom_marks_width);
-
- *minimum = MAX (*minimum, marks_width);
- *natural = MAX (*natural, marks_width);
- }
-}
-
-static void
-gtk_scale_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_scale_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkScale *scale = GTK_SCALE (widget);
GtkScalePrivate *priv = scale->priv;
- GTK_WIDGET_CLASS (gtk_scale_parent_class)->get_preferred_height (widget, minimum, natural);
+ GTK_WIDGET_CLASS (gtk_scale_parent_class)->measure (widget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
- if (gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)) == GTK_ORIENTATION_VERTICAL)
+ if (gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)) == orientation)
{
- int top_marks_height = 0, bottom_marks_height = 0, marks_height;
+ int top_marks_size = 0, bottom_marks_size = 0, marks_size;
if (priv->top_marks_gadget)
gtk_css_gadget_get_preferred_size (priv->top_marks_gadget,
- GTK_ORIENTATION_VERTICAL, -1,
- &top_marks_height, NULL,
+ orientation, for_size,
+ &top_marks_size, NULL,
NULL, NULL);
if (priv->bottom_marks_gadget)
gtk_css_gadget_get_preferred_size (priv->bottom_marks_gadget,
- GTK_ORIENTATION_VERTICAL, -1,
- &bottom_marks_height, NULL,
+ orientation, for_size,
+ &bottom_marks_size, NULL,
NULL, NULL);
- marks_height = MAX (top_marks_height, bottom_marks_height);
+ marks_size = MAX (top_marks_size, bottom_marks_size);
- *minimum = MAX (*minimum, marks_height);
- *natural = MAX (*natural, marks_height);
+ *minimum = MAX (*minimum, marks_size);
+ *natural = MAX (*natural, marks_size);
}
}
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 28add4a0d9..c6724ccb54 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -366,21 +366,13 @@ static void gtk_scrolled_window_adjustment_value_changed (GtkAdjustment
gpointer data);
static gboolean gtk_widget_should_animate (GtkWidget *widget);
-static void gtk_scrolled_window_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_scrolled_window_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_scrolled_window_get_preferred_height_for_width (GtkWidget *layout,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_scrolled_window_get_preferred_width_for_height (GtkWidget *layout,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-
+static void gtk_scrolled_window_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_scrolled_window_map (GtkWidget *widget);
static void gtk_scrolled_window_unmap (GtkWidget *widget);
static void gtk_scrolled_window_realize (GtkWidget *widget);
@@ -541,10 +533,7 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
widget_class->size_allocate = gtk_scrolled_window_size_allocate;
widget_class->scroll_event = gtk_scrolled_window_scroll_event;
widget_class->focus = gtk_scrolled_window_focus;
- widget_class->get_preferred_width = gtk_scrolled_window_get_preferred_width;
- widget_class->get_preferred_height = gtk_scrolled_window_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_scrolled_window_get_preferred_height_for_width;
- widget_class->get_preferred_width_for_height = gtk_scrolled_window_get_preferred_width_for_height;
+ widget_class->measure = gtk_scrolled_window_measure_;
widget_class->map = gtk_scrolled_window_map;
widget_class->unmap = gtk_scrolled_window_unmap;
widget_class->grab_notify = gtk_scrolled_window_grab_notify;
@@ -3899,45 +3888,19 @@ gtk_scrolled_window_remove (GtkContainer *container,
}
static void
-gtk_scrolled_window_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
+gtk_scrolled_window_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_SCROLLED_WINDOW (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_scrolled_window_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_SCROLLED_WINDOW (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_scrolled_window_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height)
-{
- GTK_WIDGET_GET_CLASS (widget)->get_preferred_height (widget, minimum_height, natural_height);
-}
-
-static void
-gtk_scrolled_window_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width)
-{
- GTK_WIDGET_GET_CLASS (widget)->get_preferred_width (widget, minimum_width, natural_width);
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
static gboolean
diff --git a/gtk/gtkseparator.c b/gtk/gtkseparator.c
index f76fb368e3..c25bd0cc1c 100644
--- a/gtk/gtkseparator.c
+++ b/gtk/gtkseparator.c
@@ -114,28 +114,19 @@ gtk_separator_get_property (GObject *object,
}
}
-static void
-gtk_separator_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_SEPARATOR (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_separator_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+static void gtk_separator_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ gint for_size,
+ gint *minimum,
+ gint *natural,
+ gint *minimum_baseline,
+ gint *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_SEPARATOR (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -203,8 +194,7 @@ gtk_separator_class_init (GtkSeparatorClass *class)
object_class->get_property = gtk_separator_get_property;
object_class->finalize = gtk_separator_finalize;
- widget_class->get_preferred_width = gtk_separator_get_preferred_width;
- widget_class->get_preferred_height = gtk_separator_get_preferred_height;
+ widget_class->measure = gtk_separator_measure;
widget_class->size_allocate = gtk_separator_size_allocate;
widget_class->draw = gtk_separator_draw;
diff --git a/gtk/gtkseparatortoolitem.c b/gtk/gtkseparatortoolitem.c
index 0aa35ea8af..219955ecd2 100644
--- a/gtk/gtkseparatortoolitem.c
+++ b/gtk/gtkseparatortoolitem.c
@@ -71,12 +71,13 @@ static void gtk_separator_tool_item_get_property (GObject
guint prop_id,
GValue *value,
GParamSpec *pspec);
-static void gtk_separator_tool_item_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_separator_tool_item_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_separator_tool_item_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ gint for_size,
+ gint *minimum,
+ gint *natural,
+ gint *minimum_baseline,
+ gint *natural_baseline);
static void gtk_separator_tool_item_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_separator_tool_item_draw (GtkWidget *widget,
@@ -121,8 +122,7 @@ gtk_separator_tool_item_class_init (GtkSeparatorToolItemClass *class)
object_class->get_property = gtk_separator_tool_item_get_property;
object_class->finalize = gtk_separator_tool_item_finalize;
- widget_class->get_preferred_width = gtk_separator_tool_item_get_preferred_width;
- widget_class->get_preferred_height = gtk_separator_tool_item_get_preferred_height;
+ widget_class->measure = gtk_separator_tool_item_measure;
widget_class->size_allocate = gtk_separator_tool_item_size_allocate;
widget_class->draw = gtk_separator_tool_item_draw;
widget_class->realize = gtk_separator_tool_item_realize;
@@ -225,29 +225,20 @@ gtk_separator_tool_item_get_property (GObject *object,
break;
}
}
-
-static void
-gtk_separator_tool_item_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_SEPARATOR_TOOL_ITEM (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
static void
-gtk_separator_tool_item_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_separator_tool_item_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ gint for_size,
+ gint *minimum,
+ gint *natural,
+ gint *minimum_baseline,
+ gint *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_SEPARATOR_TOOL_ITEM (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
diff --git a/gtk/gtksizerequest.c b/gtk/gtksizerequest.c
index 94617c8e6b..d80e47f4fe 100644
--- a/gtk/gtksizerequest.c
+++ b/gtk/gtksizerequest.c
@@ -91,46 +91,6 @@ get_vfunc_name (GtkOrientation orientation,
return for_size < 0 ? "get_preferred_height" : "get_preferred_height_for_width";
}
-static gboolean
-widget_class_has_baseline_support (GtkWidgetClass *widget_class)
-{
- GtkWidgetClass *parent_class;
-
- if (widget_class->get_preferred_height_and_baseline_for_width == NULL)
- return FALSE;
-
- /* This is kinda hacky, but for backwards compatibility reasons we have to handle the case
- where a class previously did not support get_preferred_height_and_baseline_for_width,
- but then gained support for it, and a subclass of it overrides the previous non-baseline
- methods. If this happens we need to call the overridden (non-baseline supporting) versions
- on the subclass, rather than the inherited but not overriddent new get_preferred_height_and_baseline_for_width.
- */
-
- /* Loop over all parent classes that inherit the same get_preferred_height_and_baseline_for_width */
- parent_class = g_type_class_peek_parent (widget_class);
- while (parent_class != NULL &&
- parent_class->get_preferred_height_and_baseline_for_width == widget_class->get_preferred_height_and_baseline_for_width)
- {
- if (parent_class->get_preferred_height != widget_class->get_preferred_height ||
- parent_class->get_preferred_height_for_width != widget_class->get_preferred_height_for_width)
- return FALSE;
-
- parent_class = g_type_class_peek_parent (parent_class);
- }
-
- return TRUE;
-}
-
-gboolean
-_gtk_widget_has_baseline_support (GtkWidget *widget)
-{
- GtkWidgetClass *widget_class;
-
- widget_class = GTK_WIDGET_GET_CLASS (widget);
-
- return widget_class_has_baseline_support (widget_class);
-}
-
static void
gtk_widget_query_size_for_orientation (GtkWidget *widget,
GtkOrientation orientation,
@@ -173,7 +133,8 @@ gtk_widget_query_size_for_orientation (GtkWidget *widget,
if (for_size < 0)
{
push_recursion_check (widget, orientation, for_size);
- widget_class->get_preferred_width (widget, &min_size, &nat_size);
+ widget_class->measure (widget, GTK_ORIENTATION_HORIZONTAL, -1,
+ &min_size, &nat_size, NULL, NULL);
pop_recursion_check (widget, orientation);
}
else
@@ -195,9 +156,11 @@ gtk_widget_query_size_for_orientation (GtkWidget *widget,
&adjusted_for_size);
push_recursion_check (widget, orientation, for_size);
- widget_class->get_preferred_width_for_height (widget,
- MAX (adjusted_for_size, minimum_height),
- &min_size, &nat_size);
+ widget_class->measure (widget,
+ GTK_ORIENTATION_HORIZONTAL,
+ MAX (adjusted_for_size, minimum_height),
+ &min_size, &nat_size,
+ NULL, NULL);
pop_recursion_check (widget, orientation);
}
}
@@ -206,12 +169,11 @@ gtk_widget_query_size_for_orientation (GtkWidget *widget,
if (for_size < 0)
{
push_recursion_check (widget, orientation, for_size);
- if (widget_class_has_baseline_support (widget_class))
- widget_class->get_preferred_height_and_baseline_for_width (widget, -1,
- &min_size, &nat_size,
- &min_baseline, &nat_baseline);
- else
- widget_class->get_preferred_height (widget, &min_size, &nat_size);
+ widget_class->measure (widget,
+ GTK_ORIENTATION_VERTICAL,
+ -1,
+ &min_size, &nat_size,
+ &min_baseline, &nat_baseline);
pop_recursion_check (widget, orientation);
}
else
@@ -233,13 +195,11 @@ gtk_widget_query_size_for_orientation (GtkWidget *widget,
&adjusted_for_size);
push_recursion_check (widget, orientation, for_size);
- if (widget_class_has_baseline_support (widget_class))
- widget_class->get_preferred_height_and_baseline_for_width (widget, MAX (adjusted_for_size, minimum_width),
- &min_size, &nat_size,
- &min_baseline, &nat_baseline);
- else
- widget_class->get_preferred_height_for_width (widget, MAX (adjusted_for_size, minimum_width),
- &min_size, &nat_size);
+ widget_class->measure (widget,
+ GTK_ORIENTATION_VERTICAL,
+ MAX (adjusted_for_size, minimum_width),
+ &min_size, &nat_size,
+ &min_baseline, &nat_baseline);
pop_recursion_check (widget, orientation);
}
}
@@ -849,23 +809,23 @@ gtk_distribute_natural_allocation (gint extra_space,
}
void
-_gtk_widget_get_preferred_size_for_size (GtkWidget *widget,
- GtkOrientation orientation,
- gint size,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
+gtk_widget_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (size >= -1);
+ g_return_if_fail (for_size >= -1);
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
- if (size < 0)
+ if (for_size < 0)
gtk_widget_get_preferred_width (widget, minimum, natural);
else
- gtk_widget_get_preferred_width_for_height (widget, size, minimum, natural);
+ gtk_widget_get_preferred_width_for_height (widget, for_size, minimum, natural);
if (minimum_baseline)
*minimum_baseline = -1;
@@ -875,7 +835,7 @@ _gtk_widget_get_preferred_size_for_size (GtkWidget *widget,
else
{
gtk_widget_get_preferred_height_and_baseline_for_width (widget,
- size,
+ for_size,
minimum,
natural,
minimum_baseline,
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index 09a809ddf3..9f0444f97c 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -253,18 +253,13 @@ static void gtk_spin_button_map (GtkWidget *widget);
static void gtk_spin_button_unmap (GtkWidget *widget);
static void gtk_spin_button_realize (GtkWidget *widget);
static void gtk_spin_button_unrealize (GtkWidget *widget);
-static void gtk_spin_button_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_spin_button_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_spin_button_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline);
+static void gtk_spin_button_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_spin_button_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gint gtk_spin_button_draw (GtkWidget *widget,
@@ -345,9 +340,7 @@ gtk_spin_button_class_init (GtkSpinButtonClass *class)
widget_class->unmap = gtk_spin_button_unmap;
widget_class->realize = gtk_spin_button_realize;
widget_class->unrealize = gtk_spin_button_unrealize;
- widget_class->get_preferred_width = gtk_spin_button_get_preferred_width;
- widget_class->get_preferred_height = gtk_spin_button_get_preferred_height;
- widget_class->get_preferred_height_and_baseline_for_width = gtk_spin_button_get_preferred_height_and_baseline_for_width;
+ widget_class->measure = gtk_spin_button_measure;
widget_class->size_allocate = gtk_spin_button_size_allocate;
widget_class->draw = gtk_spin_button_draw;
widget_class->scroll_event = gtk_spin_button_scroll;
@@ -1141,41 +1134,22 @@ gtk_spin_button_get_text_width (GtkSpinButton *spin_button)
}
static void
-gtk_spin_button_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_spin_button_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_SPIN_BUTTON (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_spin_button_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline)
-{
- gtk_css_gadget_get_preferred_size (GTK_SPIN_BUTTON (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
static void
-gtk_spin_button_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_spin_button_get_preferred_height_and_baseline_for_width (widget, -1, minimum, natural, NULL, NULL);
-}
-
-static void
gtk_spin_button_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
diff --git a/gtk/gtkspinner.c b/gtk/gtkspinner.c
index 97d8e585d3..db1316ec1a 100644
--- a/gtk/gtkspinner.c
+++ b/gtk/gtkspinner.c
@@ -84,27 +84,19 @@ gtk_spinner_finalize (GObject *object)
}
static void
-gtk_spinner_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_spinner_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_SPINNER (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_spinner_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_SPINNER (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -205,8 +197,7 @@ gtk_spinner_class_init (GtkSpinnerClass *klass)
widget_class = GTK_WIDGET_CLASS(klass);
widget_class->size_allocate = gtk_spinner_size_allocate;
widget_class->get_render_node = gtk_spinner_get_render_node;
- widget_class->get_preferred_width = gtk_spinner_get_preferred_width;
- widget_class->get_preferred_height = gtk_spinner_get_preferred_height;
+ widget_class->measure = gtk_spinner_measure;
/* GtkSpinner:active:
*
diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c
index bed1fe67cd..fb30df8ea7 100644
--- a/gtk/gtkstack.c
+++ b/gtk/gtkstack.c
@@ -178,20 +178,13 @@ static void gtk_stack_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_stack_draw (GtkWidget *widget,
cairo_t *cr);
-static void gtk_stack_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_stack_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_stack_get_preferred_width (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width);
-static void gtk_stack_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width);
+static void gtk_stack_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_stack_finalize (GObject *obj);
static void gtk_stack_get_property (GObject *object,
guint property_id,
@@ -433,10 +426,7 @@ gtk_stack_class_init (GtkStackClass *klass)
widget_class->unrealize = gtk_stack_unrealize;
widget_class->map = gtk_stack_map;
widget_class->unmap = gtk_stack_unmap;
- widget_class->get_preferred_height = gtk_stack_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_stack_get_preferred_height_for_width;
- widget_class->get_preferred_width = gtk_stack_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_stack_get_preferred_width_for_height;
+ widget_class->measure = gtk_stack_measure_;
widget_class->compute_expand = gtk_stack_compute_expand;
container_class->add = gtk_stack_add;
@@ -2287,67 +2277,22 @@ gtk_stack_allocate (GtkCssGadget *gadget,
gtk_container_get_children_clip (GTK_CONTAINER (widget), out_clip);
}
-
-static void
-gtk_stack_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkStack *stack = GTK_STACK (widget);
- GtkStackPrivate *priv = gtk_stack_get_instance_private (stack);
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_stack_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
-{
- GtkStack *stack = GTK_STACK (widget);
- GtkStackPrivate *priv = gtk_stack_get_instance_private (stack);
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum, natural,
- NULL, NULL);
-}
-
static void
-gtk_stack_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_stack_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
- GtkStack *stack = GTK_STACK (widget);
- GtkStackPrivate *priv = gtk_stack_get_instance_private (stack);
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_stack_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
-{
- GtkStack *stack = GTK_STACK (widget);
- GtkStackPrivate *priv = gtk_stack_get_instance_private (stack);
+ GtkStackPrivate *priv = gtk_stack_get_instance_private (GTK_STACK (widget));
gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
#define LERP(a, b, t) ((a) + (((b) - (a)) * (1.0 - (t))))
diff --git a/gtk/gtkswitch.c b/gtk/gtkswitch.c
index 4e31fbf3f4..8fa964346f 100644
--- a/gtk/gtkswitch.c
+++ b/gtk/gtkswitch.c
@@ -404,27 +404,19 @@ gtk_switch_get_content_size (GtkCssGadget *gadget,
}
static void
-gtk_switch_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_switch_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
gtk_css_gadget_get_preferred_size (GTK_SWITCH (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum, natural,
- NULL, NULL);
-}
-
-static void
-gtk_switch_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- gtk_css_gadget_get_preferred_size (GTK_SWITCH (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
+ minimum_baseline, natural_baseline);
}
static void
@@ -782,8 +774,7 @@ gtk_switch_class_init (GtkSwitchClass *klass)
g_object_class_install_properties (gobject_class, LAST_PROP, switch_props);
- widget_class->get_preferred_width = gtk_switch_get_preferred_width;
- widget_class->get_preferred_height = gtk_switch_get_preferred_height;
+ widget_class->measure = gtk_switch_measure;
widget_class->size_allocate = gtk_switch_size_allocate;
widget_class->realize = gtk_switch_realize;
widget_class->unrealize = gtk_switch_unrealize;
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 7fffd99767..9197bf7420 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -383,12 +383,13 @@ static void gtk_text_view_get_property (GObject *object,
static void gtk_text_view_destroy (GtkWidget *widget);
static void gtk_text_view_size_request (GtkWidget *widget,
GtkRequisition *requisition);
-static void gtk_text_view_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_text_view_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_text_view_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_text_view_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_text_view_map (GtkWidget *widget);
@@ -747,8 +748,7 @@ gtk_text_view_class_init (GtkTextViewClass *klass)
widget_class->style_updated = gtk_text_view_style_updated;
widget_class->direction_changed = gtk_text_view_direction_changed;
widget_class->state_flags_changed = gtk_text_view_state_flags_changed;
- widget_class->get_preferred_width = gtk_text_view_get_preferred_width;
- widget_class->get_preferred_height = gtk_text_view_get_preferred_height;
+ widget_class->measure = gtk_text_view_measure;
widget_class->size_allocate = gtk_text_view_size_allocate;
widget_class->event = gtk_text_view_event;
widget_class->key_press_event = gtk_text_view_key_press_event;
@@ -4035,30 +4035,24 @@ gtk_text_view_size_request (GtkWidget *widget,
}
static void
-gtk_text_view_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_text_view_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkRequisition requisition;
gtk_text_view_size_request (widget, &requisition);
- *minimum = *natural = requisition.width;
-}
-
-static void
-gtk_text_view_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkRequisition requisition;
-
- gtk_text_view_size_request (widget, &requisition);
-
- *minimum = *natural = requisition.height;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *minimum = *natural = requisition.width;
+ else
+ *minimum = *natural = requisition.height;
}
-
static void
gtk_text_view_compute_child_allocation (GtkTextView *text_view,
GtkTextViewChild *vc,
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
index 28a464694e..a708506e16 100644
--- a/gtk/gtktoolbar.c
+++ b/gtk/gtktoolbar.c
@@ -196,13 +196,13 @@ static gint gtk_toolbar_draw (GtkWidget *widget,
cairo_t *cr);
static void gtk_toolbar_realize (GtkWidget *widget);
static void gtk_toolbar_unrealize (GtkWidget *widget);
-static void gtk_toolbar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_toolbar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-
+static void gtk_toolbar_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_toolbar_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_toolbar_style_updated (GtkWidget *widget);
@@ -397,8 +397,7 @@ gtk_toolbar_class_init (GtkToolbarClass *klass)
widget_class->button_press_event = gtk_toolbar_button_press;
widget_class->draw = gtk_toolbar_draw;
- widget_class->get_preferred_width = gtk_toolbar_get_preferred_width;
- widget_class->get_preferred_height = gtk_toolbar_get_preferred_height;
+ widget_class->measure = gtk_toolbar_measure_;
widget_class->size_allocate = gtk_toolbar_size_allocate;
widget_class->style_updated = gtk_toolbar_style_updated;
widget_class->focus = gtk_toolbar_focus;
@@ -970,33 +969,23 @@ gtk_toolbar_measure (GtkCssGadget *gadget,
}
static void
-gtk_toolbar_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_toolbar_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkToolbar *toolbar = GTK_TOOLBAR (widget);
GtkToolbarPrivate *priv = toolbar->priv;
gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
+ orientation,
+ for_size,
minimum, natural,
- NULL, NULL);
-}
+ minimum_baseline, natural_baseline);
-static void
-gtk_toolbar_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkToolbar *toolbar = GTK_TOOLBAR (widget);
- GtkToolbarPrivate *priv = toolbar->priv;
-
- gtk_css_gadget_get_preferred_size (priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum, natural,
- NULL, NULL);
}
static gint
diff --git a/gtk/gtktoolitem.c b/gtk/gtktoolitem.c
index 71a86d6020..54e54a1ea0 100644
--- a/gtk/gtktoolitem.c
+++ b/gtk/gtktoolitem.c
@@ -105,14 +105,6 @@ static void gtk_tool_item_realize (GtkWidget *widget);
static void gtk_tool_item_unrealize (GtkWidget *widget);
static void gtk_tool_item_map (GtkWidget *widget);
static void gtk_tool_item_unmap (GtkWidget *widget);
-static void gtk_tool_item_get_preferred_width
- (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_tool_item_get_preferred_height
- (GtkWidget *widget,
- gint *minimum,
- gint *natural);
static void gtk_tool_item_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
@@ -139,8 +131,6 @@ gtk_tool_item_class_init (GtkToolItemClass *klass)
widget_class->unrealize = gtk_tool_item_unrealize;
widget_class->map = gtk_tool_item_map;
widget_class->unmap = gtk_tool_item_unmap;
- widget_class->get_preferred_width = gtk_tool_item_get_preferred_width;
- widget_class->get_preferred_height = gtk_tool_item_get_preferred_height;
widget_class->size_allocate = gtk_tool_item_size_allocate;
widget_class->parent_set = gtk_tool_item_parent_set;
@@ -406,34 +396,6 @@ gtk_tool_item_unmap (GtkWidget *widget)
}
static void
-gtk_tool_item_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkWidget *child;
-
- *minimum = *natural = 0;
-
- child = gtk_bin_get_child (GTK_BIN (widget));
- if (child && gtk_widget_get_visible (child))
- gtk_widget_get_preferred_width (child, minimum, natural);
-}
-
-static void
-gtk_tool_item_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkWidget *child;
-
- *minimum = *natural = 0;
-
- child = gtk_bin_get_child (GTK_BIN (widget));
- if (child && gtk_widget_get_visible (child))
- gtk_widget_get_preferred_height (child, minimum, natural);
-}
-
-static void
gtk_tool_item_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
diff --git a/gtk/gtktoolitemgroup.c b/gtk/gtktoolitemgroup.c
index 5a104d683f..ab6534b024 100644
--- a/gtk/gtktoolitemgroup.c
+++ b/gtk/gtktoolitemgroup.c
@@ -602,30 +602,24 @@ gtk_tool_item_group_size_request (GtkWidget *widget,
}
static void
-gtk_tool_item_group_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_tool_item_group_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkRequisition requisition;
gtk_tool_item_group_size_request (widget, &requisition);
- *minimum = *natural = requisition.width;
-}
-
-static void
-gtk_tool_item_group_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkRequisition requisition;
-
- gtk_tool_item_group_size_request (widget, &requisition);
-
- *minimum = *natural = requisition.height;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *minimum = *natural = requisition.width;
+ else
+ *minimum = *natural = requisition.height;
}
-
static gboolean
gtk_tool_item_group_is_item_visible (GtkToolItemGroup *group,
GtkToolItemGroupChild *child)
@@ -1592,8 +1586,7 @@ gtk_tool_item_group_class_init (GtkToolItemGroupClass *cls)
oclass->finalize = gtk_tool_item_group_finalize;
oclass->dispose = gtk_tool_item_group_dispose;
- wclass->get_preferred_width = gtk_tool_item_group_get_preferred_width;
- wclass->get_preferred_height = gtk_tool_item_group_get_preferred_height;
+ wclass->measure = gtk_tool_item_group_measure;
wclass->size_allocate = gtk_tool_item_group_size_allocate;
wclass->realize = gtk_tool_item_group_realize;
wclass->unrealize = gtk_tool_item_group_unrealize;
diff --git a/gtk/gtktoolpalette.c b/gtk/gtktoolpalette.c
index 52936f0346..8a1af549e3 100644
--- a/gtk/gtktoolpalette.c
+++ b/gtk/gtktoolpalette.c
@@ -449,27 +449,22 @@ gtk_tool_palette_size_request (GtkWidget *widget,
}
static void
-gtk_tool_palette_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_tool_palette_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkRequisition requisition;
gtk_tool_palette_size_request (widget, &requisition);
- *minimum = *natural = requisition.width;
-}
-
-static void
-gtk_tool_palette_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkRequisition requisition;
-
- gtk_tool_palette_size_request (widget, &requisition);
-
- *minimum = *natural = requisition.height;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *minimum = *natural = requisition.width;
+ else
+ *minimum = *natural = requisition.height;
}
@@ -899,8 +894,7 @@ gtk_tool_palette_class_init (GtkToolPaletteClass *cls)
oclass->dispose = gtk_tool_palette_dispose;
oclass->finalize = gtk_tool_palette_finalize;
- wclass->get_preferred_width = gtk_tool_palette_get_preferred_width;
- wclass->get_preferred_height= gtk_tool_palette_get_preferred_height;
+ wclass->measure = gtk_tool_palette_measure;
wclass->size_allocate = gtk_tool_palette_size_allocate;
wclass->realize = gtk_tool_palette_realize;
wclass->draw = gtk_tool_palette_draw;
diff --git a/gtk/gtktreemenu.c b/gtk/gtktreemenu.c
index 60eaa2e3be..c4ccfb8ad2 100644
--- a/gtk/gtktreemenu.c
+++ b/gtk/gtktreemenu.c
@@ -63,20 +63,13 @@ static void gtk_tree_menu_get_property (GObject
GParamSpec *pspec);
/* GtkWidgetClass */
-static void gtk_tree_menu_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_tree_menu_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_tree_menu_get_preferred_width_for_height (GtkWidget *widget,
- gint for_height,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_tree_menu_get_preferred_height_for_width (GtkWidget *widget,
- gint for_width,
- gint *minimum_size,
- gint *natural_size);
+static void gtk_tree_menu_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
/* GtkCellLayoutIface */
static void gtk_tree_menu_cell_layout_init (GtkCellLayoutIface *iface);
@@ -222,10 +215,7 @@ _gtk_tree_menu_class_init (GtkTreeMenuClass *class)
object_class->set_property = gtk_tree_menu_set_property;
object_class->get_property = gtk_tree_menu_get_property;
- widget_class->get_preferred_width = gtk_tree_menu_get_preferred_width;
- widget_class->get_preferred_height = gtk_tree_menu_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_tree_menu_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_tree_menu_get_preferred_height_for_width;
+ widget_class->measure = gtk_tree_menu_measure;
/*
* GtkTreeMenu::menu-activate:
@@ -542,54 +532,17 @@ sync_reserve_submenu_size (GtkTreeMenu *menu)
g_list_free (children);
}
-static void
-gtk_tree_menu_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- GtkTreeMenu *menu = GTK_TREE_MENU (widget);
- GtkTreeMenuPrivate *priv = menu->priv;
-
- /* We leave the requesting work up to the cellviews which operate in the same
- * context, reserving space for the submenu indicator if any of the items have
- * submenus ensures that every cellview will receive the same allocated width.
- *
- * Since GtkMenu does hieght-for-width correctly, we know that the width of
- * every cell will be requested before the height-for-widths are requested.
- */
- g_signal_handler_block (priv->context, priv->size_changed_id);
-
- sync_reserve_submenu_size (menu);
-
- GTK_WIDGET_CLASS (_gtk_tree_menu_parent_class)->get_preferred_width (widget, minimum_size, natural_size);
-
- g_signal_handler_unblock (priv->context, priv->size_changed_id);
-}
static void
-gtk_tree_menu_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
+gtk_tree_menu_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
- GtkTreeMenu *menu = GTK_TREE_MENU (widget);
- GtkTreeMenuPrivate *priv = menu->priv;
-
- g_signal_handler_block (priv->context, priv->size_changed_id);
-
- sync_reserve_submenu_size (menu);
-
- GTK_WIDGET_CLASS (_gtk_tree_menu_parent_class)->get_preferred_height (widget, minimum_size, natural_size);
-
- g_signal_handler_unblock (priv->context, priv->size_changed_id);
-}
-
-static void
-gtk_tree_menu_get_preferred_width_for_height (GtkWidget *widget,
- gint for_height,
- gint *minimum_size,
- gint *natural_size)
-{
- GtkTreeMenu *menu = GTK_TREE_MENU (widget);
+ GtkTreeMenu *menu = GTK_TREE_MENU (widget);
GtkTreeMenuPrivate *priv = menu->priv;
/* We leave the requesting work up to the cellviews which operate in the same
@@ -603,28 +556,15 @@ gtk_tree_menu_get_preferred_width_for_height (GtkWidget *widget,
sync_reserve_submenu_size (menu);
- GTK_WIDGET_CLASS (_gtk_tree_menu_parent_class)->get_preferred_width_for_height (widget, for_height, minimum_size, natural_size);
+ GTK_WIDGET_CLASS (_gtk_tree_menu_parent_class)->measure (widget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
g_signal_handler_unblock (priv->context, priv->size_changed_id);
}
-static void
-gtk_tree_menu_get_preferred_height_for_width (GtkWidget *widget,
- gint for_width,
- gint *minimum_size,
- gint *natural_size)
-{
- GtkTreeMenu *menu = GTK_TREE_MENU (widget);
- GtkTreeMenuPrivate *priv = menu->priv;
-
- g_signal_handler_block (priv->context, priv->size_changed_id);
-
- sync_reserve_submenu_size (menu);
-
- GTK_WIDGET_CLASS (_gtk_tree_menu_parent_class)->get_preferred_height_for_width (widget, for_width, minimum_size, natural_size);
-
- g_signal_handler_unblock (priv->context, priv->size_changed_id);
-}
/****************************************************************
* GtkCellLayoutIface *
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 00d205cf35..3382f06197 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -590,12 +590,13 @@ static void gtk_tree_view_realize (GtkWidget *widget);
static void gtk_tree_view_unrealize (GtkWidget *widget);
static void gtk_tree_view_map (GtkWidget *widget);
static void gtk_tree_view_unmap (GtkWidget *widget);
-static void gtk_tree_view_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_tree_view_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_tree_view_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_tree_view_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_tree_view_draw (GtkWidget *widget,
@@ -982,8 +983,7 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
widget_class->unmap = gtk_tree_view_unmap;
widget_class->realize = gtk_tree_view_realize;
widget_class->unrealize = gtk_tree_view_unrealize;
- widget_class->get_preferred_width = gtk_tree_view_get_preferred_width;
- widget_class->get_preferred_height = gtk_tree_view_get_preferred_height;
+ widget_class->measure = gtk_tree_view_measure;
widget_class->size_allocate = gtk_tree_view_size_allocate;
widget_class->motion_notify_event = gtk_tree_view_motion;
widget_class->draw = gtk_tree_view_draw;
@@ -2589,46 +2589,48 @@ gtk_tree_view_get_height (GtkTreeView *tree_view)
}
static void
-gtk_tree_view_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_tree_view_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
- GList *list;
- GtkTreeViewColumn *column;
- gint width = 0;
- /* we validate some rows initially just to make sure we have some size.
- * In practice, with a lot of static lists, this should get a good width.
- */
- do_validate_rows (tree_view, FALSE);
-
- /* keep this in sync with size_allocate below */
- for (list = tree_view->priv->columns; list; list = list->next)
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
- column = list->data;
- if (!gtk_tree_view_column_get_visible (column) || column == tree_view->priv->drag_column)
- continue;
+ GList *list;
+ GtkTreeViewColumn *column;
+ gint width = 0;
- width += _gtk_tree_view_column_request_width (column);
- }
+ /* we validate some rows initially just to make sure we have some size.
+ * In practice, with a lot of static lists, this should get a good width.
+ */
+ do_validate_rows (tree_view, FALSE);
- *minimum = *natural = width;
-}
+ /* keep this in sync with size_allocate below */
+ for (list = tree_view->priv->columns; list; list = list->next)
+ {
+ column = list->data;
+ if (!gtk_tree_view_column_get_visible (column) || column == tree_view->priv->drag_column)
+ continue;
-static void
-gtk_tree_view_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
- gint height;
+ width += _gtk_tree_view_column_request_width (column);
+ }
- gtk_tree_view_update_height (tree_view);
+ *minimum = *natural = width;
+ }
+ else /* VERTICAL */
+ {
+ int height;
- height = gtk_tree_view_get_height (tree_view) + gtk_tree_view_get_effective_header_height (tree_view);
+ gtk_tree_view_update_height (tree_view);
+ height = gtk_tree_view_get_height (tree_view) + gtk_tree_view_get_effective_header_height (tree_view);
- *minimum = *natural = height;
+ *minimum = *natural = height;
+ }
}
static int
@@ -6976,8 +6978,16 @@ do_validate_rows (GtkTreeView *tree_view, gboolean queue_resize)
* untill we've recieved an allocation (never update scroll adjustments from size-requests).
*/
prevent_recursion_hack = TRUE;
- gtk_tree_view_get_preferred_width (GTK_WIDGET (tree_view), &requisition.width, &dummy);
- gtk_tree_view_get_preferred_height (GTK_WIDGET (tree_view), &requisition.height, &dummy);
+ gtk_tree_view_measure (GTK_WIDGET (tree_view),
+ GTK_ORIENTATION_HORIZONTAL,
+ -1,
+ &requisition.width, &dummy,
+ NULL, NULL);
+ gtk_tree_view_measure (GTK_WIDGET (tree_view),
+ GTK_ORIENTATION_VERTICAL,
+ -1,
+ &requisition.height, &dummy,
+ NULL, NULL);
prevent_recursion_hack = FALSE;
/* If rows above the current position have changed height, this has
diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c
index 3bfb3f4b1f..13db3a3cbe 100644
--- a/gtk/gtkviewport.c
+++ b/gtk/gtkviewport.c
@@ -119,22 +119,6 @@ static void gtk_viewport_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_viewport_adjustment_value_changed (GtkAdjustment *adjustment,
gpointer data);
-
-static void gtk_viewport_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_viewport_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_viewport_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_viewport_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_size,
- gint *natural_size);
-
static void viewport_set_adjustment (GtkViewport *viewport,
GtkOrientation orientation,
GtkAdjustment *adjustment);
@@ -162,11 +146,11 @@ gtk_viewport_measure (GtkCssGadget *gadget,
child = gtk_bin_get_child (GTK_BIN (widget));
if (child && gtk_widget_get_visible (child))
- _gtk_widget_get_preferred_size_for_size (child,
- orientation,
- for_size,
- minimum, natural,
- NULL, NULL);
+ gtk_widget_measure (child,
+ orientation,
+ for_size,
+ minimum, natural,
+ NULL, NULL);
}
static void
@@ -363,6 +347,22 @@ gtk_viewport_render (GtkCssGadget *gadget,
}
static void
+gtk_viewport_measure_ (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
+{
+ gtk_css_gadget_get_preferred_size (GTK_VIEWPORT (widget)->priv->gadget,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
+}
+
+static void
gtk_viewport_class_init (GtkViewportClass *class)
{
GObjectClass *gobject_class;
@@ -384,10 +384,7 @@ gtk_viewport_class_init (GtkViewportClass *class)
widget_class->unmap = gtk_viewport_unmap;
widget_class->draw = gtk_viewport_draw;
widget_class->size_allocate = gtk_viewport_size_allocate;
- widget_class->get_preferred_width = gtk_viewport_get_preferred_width;
- widget_class->get_preferred_height = gtk_viewport_get_preferred_height;
- widget_class->get_preferred_width_for_height = gtk_viewport_get_preferred_width_for_height;
- widget_class->get_preferred_height_for_width = gtk_viewport_get_preferred_height_for_width;
+ widget_class->measure = gtk_viewport_measure_;
widget_class->queue_draw_region = gtk_viewport_queue_draw_region;
gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_VIEWPORT);
@@ -961,53 +958,3 @@ gtk_viewport_adjustment_value_changed (GtkAdjustment *adjustment,
gdk_window_move (priv->bin_window, new_x, new_y);
}
}
-
-static void
-gtk_viewport_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_VIEWPORT (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_viewport_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_VIEWPORT (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_viewport_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_VIEWPORT (widget)->priv->gadget,
- GTK_ORIENTATION_HORIZONTAL,
- height,
- minimum_size, natural_size,
- NULL, NULL);
-}
-
-static void
-gtk_viewport_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_size,
- gint *natural_size)
-{
- gtk_css_gadget_get_preferred_size (GTK_VIEWPORT (widget)->priv->gadget,
- GTK_ORIENTATION_VERTICAL,
- width,
- minimum_size, natural_size,
- NULL, NULL);
-}
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index df6c2bd3c9..25f2193ae5 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -694,20 +694,13 @@ static gint gtk_widget_event_internal (GtkWidget *widget,
GdkEvent *event);
static gboolean gtk_widget_real_mnemonic_activate (GtkWidget *widget,
gboolean group_cycling);
-static void gtk_widget_real_get_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_widget_real_get_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_widget_real_get_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height);
-static void gtk_widget_real_get_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width);
+static void gtk_widget_real_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_widget_real_state_flags_changed (GtkWidget *widget,
GtkStateFlags old_state);
static void gtk_widget_real_queue_draw_region (GtkWidget *widget,
@@ -1012,11 +1005,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
klass->unrealize = gtk_widget_real_unrealize;
klass->size_allocate = gtk_widget_real_size_allocate;
klass->get_request_mode = gtk_widget_real_get_request_mode;
- klass->get_preferred_width = gtk_widget_real_get_width;
- klass->get_preferred_height = gtk_widget_real_get_height;
- klass->get_preferred_width_for_height = gtk_widget_real_get_width_for_height;
- klass->get_preferred_height_for_width = gtk_widget_real_get_height_for_width;
- klass->get_preferred_height_and_baseline_for_width = NULL;
+ klass->measure = gtk_widget_real_measure;
klass->state_flags_changed = gtk_widget_real_state_flags_changed;
klass->parent_set = NULL;
klass->hierarchy_changed = NULL;
@@ -5450,8 +5439,7 @@ gtk_widget_size_allocate_with_baseline (GtkWidget *widget,
/* Never pass a baseline to a child unless it requested it.
This means containers don't have to manually check for this. */
if (baseline != -1 &&
- (gtk_widget_get_valign_with_baseline (widget) != GTK_ALIGN_BASELINE ||
- !_gtk_widget_has_baseline_support (widget)))
+ gtk_widget_get_valign_with_baseline (widget) != GTK_ALIGN_BASELINE)
baseline = -1;
alloc_needed = priv->alloc_needed;
@@ -13103,39 +13091,16 @@ gtk_widget_real_get_request_mode (GtkWidget *widget)
}
static void
-gtk_widget_real_get_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- *minimum_size = 0;
- *natural_size = 0;
-}
-
-static void
-gtk_widget_real_get_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- *minimum_size = 0;
- *natural_size = 0;
-}
-
-static void
-gtk_widget_real_get_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height)
-{
- GTK_WIDGET_GET_CLASS (widget)->get_preferred_height (widget, minimum_height, natural_height);
-}
-
-static void
-gtk_widget_real_get_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width)
-{
- GTK_WIDGET_GET_CLASS (widget)->get_preferred_width (widget, minimum_width, natural_width);
+gtk_widget_real_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
+{
+ *minimum = 0;
+ *natural = 0;
}
/**
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index 41ef61365c..ad373d28f2 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -400,20 +400,30 @@ struct _GtkWidgetClass
/* size requests */
GtkSizeRequestMode (* get_request_mode) (GtkWidget *widget);
- void (* get_preferred_height) (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height);
- void (* get_preferred_width_for_height) (GtkWidget *widget,
- gint height,
- gint *minimum_width,
- gint *natural_width);
- void (* get_preferred_width) (GtkWidget *widget,
- gint *minimum_width,
- gint *natural_width);
- void (* get_preferred_height_for_width) (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height);
+ //void (* get_preferred_height) (GtkWidget *widget,
+ //gint *minimum_height,
+ //gint *natural_height);
+ //void (* get_preferred_width_for_height) (GtkWidget *widget,
+ //gint height,
+ //gint *minimum_width,
+ //gint *natural_width);
+ //void (* get_preferred_width) (GtkWidget *widget,
+ //gint *minimum_width,
+ //gint *natural_width);
+ //void (* get_preferred_height_for_width) (GtkWidget *widget,
+ //gint width,
+ //gint *minimum_height,
+ //gint *natural_height);
+
+ void (* measure) (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
+
+
/* Mnemonics */
gboolean (* mnemonic_activate) (GtkWidget *widget,
@@ -580,12 +590,6 @@ struct _GtkWidgetClass
gboolean (* touch_event) (GtkWidget *widget,
GdkEventTouch *event);
- void (* get_preferred_height_and_baseline_for_width) (GtkWidget *widget,
- gint width,
- gint *minimum_height,
- gint *natural_height,
- gint *minimum_baseline,
- gint *natural_baseline);
void (* adjust_baseline_request)(GtkWidget *widget,
gint *minimum_baseline,
gint *natural_baseline);
@@ -693,6 +697,14 @@ void gtk_widget_get_preferred_width_for_height (GtkWidget *w
gint height,
gint *minimum_width,
gint *natural_width);
+GDK_AVAILABLE_IN_3_90
+void gtk_widget_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
GDK_AVAILABLE_IN_3_10
void gtk_widget_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
gint width,
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 4403ae37eb..b4b28fc9f0 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -188,19 +188,11 @@ void _gtk_widget_add_attached_window (GtkWidget *widget,
void _gtk_widget_remove_attached_window (GtkWidget *widget,
GtkWindow *window);
-void _gtk_widget_get_preferred_size_for_size (GtkWidget *widget,
- GtkOrientation orientation,
- gint size,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline);
void _gtk_widget_get_preferred_size_and_baseline(GtkWidget *widget,
GtkRequisition *minimum_size,
GtkRequisition *natural_size,
gint *minimum_baseline,
gint *natural_baseline);
-gboolean _gtk_widget_has_baseline_support (GtkWidget *widget);
const gchar* _gtk_widget_get_accel_path (GtkWidget *widget,
gboolean *locked);
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 74993440c5..30ff7aa8bd 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -516,22 +516,6 @@ static void gtk_window_set_theme_variant (GtkWindow *window);
static void gtk_window_do_popup (GtkWindow *window,
GdkEventButton *event);
-
-static void gtk_window_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_window_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_size,
- gint *natural_size);
-
-static void gtk_window_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size);
-static void gtk_window_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_size,
- gint *natural_size);
static void gtk_window_style_updated (GtkWidget *widget);
static void gtk_window_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_state);
@@ -665,6 +649,89 @@ startup_id_is_fake (const gchar* startup_id)
}
static void
+gtk_window_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
+{
+ GtkWindow *window = GTK_WINDOW (widget);
+ GtkWindowPrivate *priv = window->priv;
+ GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
+ gboolean has_size_request = gtk_widget_has_size_request (widget);
+ int title_min_size = 0;
+ int title_nat_size = 0;
+ int child_min_size = 0;
+ int child_nat_size = 0;
+ GtkBorder window_border = { 0 };
+
+
+ if (priv->decorated && !priv->fullscreen)
+ {
+ get_shadow_width (window, &window_border);
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ for_size -= window_border.left + window_border.right;
+ else
+ for_size -= window_border.top + window_border.bottom;
+
+ if (priv->title_box != NULL &&
+ gtk_widget_get_visible (priv->title_box) &&
+ gtk_widget_get_child_visible (priv->title_box))
+ {
+ int size = for_size;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL && for_size >= 0)
+ gtk_widget_measure (priv->title_box,
+ orientation == GTK_ORIENTATION_HORIZONTAL ? GTK_ORIENTATION_VERTICAL :
+ GTK_ORIENTATION_HORIZONTAL,
+ -1,
+ NULL, &size,
+ NULL, NULL);
+
+ gtk_widget_measure (priv->title_box,
+ orientation,
+ MAX (size, 0),
+ &title_min_size, &title_nat_size,
+ NULL, NULL);
+ }
+ }
+
+ if (child != NULL && gtk_widget_get_visible (child))
+ {
+ gtk_widget_measure (child,
+ orientation,
+ MAX (for_size, 0),
+ &child_min_size, &child_nat_size,
+ NULL, NULL);
+
+ if (child_nat_size == 0 && !has_size_request)
+ child_nat_size = NO_CONTENT_CHILD_NAT;
+ }
+ else if (!has_size_request)
+ {
+ child_nat_size = NO_CONTENT_CHILD_NAT;
+ }
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ title_min_size += window_border.left + window_border.right;
+ title_nat_size += window_border.left + window_border.right;
+ child_min_size += window_border.left + window_border.right;
+ child_nat_size += window_border.left + window_border.right;
+ *minimum = MAX (title_min_size, child_min_size);
+ *natural = MAX (title_nat_size, child_nat_size);
+ }
+ else
+ {
+ *minimum = title_min_size + child_min_size + window_border.top + window_border.bottom;
+ *natural = title_nat_size + child_nat_size + window_border.top + window_border.bottom;
+ }
+}
+
+
+static void
gtk_window_class_init (GtkWindowClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
@@ -705,10 +772,7 @@ gtk_window_class_init (GtkWindowClass *klass)
widget_class->focus = gtk_window_focus;
widget_class->move_focus = gtk_window_move_focus;
widget_class->window_state_event = gtk_window_state_event;
- widget_class->get_preferred_width = gtk_window_get_preferred_width;
- widget_class->get_preferred_width_for_height = gtk_window_get_preferred_width_for_height;
- widget_class->get_preferred_height = gtk_window_get_preferred_height;
- widget_class->get_preferred_height_for_width = gtk_window_get_preferred_height_for_width;
+ widget_class->measure = gtk_window_measure;
widget_class->state_flags_changed = gtk_window_state_flags_changed;
widget_class->style_updated = gtk_window_style_updated;
widget_class->get_render_node = gtk_window_get_render_node;
@@ -8111,239 +8175,6 @@ gtk_window_real_set_focus (GtkWindow *window,
}
static void
-gtk_window_get_preferred_width (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- GtkWindow *window;
- GtkWidget *child;
- GtkWindowPrivate *priv;
- gint title_min = 0, title_nat = 0;
- gint child_min = 0, child_nat = 0;
- GtkBorder window_border = { 0 };
- gboolean has_size_request;
-
- window = GTK_WINDOW (widget);
- priv = window->priv;
- child = gtk_bin_get_child (GTK_BIN (window));
- has_size_request = gtk_widget_has_size_request (widget);
-
- if (priv->decorated &&
- !priv->fullscreen)
- {
- get_shadow_width (window, &window_border);
-
- if (priv->title_box != NULL &&
- gtk_widget_get_visible (priv->title_box) &&
- gtk_widget_get_child_visible (priv->title_box))
- gtk_widget_get_preferred_width (priv->title_box,
- &title_min, &title_nat);
-
- title_min += window_border.left + window_border.right;
- title_nat += window_border.left + window_border.right;
- }
-
- if (child && gtk_widget_get_visible (child))
- {
- gtk_widget_get_preferred_width (child, &child_min, &child_nat);
-
- if (child_nat == 0 && !has_size_request)
- child_nat = NO_CONTENT_CHILD_NAT;
- child_min += window_border.left + window_border.right;
- child_nat += window_border.left + window_border.right;
- }
- else if (!has_size_request)
- {
- child_nat = NO_CONTENT_CHILD_NAT;
- }
-
- *minimum_size = MAX (title_min, child_min);
- *natural_size = MAX (title_nat, child_nat);
-}
-
-
-static void
-gtk_window_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum_size,
- gint *natural_size)
-{
- GtkWindow *window;
- GtkWidget *child;
- GtkWindowPrivate *priv;
- gint title_min = 0, title_nat = 0;
- gint child_min = 0, child_nat = 0;
- gint title_height = 0;
- GtkBorder window_border = { 0 };
- gboolean has_size_request;
-
- window = GTK_WINDOW (widget);
- priv = window->priv;
- child = gtk_bin_get_child (GTK_BIN (window));
- has_size_request = gtk_widget_has_size_request (widget);
-
- if (priv->decorated &&
- !priv->fullscreen)
- {
- get_shadow_width (window, &window_border);
-
- height -= window_border.top + window_border.bottom;
-
- if (priv->title_box != NULL &&
- gtk_widget_get_visible (priv->title_box) &&
- gtk_widget_get_child_visible (priv->title_box))
- {
- gtk_widget_get_preferred_height (priv->title_box,
- NULL, &title_height);
- gtk_widget_get_preferred_width_for_height (priv->title_box,
- title_height,
- &title_min, &title_nat);
- height -= title_height;
- }
-
- title_min += window_border.left + window_border.right;
- title_nat += window_border.left + window_border.right;
- }
-
- if (child && gtk_widget_get_visible (child))
- {
- gtk_widget_get_preferred_width_for_height (child,
- MAX (height, 0),
- &child_min, &child_nat);
-
- if (child_nat == 0 && height == 0 && !has_size_request)
- child_nat = NO_CONTENT_CHILD_NAT;
- child_min += window_border.left + window_border.right;
- child_nat += window_border.left + window_border.right;
- }
- else if (!has_size_request)
- {
- child_nat = NO_CONTENT_CHILD_NAT;
- }
-
- *minimum_size = MAX (title_min, child_min);
- *natural_size = MAX (title_nat, child_nat);
-}
-
-static void
-gtk_window_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
-{
- GtkWindow *window;
- GtkWindowPrivate *priv;
- GtkWidget *child;
- int title_min = 0;
- int title_height = 0;
- GtkBorder window_border = { 0 };
- gboolean has_size_request;
-
- window = GTK_WINDOW (widget);
- priv = window->priv;
- child = gtk_bin_get_child (GTK_BIN (window));
- has_size_request = gtk_widget_has_size_request (widget);
-
- *minimum_size = 0;
- *natural_size = 0;
-
- if (priv->decorated &&
- !priv->fullscreen)
- {
- get_shadow_width (window, &window_border);
-
- if (priv->title_box != NULL &&
- gtk_widget_get_visible (priv->title_box) &&
- gtk_widget_get_child_visible (priv->title_box))
- gtk_widget_get_preferred_height (priv->title_box,
- &title_min,
- &title_height);
-
- *minimum_size = title_min +
- window_border.top + window_border.bottom;
-
- *natural_size = title_height +
- window_border.top + window_border.bottom;
- }
-
- if (child && gtk_widget_get_visible (child))
- {
- gint child_min, child_nat;
- gtk_widget_get_preferred_height (child, &child_min, &child_nat);
-
- if (child_nat == 0 && !has_size_request)
- child_nat = NO_CONTENT_CHILD_NAT;
- *minimum_size += child_min;
- *natural_size += child_nat;
- }
- else if (!has_size_request)
- {
- *natural_size += NO_CONTENT_CHILD_NAT;
- }
-}
-
-
-static void
-gtk_window_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum_size,
- gint *natural_size)
-{
- GtkWindow *window;
- GtkWindowPrivate *priv;
- GtkWidget *child;
- int title_min = 0;
- int title_height = 0;
- GtkBorder window_border = { 0 };
- gboolean has_size_request;
-
- window = GTK_WINDOW (widget);
- priv = window->priv;
- child = gtk_bin_get_child (GTK_BIN (window));
- has_size_request = gtk_widget_has_size_request (widget);
-
- *minimum_size = 0;
- *natural_size = 0;
-
- if (priv->decorated &&
- !priv->fullscreen)
- {
- get_shadow_width (window, &window_border);
-
- width -= window_border.left + window_border.right;
-
- if (priv->title_box != NULL &&
- gtk_widget_get_visible (priv->title_box) &&
- gtk_widget_get_child_visible (priv->title_box))
- gtk_widget_get_preferred_height_for_width (priv->title_box,
- MAX (width, 0),
- &title_min,
- &title_height);
-
- *minimum_size = title_min +
- window_border.top + window_border.bottom;
-
- *natural_size = title_height +
- window_border.top + window_border.bottom;
- }
-
- if (child && gtk_widget_get_visible (child))
- {
- gint child_min, child_nat;
- gtk_widget_get_preferred_height_for_width (child, MAX (width, 0),
- &child_min, &child_nat);
-
- if (child_nat == 0 && width == 0 && !has_size_request)
- child_nat = NO_CONTENT_CHILD_NAT;
- *minimum_size += child_min;
- *natural_size += child_nat;
- }
- else if (!has_size_request)
- {
- *natural_size += NO_CONTENT_CHILD_NAT;
- }
-}
-
-static void
gtk_window_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_state)
{
diff --git a/tests/gtkoffscreenbox.c b/tests/gtkoffscreenbox.c
index 2879be67fc..ed456ebd8e 100644
--- a/tests/gtkoffscreenbox.c
+++ b/tests/gtkoffscreenbox.c
@@ -11,12 +11,13 @@
static void gtk_offscreen_box_realize (GtkWidget *widget);
static void gtk_offscreen_box_unrealize (GtkWidget *widget);
-static void gtk_offscreen_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural);
-static void gtk_offscreen_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural);
+static void gtk_offscreen_box_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline);
static void gtk_offscreen_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_offscreen_box_damage (GtkWidget *widget,
@@ -123,8 +124,7 @@ gtk_offscreen_box_class_init (GtkOffscreenBoxClass *klass)
widget_class->realize = gtk_offscreen_box_realize;
widget_class->unrealize = gtk_offscreen_box_unrealize;
- widget_class->get_preferred_width = gtk_offscreen_box_get_preferred_width;
- widget_class->get_preferred_height = gtk_offscreen_box_get_preferred_height;
+ widget_class->measure = gtk_offscreen_box_measure;
widget_class->size_allocate = gtk_offscreen_box_size_allocate;
widget_class->draw = gtk_offscreen_box_draw;
@@ -512,28 +512,24 @@ gtk_offscreen_box_size_request (GtkWidget *widget,
requisition->height = h;
}
-static void
-gtk_offscreen_box_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
-{
- GtkRequisition requisition;
-
- gtk_offscreen_box_size_request (widget, &requisition);
-
- *minimum = *natural = requisition.width;
-}
static void
-gtk_offscreen_box_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gtk_offscreen_box_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum,
+ int *natural,
+ int *minimum_baseline,
+ int *natural_baseline)
{
GtkRequisition requisition;
gtk_offscreen_box_size_request (widget, &requisition);
- *minimum = *natural = requisition.height;
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *minimum = *natural = requisition.width;
+ else
+ *minimum = *natural = requisition.height;
}
static void