[gtk+/wip/cssnode3: 16/18] css: Add min-width/height CSS properties
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/cssnode3: 16/18] css: Add min-width/height CSS properties
- Date: Tue, 24 Mar 2015 03:33:07 +0000 (UTC)
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]