Merge branch 'baseline-fixes' into 'main'
Baseline & measuring fixes See merge request GNOME/gtk!6373
This commit is contained in:
@@ -282,6 +282,8 @@ gtk_center_layout_measure_opposite (GtkCenterLayout *self,
|
||||
int total_nat, above_nat, below_nat;
|
||||
GtkWidget *child[3];
|
||||
GtkRequestedSize sizes[3];
|
||||
gboolean have_baseline = FALSE;
|
||||
gboolean align_baseline = FALSE;
|
||||
int i;
|
||||
|
||||
child[0] = self->start_widget;
|
||||
@@ -305,27 +307,33 @@ gtk_center_layout_measure_opposite (GtkCenterLayout *self,
|
||||
&child_min, &child_nat,
|
||||
&child_min_baseline, &child_nat_baseline);
|
||||
|
||||
if (child_min_baseline >= 0)
|
||||
total_min = MAX (total_min, child_min);
|
||||
total_nat = MAX (total_nat, child_nat);
|
||||
|
||||
if (orientation == GTK_ORIENTATION_VERTICAL && child_min_baseline >= 0)
|
||||
{
|
||||
have_baseline = TRUE;
|
||||
if (gtk_widget_get_valign (child[i]) == GTK_ALIGN_BASELINE_FILL ||
|
||||
gtk_widget_get_valign (child[i]) == GTK_ALIGN_BASELINE_CENTER)
|
||||
align_baseline = TRUE;
|
||||
|
||||
below_min = MAX (below_min, child_min - child_min_baseline);
|
||||
above_min = MAX (above_min, child_min_baseline);
|
||||
below_nat = MAX (below_nat, child_nat - child_nat_baseline);
|
||||
above_nat = MAX (above_nat, child_nat_baseline);
|
||||
}
|
||||
else
|
||||
{
|
||||
total_min = MAX (total_min, child_min);
|
||||
total_nat = MAX (total_nat, child_nat);
|
||||
}
|
||||
}
|
||||
|
||||
if (above_min >= 0)
|
||||
if (have_baseline)
|
||||
{
|
||||
int min_baseline = -1;
|
||||
int nat_baseline = -1;
|
||||
|
||||
total_min = MAX (total_min, above_min + below_min);
|
||||
total_nat = MAX (total_nat, above_nat + below_nat);
|
||||
if (align_baseline)
|
||||
{
|
||||
total_min = MAX (total_min, above_min + below_min);
|
||||
total_nat = MAX (total_nat, above_nat + below_nat);
|
||||
}
|
||||
|
||||
switch (self->baseline_pos)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user