[gnome-shell/gnome-41] st/label: Compare shadow spec before invalidating shadow on style change
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gnome-41] st/label: Compare shadow spec before invalidating shadow on style change
- Date: Tue, 15 Feb 2022 16:57:31 +0000 (UTC)
commit 6303592c88b6d3bb22a8697cce4009f36b12e2e7
Author: Jonas Dreßler <verdre v0yd nl>
Date: Fri Mar 5 12:49:36 2021 +0100
st/label: Compare shadow spec before invalidating shadow on style change
Just like with the last commit for StEntry, check whether the text
shadow actually changed before invalidating the pipeline on style
changes of StLabel.
(cherry picked from commit 09903b6426cbed58ebc316f51378e6525e80caec)
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2180>
src/st/st-label.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
---
diff --git a/src/st/st-label.c b/src/st/st-label.c
index d531dc038c..0d48a47060 100644
--- a/src/st/st-label.c
+++ b/src/st/st-label.c
@@ -62,6 +62,8 @@ struct _StLabelPrivate
{
ClutterActor *label;
+ StShadow *shadow_spec;
+
CoglPipeline *text_shadow_pipeline;
float shadow_width;
float shadow_height;
@@ -119,8 +121,21 @@ static void
st_label_style_changed (StWidget *self)
{
StLabelPrivate *priv = ST_LABEL(self)->priv;
+ StThemeNode *theme_node;
+ StShadow *shadow_spec;
- g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
+ theme_node = st_widget_get_theme_node (self);
+
+ shadow_spec = st_theme_node_get_text_shadow (theme_node);
+ if (!priv->shadow_spec || !shadow_spec ||
+ !st_shadow_equal (shadow_spec, priv->shadow_spec))
+ {
+ g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
+
+ g_clear_pointer (&priv->shadow_spec, st_shadow_unref);
+ if (shadow_spec)
+ priv->shadow_spec = st_shadow_ref (shadow_spec);
+ }
_st_set_text_from_style ((ClutterText *)priv->label, st_widget_get_theme_node (self));
@@ -194,12 +209,10 @@ st_label_paint (ClutterActor *actor,
ClutterPaintContext *paint_context)
{
StLabelPrivate *priv = ST_LABEL (actor)->priv;
- StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
- StShadow *shadow_spec = st_theme_node_get_text_shadow (theme_node);
st_widget_paint_background (ST_WIDGET (actor), paint_context);
- if (shadow_spec)
+ if (priv->shadow_spec)
{
ClutterActorBox allocation;
float width, height;
@@ -222,7 +235,7 @@ st_label_paint (ClutterActor *actor,
priv->shadow_width = width;
priv->shadow_height = height;
priv->text_shadow_pipeline =
- _st_create_shadow_pipeline_from_actor (shadow_spec,
+ _st_create_shadow_pipeline_from_actor (priv->shadow_spec,
priv->label);
}
@@ -232,7 +245,7 @@ st_label_paint (ClutterActor *actor,
framebuffer =
clutter_paint_context_get_framebuffer (paint_context);
- _st_paint_shadow_with_opacity (shadow_spec,
+ _st_paint_shadow_with_opacity (priv->shadow_spec,
framebuffer,
priv->text_shadow_pipeline,
&allocation,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]