mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-16 23:24:16 +00:00
renderborder: Don't snapshot all-invisible borders
If all of the borders have an alpha of 0, we don't need to snapshot anything.
This commit is contained in:
parent
99026d2df8
commit
09750f9937
@ -952,6 +952,7 @@ gtk_css_style_snapshot_border (GtkCssStyle *style,
|
||||
GtkBorderStyle border_style[4];
|
||||
GskRoundedRect border_box;
|
||||
GdkRGBA colors[4];
|
||||
graphene_simd4f_t alpha_test_vector;
|
||||
|
||||
/* Optimize the most common case of "This widget has no border" */
|
||||
if (border_width[0] == 0 &&
|
||||
@ -960,16 +961,20 @@ gtk_css_style_snapshot_border (GtkCssStyle *style,
|
||||
border_width[3] == 0)
|
||||
return;
|
||||
|
||||
border_style[0] = _gtk_css_border_style_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_TOP_STYLE));
|
||||
border_style[1] = _gtk_css_border_style_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE));
|
||||
border_style[2] = _gtk_css_border_style_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE));
|
||||
border_style[3] = _gtk_css_border_style_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_LEFT_STYLE));
|
||||
|
||||
colors[0] = *_gtk_css_rgba_value_get_rgba (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_TOP_COLOR));
|
||||
colors[1] = *_gtk_css_rgba_value_get_rgba (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_RIGHT_COLOR));
|
||||
colors[2] = *_gtk_css_rgba_value_get_rgba (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_BOTTOM_COLOR));
|
||||
colors[3] = *_gtk_css_rgba_value_get_rgba (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_LEFT_COLOR));
|
||||
|
||||
alpha_test_vector = graphene_simd4f_init (colors[0].alpha, colors[1].alpha, colors[2].alpha, colors[3].alpha);
|
||||
if (graphene_simd4f_is_zero4 (alpha_test_vector))
|
||||
return;
|
||||
|
||||
border_style[0] = _gtk_css_border_style_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_TOP_STYLE));
|
||||
border_style[1] = _gtk_css_border_style_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE));
|
||||
border_style[2] = _gtk_css_border_style_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE));
|
||||
border_style[3] = _gtk_css_border_style_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BORDER_LEFT_STYLE));
|
||||
|
||||
gtk_rounded_boxes_init_for_style (&border_box, NULL, NULL, style, 0, 0, width, height);
|
||||
|
||||
snapshot_border (snapshot, &border_box, border_width, colors, border_style);
|
||||
|
Loading…
Reference in New Issue
Block a user