[gtk+/wip/cssnode3: 16/18] css: Add min-width/height CSS properties



commit c5d00ae1195a4e9f3890be2a3985fb80c71d64f2
Author: Benjamin Otte <otte redhat com>
Date:   Thu Dec 13 03:10:25 2012 +0100

    css: Add min-width/height CSS properties
    
    Use them for the minimum size during size requests.

 gtk/gtkcssnodeutils.c         |    9 ++++++++-
 gtk/gtkcssstylepropertyimpl.c |   28 ++++++++++++++++++++++++++++
 gtk/gtkcsstypesprivate.h      |    2 ++
 3 files changed, 38 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkcssnodeutils.c b/gtk/gtkcssnodeutils.c
index 3e1fc33..3677d3d 100644
--- a/gtk/gtkcssnodeutils.c
+++ b/gtk/gtkcssnodeutils.c
@@ -114,7 +114,7 @@ gtk_css_node_get_preferred_size (GtkCssNode         *cssnode,
 {
   GtkCssStyle *style;
   GtkBorder border, padding;
-  int extra_size, extra_opposite, extra_baseline;
+  int min_size, extra_size, extra_opposite, extra_baseline;
 
   if (!get_content_size_func)
     get_content_size_func = get_content_size_func_default;
@@ -126,12 +126,14 @@ gtk_css_node_get_preferred_size (GtkCssNode         *cssnode,
       extra_size = border.left + border.right + padding.left + padding.right;
       extra_opposite = border.top + border.bottom + padding.top + padding.bottom;
       extra_baseline = border.left + padding.left;
+      min_size = get_number (style, GTK_CSS_PROPERTY_MIN_WIDTH);
     }
   else
     {
       extra_size = border.top + border.bottom + padding.top + padding.bottom;
       extra_opposite = border.left + border.right + padding.left + padding.right;
       extra_baseline = border.top + padding.top;
+      min_size = get_number (style, GTK_CSS_PROPERTY_MIN_HEIGHT);
     }
 
   if (for_size > -1)
@@ -149,6 +151,11 @@ gtk_css_node_get_preferred_size (GtkCssNode         *cssnode,
                          minimum_baseline, natural_baseline,
                          get_content_size_data);
 
+  g_warn_if_fail (*minimum <= *natural);
+
+  *minimum = MAX (min_size, *minimum);
+  *natural = MAX (min_size, *natural);
+
   *minimum += extra_size;
   *natural += extra_size;
 
diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c
index 45fa695..e6f77ef 100644
--- a/gtk/gtkcssstylepropertyimpl.c
+++ b/gtk/gtkcssstylepropertyimpl.c
@@ -805,6 +805,15 @@ border_image_width_parse (GtkCssStyleProperty *property,
 }
 
 static GtkCssValue *
+minmax_parse (GtkCssStyleProperty *property,
+              GtkCssParser        *parser)
+{
+  return _gtk_css_number_value_parse (parser,
+                                      GTK_CSS_PARSE_LENGTH
+                                      | GTK_CSS_POSITIVE_ONLY);
+}
+
+static GtkCssValue *
 transition_property_parse_one (GtkCssParser *parser)
 {
   GtkCssValue *value;
@@ -1529,6 +1538,25 @@ _gtk_css_style_property_init_properties (void)
                                           NULL,
                                           _gtk_css_transform_value_new_none ());
 
+  gtk_css_style_property_register        ("min-width",
+                                          GTK_CSS_PROPERTY_MIN_WIDTH,
+                                          G_TYPE_NONE,
+                                          GTK_STYLE_PROPERTY_ANIMATED,
+                                          GTK_CSS_AFFECTS_SIZE,
+                                          minmax_parse,
+                                          NULL,
+                                          NULL,
+                                          _gtk_css_number_value_new (0, GTK_CSS_PX));
+  gtk_css_style_property_register        ("min-height",
+                                          GTK_CSS_PROPERTY_MIN_HEIGHT,
+                                          G_TYPE_NONE,
+                                          GTK_STYLE_PROPERTY_ANIMATED,
+                                          GTK_CSS_AFFECTS_SIZE,
+                                          minmax_parse,
+                                          NULL,
+                                          NULL,
+                                          _gtk_css_number_value_new (0, GTK_CSS_PX));
+
   gtk_css_style_property_register        ("transition-property",
                                           GTK_CSS_PROPERTY_TRANSITION_PROPERTY,
                                           G_TYPE_NONE,
diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h
index 1f68e9c..2b6b80c 100644
--- a/gtk/gtkcsstypesprivate.h
+++ b/gtk/gtkcsstypesprivate.h
@@ -164,6 +164,8 @@ enum { /*< skip >*/
   GTK_CSS_PROPERTY_ICON_SHADOW,
   GTK_CSS_PROPERTY_ICON_STYLE,
   GTK_CSS_PROPERTY_ICON_TRANSFORM,
+  GTK_CSS_PROPERTY_MIN_WIDTH,
+  GTK_CSS_PROPERTY_MIN_HEIGHT,
   GTK_CSS_PROPERTY_TRANSITION_PROPERTY,
   GTK_CSS_PROPERTY_TRANSITION_DURATION,
   GTK_CSS_PROPERTY_TRANSITION_TIMING_FUNCTION,


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