diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-05-13 07:35:05 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-05-13 07:36:35 -0400 |
commit | f849823a07e5add3da545dc2d28f729e4d4805d3 (patch) | |
tree | 3a899e108240acbc3200d1c076c0de6a6eebb5fe | |
parent | 9a2d6d6d884e18b8f0c0a73e3b8ac886bbaa0803 (diff) | |
download | gtk+-f849823a07e5add3da545dc2d28f729e4d4805d3.tar.gz |
popover: Stop making assumptions about corners
The popover tail drawing code was just assuming that
the corner values are numbers. Which they won't, anymore.
-rw-r--r-- | gtk/gtkpopover.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index b9fa4d2b72..bd3bc0c004 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -129,6 +129,7 @@ #include "gtkroundedboxprivate.h" #include "gsk/gskroundedrectprivate.h" #include "gtkcssshadowvalueprivate.h" +#include "gtkcsscornervalueprivate.h" #include "gdk/gdksurfaceprivate.h" @@ -1196,6 +1197,16 @@ gtk_popover_finalize (GObject *object) G_OBJECT_CLASS (gtk_popover_parent_class)->finalize (object); } +static double +get_border_radius (GtkWidget *widget) +{ + GtkCssStyle *style = gtk_css_node_get_style (gtk_widget_get_css_node (widget)); + + /* FIXME this is a very crude interpretation of border radius */ + return MAX (_gtk_css_corner_value_get_x (style->border->border_top_left_radius, 100), + _gtk_css_corner_value_get_y (style->border->border_top_left_radius, 100)); +} + static void gtk_popover_get_gap_coords (GtkPopover *popover, int *initial_x_out, @@ -1230,7 +1241,7 @@ gtk_popover_get_gap_coords (GtkPopover *popover, pos = priv->final_position; style = gtk_css_node_get_style (gtk_widget_get_css_node (priv->contents_widget)); - border_radius = _gtk_css_number_value_get (style->border->border_top_left_radius, 100); + border_radius = round (get_border_radius (widget)); border_top = _gtk_css_number_value_get (style->border->border_top_width, 100); border_right = _gtk_css_number_value_get (style->border->border_right_width, 100); border_bottom = _gtk_css_number_value_get (style->border->border_bottom_width, 100); @@ -1430,15 +1441,6 @@ gtk_popover_update_shape (GtkPopover *popover) } static int -get_border_radius (GtkWidget *widget) -{ - GtkCssStyle *style; - - style = gtk_css_node_get_style (gtk_widget_get_css_node (widget)); - return round (_gtk_css_number_value_get (style->border->border_top_left_radius, 100)); -} - -static int get_minimal_size (GtkPopover *popover, GtkOrientation orientation) { @@ -1448,7 +1450,7 @@ get_minimal_size (GtkPopover *popover, int tail_gap_width = priv->has_arrow ? TAIL_GAP_WIDTH : 0; int min_width, min_height; - minimal_size = 2 * get_border_radius (GTK_WIDGET (priv->contents_widget)); + minimal_size = 2 * round (get_border_radius (GTK_WIDGET (priv->contents_widget))); pos = priv->position; if ((orientation == GTK_ORIENTATION_HORIZONTAL && POS_IS_VERTICAL (pos)) || |