[gtk/style-context-redux: 164/164] popover: Stop using style context getters
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/style-context-redux: 164/164] popover: Stop using style context getters
- Date: Sat, 25 Jan 2020 19:21:05 +0000 (UTC)
commit ac902e697e9c972d4782acf14a8f8191e625609b
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Jan 18 11:48:30 2020 -0500
popover: Stop using style context getters
gtk/gtkpopover.c | 102 +++++++++++++++++++++++++++++++------------------------
1 file changed, 58 insertions(+), 44 deletions(-)
---
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index a963b35110..24e154e8a9 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -117,7 +117,10 @@
#include "gtkmenusectionboxprivate.h"
#include "gdk/gdkeventsprivate.h"
#include "gtkpointerfocusprivate.h"
+#include "gtkcsstypesprivate.h"
#include "gtkcssnodeprivate.h"
+#include "gtkcsscolorvalueprivate.h"
+#include "gtkcssnumbervalueprivate.h"
#include "gtksnapshot.h"
#include "gtkrender.h"
@@ -207,16 +210,15 @@ gtk_popover_native_get_surface_transform (GtkNative *native,
int *x,
int *y)
{
- GtkStyleContext *context;
- GtkBorder margin, border, padding;
-
- context = gtk_widget_get_style_context (GTK_WIDGET (native));
- gtk_style_context_get_margin (context, &margin);
- gtk_style_context_get_border (context, &border);
- gtk_style_context_get_padding (context, &padding);
+ GtkCssStyle *style;
- *x = margin.left + border.left + padding.left;
- *y = margin.top + border.top + padding.top;
+ style = gtk_css_node_get_style (gtk_widget_get_css_node (GTK_WIDGET (native)));
+ *x = _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_MARGIN_LEFT), 100) +
+ _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH), 100)
+
+ _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_PADDING_LEFT), 100);
+ *y = _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_MARGIN_TOP), 100) +
+ _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_TOP_WIDTH), 100) +
+ _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_PADDING_TOP), 100);
}
static void
@@ -560,7 +562,6 @@ gtk_popover_init (GtkPopover *popover)
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GtkWidget *widget = GTK_WIDGET (popover);
GtkEventController *controller;
- GtkStyleContext *context;
priv->position = GTK_POS_BOTTOM;
priv->final_position = GTK_POS_BOTTOM;
@@ -586,8 +587,8 @@ gtk_popover_init (GtkPopover *popover)
gtk_widget_set_layout_manager (priv->contents_widget, gtk_bin_layout_new ());
gtk_widget_set_parent (priv->contents_widget, GTK_WIDGET (popover));
- context = gtk_widget_get_style_context (GTK_WIDGET (popover));
- gtk_style_context_add_class (context, GTK_STYLE_CLASS_BACKGROUND);
+ gtk_css_node_add_class (gtk_widget_get_css_node (GTK_WIDGET (popover)),
+ g_quark_from_static_string (GTK_STYLE_CLASS_BACKGROUND));
add_actions (popover);
}
@@ -775,10 +776,10 @@ gtk_popover_get_gap_coords (GtkPopover *popover,
gint tip_x, tip_y;
gint final_x, final_y;
GtkPositionType pos;
- gint border_radius;
- GtkStyleContext *context;
- GtkBorder border;
+ int border_top, border_right, border_bottom;
+ int border_radius;
int popover_width, popover_height;
+ GtkCssStyle *style;
popover_width = gtk_widget_get_allocated_width (widget);
popover_height = gtk_widget_get_allocated_height (widget);
@@ -795,28 +796,27 @@ gtk_popover_get_gap_coords (GtkPopover *popover,
rect.x -= priv->final_rect.x;
rect.y -= priv->final_rect.y;
- context = gtk_widget_get_style_context (priv->contents_widget);
-
pos = priv->final_position;
- gtk_style_context_get_border (context, &border);
- gtk_style_context_get (context,
- GTK_STYLE_PROPERTY_BORDER_RADIUS, &border_radius,
- NULL);
+ style = gtk_css_node_get_style (gtk_widget_get_css_node (widget));
+ border_radius = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_TOP_LEFT_RADIUS), 100);
+ border_top = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_TOP_WIDTH), 100);
+ border_right = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH), 100);
+ border_bottom = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH), 100);
if (pos == GTK_POS_BOTTOM || pos == GTK_POS_RIGHT)
{
tip = 0;
- base = TAIL_HEIGHT + border.top;
+ base = TAIL_HEIGHT + border_top;
}
else if (pos == GTK_POS_TOP)
{
- base = popover_height - border.bottom - TAIL_HEIGHT;
+ base = popover_height - border_bottom - TAIL_HEIGHT;
tip = popover_height;
}
else if (pos == GTK_POS_LEFT)
{
- base = popover_width - border.right - TAIL_HEIGHT;
+ base = popover_width - border_right - TAIL_HEIGHT;
tip = popover_width;
}
else
@@ -870,11 +870,16 @@ static void
get_margin (GtkWidget *widget,
GtkBorder *border)
{
- GtkStyleContext *context;
+ GtkCssStyle *style;
- context = gtk_widget_get_style_context (widget);
- gtk_style_context_get_margin (context, border);
+ style = gtk_css_node_get_style (gtk_widget_get_css_node (widget));
+
+ border->top = _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_MARGIN_TOP),
100);
+ border->right = _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_MARGIN_RIGHT),
100);
+ border->bottom = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_MARGIN_BOTTOM), 100);
+ border->left = _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_MARGIN_LEFT),
100);
}
+
static void
gtk_popover_get_rect_for_size (GtkPopover *popover,
int popover_width,
@@ -923,6 +928,20 @@ gtk_popover_get_rect_coords (GtkPopover *popover,
*h_out = rect.height;
}
+static void
+get_border (GtkCssNode *node,
+ GtkBorder *border)
+{
+ GtkCssStyle *style;
+
+ style = gtk_css_node_get_style (node);
+
+ border->top = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_TOP_WIDTH), 100);
+ border->right = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH), 100);
+ border->bottom = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH), 100);
+ border->left = _gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH), 100);
+}
+
static void
gtk_popover_apply_tail_path (GtkPopover *popover,
cairo_t *cr)
@@ -931,14 +950,12 @@ gtk_popover_apply_tail_path (GtkPopover *popover,
gint initial_x, initial_y;
gint tip_x, tip_y;
gint final_x, final_y;
- GtkStyleContext *context;
GtkBorder border;
if (!priv->relative_to)
return;
- context = gtk_widget_get_style_context (priv->contents_widget);
- gtk_style_context_get_border (context, &border);
+ get_border (priv->arrow_node, &border);
cairo_set_line_width (cr, 1);
gtk_popover_get_gap_coords (popover,
@@ -957,11 +974,9 @@ gtk_popover_fill_border_path (GtkPopover *popover,
{
GtkWidget *widget = GTK_WIDGET (popover);
GtkAllocation allocation;
- GtkStyleContext *context;
int x, y, w, h;
GskRoundedRect box;
- context = gtk_widget_get_style_context (widget);
gtk_widget_get_allocation (widget, &allocation);
cairo_set_source_rgba (cr, 0, 0, 0, 1);
@@ -974,7 +989,7 @@ gtk_popover_fill_border_path (GtkPopover *popover,
gtk_rounded_boxes_init_for_style (&box,
NULL, NULL,
- gtk_style_context_lookup_style (context),
+ gtk_css_node_get_style (gtk_widget_get_css_node (widget)),
x, y, w, h);
gsk_rounded_rect_path (&box, cr);
cairo_fill (cr);
@@ -1016,14 +1031,10 @@ gtk_popover_update_shape (GtkPopover *popover)
static gint
get_border_radius (GtkWidget *widget)
{
- GtkStyleContext *context;
- gint border_radius;
+ GtkCssStyle *style;
- context = gtk_widget_get_style_context (widget);
- gtk_style_context_get (context,
- GTK_STYLE_PROPERTY_BORDER_RADIUS, &border_radius,
- NULL);
- return border_radius;
+ style = gtk_css_node_get_style (gtk_widget_get_css_node (widget));
+ return round (_gtk_css_number_value_get (gtk_css_style_get_value (style,
GTK_CSS_PROPERTY_BORDER_TOP_LEFT_RADIUS), 100));
}
static gint
@@ -1146,9 +1157,10 @@ create_arrow_render_node (GtkPopover *popover)
gtk_popover_apply_tail_path (popover, cr);
cairo_clip (cr);
+ get_border (priv->arrow_node, &border);
+
context = gtk_widget_get_style_context (widget);
gtk_style_context_save_to_node (context, priv->arrow_node);
- gtk_style_context_get_border (context, &border);
/* Render the arrow background */
gtk_render_background (context, cr,
@@ -1159,15 +1171,17 @@ create_arrow_render_node (GtkPopover *popover)
/* Render the border of the arrow tip */
if (border.bottom > 0)
{
- GdkRGBA *border_color;
+ GtkCssValue *value;
+ const GdkRGBA *border_color;
+
+ value = gtk_css_style_get_value (gtk_css_node_get_style (priv->arrow_node),
GTK_CSS_PROPERTY_BORDER_LEFT_COLOR);
+ border_color = gtk_css_color_value_get_rgba (value);
- gtk_style_context_get (context, "border-color", &border_color, NULL);
gtk_popover_apply_tail_path (popover, cr);
gdk_cairo_set_source_rgba (cr, border_color);
cairo_set_line_width (cr, border.bottom + 1);
cairo_stroke (cr);
- gdk_rgba_free (border_color);
}
cairo_restore (cr);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]