entry, searchentry: Fix measuring baseline
authorSergey Bugaev <bugaevc@gmail.com>
Sat, 2 Sep 2023 18:31:18 +0000 (21:31 +0300)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 19 Sep 2023 19:20:57 +0000 (15:20 -0400)
If the entry has icons, we may end up increasing our minimum and natural
height compared to the values the text child returned. In that case, we
should also adjust the baseline values to account for the text being
shifted down.

Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
gtk/gtkentry.c
gtk/gtksearchentry.c

index 67281c2f36ec8bd7a2ca5a525bcaad5c9d816587..30521f640cabd9ac9d1e4522cad0b5c9bf7ca070 100644 (file)
@@ -1646,14 +1646,18 @@ gtk_entry_measure (GtkWidget      *widget,
 {
   GtkEntry *entry = GTK_ENTRY (widget);
   GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
+  int text_min, text_nat;
   int i;
 
   gtk_widget_measure (priv->text,
                       orientation,
                       for_size,
-                      minimum, natural,
+                      &text_min, &text_nat,
                       minimum_baseline, natural_baseline);
 
+  *minimum = text_min;
+  *natural = text_nat;
+
   for (i = 0; i < MAX_ICONS; i++)
     {
       EntryIconInfo *icon_info = priv->icons[i];
@@ -1691,6 +1695,14 @@ gtk_entry_measure (GtkWidget      *widget,
       *minimum = MAX (*minimum, prog_min);
       *natural = MAX (*natural, prog_nat);
     }
+
+  if (orientation == GTK_ORIENTATION_VERTICAL)
+    {
+      if (G_LIKELY (*minimum_baseline >= 0))
+        *minimum_baseline += (*minimum - text_min) / 2;
+      if (G_LIKELY (*natural_baseline >= 0))
+        *natural_baseline += (*natural - text_nat) / 2;
+    }
 }
 
 static void
index 6191d1f01e6dbb4875218549573c6825bdf26647..eb35fc1bd469414faa3dfa97324fb1515339fc2d 100644 (file)
@@ -301,6 +301,7 @@ gtk_search_entry_measure (GtkWidget      *widget,
                           int             *natural_baseline)
 {
   GtkSearchEntry *entry = GTK_SEARCH_ENTRY (widget);
+  int text_min, text_nat;
   int icon_min, icon_nat;
   int spacing;
 
@@ -309,9 +310,12 @@ gtk_search_entry_measure (GtkWidget      *widget,
   gtk_widget_measure (entry->entry,
                       orientation,
                       for_size,
-                      minimum, natural,
+                      &text_min, &text_nat,
                       minimum_baseline, natural_baseline);
 
+  *minimum = text_min;
+  *natural = text_nat;
+
   gtk_widget_measure (entry->search_icon,
                       GTK_ORIENTATION_HORIZONTAL,
                       -1,
@@ -344,6 +348,11 @@ gtk_search_entry_measure (GtkWidget      *widget,
     {
       *minimum = MAX (*minimum, icon_min);
       *natural = MAX (*natural, icon_nat);
+
+      if (G_LIKELY (*minimum_baseline >= 0))
+        *minimum_baseline += (*minimum - text_min) / 2;
+      if (G_LIKELY (*natural_baseline >= 0))
+        *natural_baseline += (*natural - text_nat) / 2;
     }
 }