diff options
author | Timm Bäder <mail@baedert.org> | 2020-06-26 08:00:04 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2020-06-27 10:51:06 +0200 |
commit | 20935f678b2ae674cd818e51395ae5ca5511e72f (patch) | |
tree | 7cb656fad1f3b94f1eec9d23b81bf8e99d16d7b7 | |
parent | c41b4130c612105da5351cdd19e2023769d9942e (diff) | |
download | gtk+-20935f678b2ae674cd818e51395ae5ca5511e72f.tar.gz |
scale: Rearrange child widgets
Always keep the order:
- [value]
- [marks.top]
- [marks.bottom]
- trough
Which makes sense given the rendering order. Slider should be drawn
after the marks.
Makes it possible to simply remove the custom snapshot implementations
in scale and range. And Adwaita does not depend on the node order
anyway.
-rw-r--r-- | gtk/gtkrange.c | 11 | ||||
-rw-r--r-- | gtk/gtkscale.c | 58 | ||||
-rw-r--r-- | testsuite/css/nodes/scale.nodes | 8 |
3 files changed, 18 insertions, 59 deletions
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index e90a48c684..91f16b5133 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -251,16 +251,6 @@ static guint signals[LAST_SIGNAL]; static GParamSpec *properties[LAST_PROP]; static void -gtk_range_snapshot (GtkWidget *widget, - GtkSnapshot *snapshot) -{ - GtkRange *range = GTK_RANGE (widget); - GtkRangePrivate *priv = gtk_range_get_instance_private (range); - - gtk_widget_snapshot_child (widget, priv->trough_widget, snapshot); -} - -static void gtk_range_class_init (GtkRangeClass *class) { GObjectClass *gobject_class; @@ -275,7 +265,6 @@ gtk_range_class_init (GtkRangeClass *class) gobject_class->dispose = gtk_range_dispose; widget_class->measure = gtk_range_measure; - widget_class->snapshot = gtk_range_snapshot; widget_class->size_allocate = gtk_range_size_allocate; widget_class->unmap = gtk_range_unmap; widget_class->direction_changed = gtk_range_direction_changed; diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c index 455a004ac9..6e739f1b46 100644 --- a/gtk/gtkscale.c +++ b/gtk/gtkscale.c @@ -79,22 +79,23 @@ * * |[<!-- language="plain" --> * scale[.fine-tune][.marks-before][.marks-after] + * ├── [value][.top][.right][.bottom][.left] * ├── marks.top * │ ├── mark * │ ┊ ├── [label] * │ ┊ ╰── indicator * ┊ ┊ * │ ╰── mark - * ├── [value][.top][.right][.bottom][.left] - * ├── trough - * │ ├── [fill] - * │ ├── [highlight] - * │ ╰── slider - * ╰── marks.bottom - * ├── mark - * ┊ ├── indicator - * ┊ ╰── [label] - * ╰── mark + * ├── marks.bottom + * │ ├── mark + * │ ┊ ├── indicator + * │ ┊ ╰── [label] + * ┊ ┊ + * │ ╰── mark + * ╰── trough + * ├── [fill] + * ├── [highlight] + * ╰── slider * ]| * * GtkScale has a main CSS node with name scale and a subnode for its contents, @@ -197,8 +198,6 @@ static void gtk_scale_measure (GtkWidget *widget, static void gtk_scale_get_range_border (GtkRange *range, GtkBorder *border); static void gtk_scale_finalize (GObject *object); -static void gtk_scale_snapshot (GtkWidget *widget, - GtkSnapshot *snapshot); static void gtk_scale_real_get_layout_offsets (GtkScale *scale, gint *x, gint *y); @@ -661,7 +660,6 @@ gtk_scale_class_init (GtkScaleClass *class) gobject_class->notify = gtk_scale_notify; gobject_class->finalize = gtk_scale_finalize; - widget_class->snapshot = gtk_scale_snapshot; widget_class->size_allocate = gtk_scale_size_allocate; widget_class->measure = gtk_scale_measure; widget_class->grab_focus = gtk_widget_grab_focus_self; @@ -1093,14 +1091,9 @@ gtk_scale_set_draw_value (GtkScale *scale, "css-name", "value", "label", txt, NULL); - g_free (txt); - if (priv->value_pos == GTK_POS_TOP || priv->value_pos == GTK_POS_LEFT) - gtk_widget_insert_after (priv->value_widget, GTK_WIDGET (scale), NULL); - else - gtk_widget_insert_before (priv->value_widget, GTK_WIDGET (scale), NULL); - + gtk_widget_insert_after (priv->value_widget, GTK_WIDGET (scale), NULL); gtk_range_set_round_digits (GTK_RANGE (scale), priv->digits); update_value_position (scale); update_label_request (scale); @@ -1470,25 +1463,6 @@ gtk_scale_measure (GtkWidget *widget, } static void -gtk_scale_snapshot (GtkWidget *widget, - GtkSnapshot *snapshot) -{ - GtkScale *scale = GTK_SCALE (widget); - GtkScalePrivate *priv = gtk_scale_get_instance_private (scale); - - if (priv->top_marks_widget) - gtk_widget_snapshot_child (widget, priv->top_marks_widget, snapshot); - - if (priv->bottom_marks_widget) - gtk_widget_snapshot_child (widget, priv->bottom_marks_widget, snapshot); - - if (priv->value_widget) - gtk_widget_snapshot_child (widget, priv->value_widget, snapshot); - - GTK_WIDGET_CLASS (gtk_scale_parent_class)->snapshot (widget, snapshot); -} - -static void gtk_scale_real_get_layout_offsets (GtkScale *scale, gint *x, gint *y) @@ -1722,9 +1696,7 @@ gtk_scale_add_mark (GtkScale *scale, gtk_widget_insert_after (priv->top_marks_widget, GTK_WIDGET (scale), - (priv->value_widget && - (priv->value_pos == GTK_POS_TOP || priv->value_pos == GTK_POS_LEFT)) ? - priv->value_widget : NULL); + priv->value_widget); gtk_widget_add_css_class (priv->top_marks_widget, GTK_STYLE_CLASS_TOP); } marks_widget = priv->top_marks_widget; @@ -1742,9 +1714,7 @@ gtk_scale_add_mark (GtkScale *scale, gtk_widget_insert_before (priv->bottom_marks_widget, GTK_WIDGET (scale), - (priv->value_widget && - (priv->value_pos == GTK_POS_BOTTOM || priv->value_pos == GTK_POS_RIGHT)) ? - priv->value_widget: NULL); + gtk_range_get_trough_widget (GTK_RANGE (scale))); gtk_widget_add_css_class (priv->bottom_marks_widget, GTK_STYLE_CLASS_BOTTOM); } marks_widget = priv->bottom_marks_widget; diff --git a/testsuite/css/nodes/scale.nodes b/testsuite/css/nodes/scale.nodes index 45c62bf355..f059ba4b5a 100644 --- a/testsuite/css/nodes/scale.nodes +++ b/testsuite/css/nodes/scale.nodes @@ -35,17 +35,14 @@ window.background:dir(ltr) mark:dir(ltr) label:dir(ltr) indicator:dir(ltr) - trough:dir(ltr) - highlight.top:dir(ltr) - slider:dir(ltr) marks.bottom:dir(ltr) mark:dir(ltr) indicator:dir(ltr) label:dir(ltr) - scale.horizontal.marks-after:dir(ltr) trough:dir(ltr) highlight.top:dir(ltr) slider:dir(ltr) + scale.horizontal.marks-after:dir(ltr) marks.bottom:dir(ltr) mark:dir(ltr) indicator:dir(ltr) @@ -53,3 +50,6 @@ window.background:dir(ltr) mark:dir(ltr) indicator:dir(ltr) label:dir(ltr) + trough:dir(ltr) + highlight.top:dir(ltr) + slider:dir(ltr) |