diff options
author | Benjamin Otte <otte@redhat.com> | 2023-03-30 06:58:40 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-04-01 20:49:40 +0200 |
commit | a29cf74e05caf084b91973371a619cb5b09625ec (patch) | |
tree | 4244f1dee37f0671682bec5a92ae3b5ebd49b461 | |
parent | c760131f6ff99cc5db7c5327e5475cbabf8b3efa (diff) | |
download | gtk+-a29cf74e05caf084b91973371a619cb5b09625ec.tar.gz |
columnviewcellwidget: Rewrite width unadjusting
Use GtkCssBoxes for that purpose. No more scary CSS math necessary in
the widget.
-rw-r--r-- | gtk/gtkcolumnviewcellwidget.c | 41 | ||||
-rw-r--r-- | gtk/gtkcolumnviewtitle.c | 43 |
2 files changed, 27 insertions, 57 deletions
diff --git a/gtk/gtkcolumnviewcellwidget.c b/gtk/gtkcolumnviewcellwidget.c index 7464a3c3f6..ecbc2806d6 100644 --- a/gtk/gtkcolumnviewcellwidget.c +++ b/gtk/gtkcolumnviewcellwidget.c @@ -23,8 +23,8 @@ #include "gtkcolumnviewcolumnprivate.h" #include "gtkcolumnviewrowwidgetprivate.h" +#include "gtkcssboxesprivate.h" #include "gtkcssnodeprivate.h" -#include "gtkcssnumbervalueprivate.h" #include "gtklistitemprivate.h" #include "gtklistitemwidgetprivate.h" #include "gtkprivate.h" @@ -73,34 +73,19 @@ gtk_column_view_cell_widget_teardown_object (GtkListFactoryWidget *fw, } static int -get_number (GtkCssValue *value) -{ - double d = _gtk_css_number_value_get (value, 100); - - if (d < 1) - return ceil (d); - else - return floor (d); -} - -static int unadjust_width (GtkWidget *widget, int width) { - GtkCssStyle *style; - int widget_margins; - int css_extra; - - style = gtk_css_node_get_style (gtk_widget_get_css_node (widget)); - css_extra = get_number (style->size->margin_left) + - get_number (style->size->margin_right) + - get_number (style->border->border_left_width) + - get_number (style->border->border_right_width) + - get_number (style->size->padding_left) + - get_number (style->size->padding_right); - widget_margins = widget->priv->margin.left + widget->priv->margin.right; - - return MAX (0, width - widget_margins - css_extra); + GtkCssBoxes boxes; + + if (width <= -1) + return -1; + + gtk_css_boxes_init_border_box (&boxes, + gtk_css_node_get_style (gtk_widget_get_css_node (widget)), + 0, 0, + width, 100000); + return MAX (0, floor (gtk_css_boxes_get_content_rect (&boxes)->size.width)); } static void @@ -114,9 +99,9 @@ gtk_column_view_cell_widget_measure (GtkWidget *widget, { GtkColumnViewCellWidget *cell = GTK_COLUMN_VIEW_CELL_WIDGET (widget); GtkWidget *child = gtk_widget_get_first_child (widget); - int fixed_width = gtk_column_view_column_get_fixed_width (cell->column); - int unadj_width; + int fixed_width, unadj_width; + fixed_width = gtk_column_view_column_get_fixed_width (cell->column); unadj_width = unadjust_width (widget, fixed_width); if (orientation == GTK_ORIENTATION_VERTICAL) diff --git a/gtk/gtkcolumnviewtitle.c b/gtk/gtkcolumnviewtitle.c index 6c7f729f95..b55e980821 100644 --- a/gtk/gtkcolumnviewtitle.c +++ b/gtk/gtkcolumnviewtitle.c @@ -24,6 +24,8 @@ #include "gtkcolumnviewprivate.h" #include "gtkcolumnviewcolumnprivate.h" #include "gtkcolumnviewsorterprivate.h" +#include "gtkcssboxesprivate.h" +#include "gtkcssnodeprivate.h" #include "gtkprivate.h" #include "gtklabel.h" #include "gtkwidgetprivate.h" @@ -32,8 +34,6 @@ #include "gtkgestureclick.h" #include "gtkpopovermenu.h" #include "gtknative.h" -#include "gtkcssnodeprivate.h" -#include "gtkcssnumbervalueprivate.h" struct _GtkColumnViewTitle { @@ -55,34 +55,19 @@ struct _GtkColumnViewTitleClass G_DEFINE_TYPE (GtkColumnViewTitle, gtk_column_view_title, GTK_TYPE_WIDGET) static int -get_number (GtkCssValue *value) -{ - double d = _gtk_css_number_value_get (value, 100); - - if (d < 1) - return ceil (d); - else - return floor (d); -} - -static int unadjust_width (GtkWidget *widget, int width) { - GtkCssStyle *style; - int widget_margins; - int css_extra; - - style = gtk_css_node_get_style (gtk_widget_get_css_node (widget)); - css_extra = get_number (style->size->margin_left) + - get_number (style->size->margin_right) + - get_number (style->border->border_left_width) + - get_number (style->border->border_right_width) + - get_number (style->size->padding_left) + - get_number (style->size->padding_right); - widget_margins = widget->priv->margin.left + widget->priv->margin.right; - - return MAX (0, width - widget_margins - css_extra); + GtkCssBoxes boxes; + + if (width <= -1) + return -1; + + gtk_css_boxes_init_border_box (&boxes, + gtk_css_node_get_style (gtk_widget_get_css_node (widget)), + 0, 0, + width, 100000); + return MAX (0, floor (gtk_css_boxes_get_content_rect (&boxes)->size.width)); } static void @@ -96,9 +81,9 @@ gtk_column_view_title_measure (GtkWidget *widget, { GtkColumnViewTitle *self = GTK_COLUMN_VIEW_TITLE (widget); GtkWidget *child = gtk_widget_get_first_child (widget); - int fixed_width = gtk_column_view_column_get_fixed_width (self->column); - int unadj_width; + int fixed_width, unadj_width; + fixed_width = gtk_column_view_column_get_fixed_width (self->column); unadj_width = unadjust_width (widget, fixed_width); if (orientation == GTK_ORIENTATION_VERTICAL) |