diff options
author | Timm Bäder <mail@baedert.org> | 2016-10-22 16:06:14 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2016-10-22 19:05:47 +0200 |
commit | 9992a616efa47205ac16ed8be255eda5e7aadf6c (patch) | |
tree | 3879538642de33a77472bafe3e6e8afea3b3e343 /gtk/gtkapplicationwindow.c | |
parent | 6525b95e2502080c08b65317c910204c2b6125da (diff) | |
download | gtk+-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.
Diffstat (limited to 'gtk/gtkapplicationwindow.c')
-rw-r--r-- | gtk/gtkapplicationwindow.c | 136 |
1 files changed, 50 insertions, 86 deletions
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; |