switch: Fix up baseline handling
authorMatthias Clasen <mclasen@redhat.com>
Thu, 27 Apr 2023 20:18:20 +0000 (22:18 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 28 Apr 2023 12:52:05 +0000 (08:52 -0400)
We need to report a baseline for baseline alignment
to work...

gtk/gtkswitch.c

index 19f62f576d1cc360027b5718f423c99681668cac..31d2d234f5daa8b1169d6b819338d426108038b2 100644 (file)
@@ -301,13 +301,14 @@ gtk_switch_measure (GtkWidget      *widget,
   GtkSwitch *self = GTK_SWITCH (widget);
   int slider_minimum, slider_natural;
   int on_nat, off_nat;
+  int on_baseline, off_baseline;
 
   gtk_widget_measure (self->slider, orientation, -1,
                       &slider_minimum, &slider_natural,
                       NULL, NULL);
 
-  gtk_widget_measure (self->on_image, orientation, for_size, NULL, &on_nat, NULL, NULL);
-  gtk_widget_measure (self->off_image, orientation, for_size, NULL, &off_nat, NULL, NULL);
+  gtk_widget_measure (self->on_image, orientation, for_size, NULL, &on_nat, NULL, &on_baseline);
+  gtk_widget_measure (self->off_image, orientation, for_size, NULL, &off_nat, NULL, &off_baseline);
 
   if (orientation == GTK_ORIENTATION_HORIZONTAL)
     {
@@ -318,8 +319,12 @@ gtk_switch_measure (GtkWidget      *widget,
   else
     {
       int text_height = MAX (on_nat, off_nat);
+
       *minimum = MAX (slider_minimum, text_height);
       *natural = MAX (slider_natural, text_height);
+
+      *minimum_baseline = MAX (on_baseline, off_baseline) + MAX ((slider_minimum - text_height) / 2, 0);
+      *natural_baseline = MAX (on_baseline, off_baseline) + MAX ((slider_natural - text_height) / 2, 0);
     }
 }