[gtk+] css gadget: Adjust baselines for min-height



commit a754579e441df5ad34e338061d21217f1f5d5af8
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Feb 20 22:23:28 2016 -0500

    css gadget: Adjust baselines for min-height
    
    We were forcing the size to be at least min-height, but we left the
    baselines as they were, which had the effect of making text e.g
    in entries 'stick to the top'.
    
    With this change, we adjust the baseline to keep the ratio of
    baseline to height unchanged.

 gtk/gtkcssgadget.c |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkcssgadget.c b/gtk/gtkcssgadget.c
index 7a254eb..5bb7cac 100644
--- a/gtk/gtkcssgadget.c
+++ b/gtk/gtkcssgadget.c
@@ -515,6 +515,7 @@ gtk_css_gadget_get_preferred_size (GtkCssGadget   *gadget,
   GtkBorder margin, border, padding;
   int min_size, extra_size, extra_opposite, extra_baseline;
   int unused_minimum, unused_natural;
+  int forced_minimum, forced_natural;
 
   if (minimum == NULL)
     minimum = &unused_minimum;
@@ -567,16 +568,25 @@ gtk_css_gadget_get_preferred_size (GtkCssGadget   *gadget,
 
   g_warn_if_fail (*minimum <= *natural);
 
-  *minimum = MAX (min_size, *minimum);
-  *natural = MAX (min_size, *natural);
-
-  *minimum = MAX (0, *minimum + extra_size);
-  *natural = MAX (0, *natural + extra_size);
+  forced_minimum = MAX (*minimum, min_size);
+  forced_natural = MAX (*natural, min_size);
 
   if (minimum_baseline && *minimum_baseline > -1)
-    *minimum_baseline = MAX (0, *minimum_baseline + extra_baseline);
+    {
+      if (*minimum > 0)
+        *minimum_baseline = *minimum_baseline * forced_minimum / *minimum;
+      *minimum_baseline = MAX (0, *minimum_baseline + extra_baseline);
+    }
   if (natural_baseline && *natural_baseline > -1)
-    *natural_baseline = MAX (0, *natural_baseline + extra_baseline);
+    {
+      if (*natural > 0)
+        *natural_baseline = *natural_baseline * forced_natural / *natural;
+      *natural_baseline = MAX (0, *natural_baseline + extra_baseline);
+    }
+
+  *minimum = MAX (0, forced_minimum + extra_size);
+  *natural = MAX (0, forced_natural + extra_size);
+
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]