summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-05-13 07:35:05 -0400
committerMatthias Clasen <mclasen@redhat.com>2023-05-13 07:36:35 -0400
commitf849823a07e5add3da545dc2d28f729e4d4805d3 (patch)
tree3a899e108240acbc3200d1c076c0de6a6eebb5fe
parent9a2d6d6d884e18b8f0c0a73e3b8ac886bbaa0803 (diff)
downloadgtk+-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.c24
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)) ||