st-theme-node: Paint elements in resource-scale scaled surfaces

Pass resource-scale to drawing phase, and use it to create texture
surfaces scaled with the widget current scaling.
Also redraw by default widgets when the resource scale changes.

https://bugzilla.gnome.org/show_bug.cgi?id=765011
This commit is contained in:
Marco Trevisan (Treviño)
2017-10-28 10:57:26 +02:00
committed by Jonas Ådahl
parent 5d4a804c90
commit 0141fef561
5 changed files with 118 additions and 46 deletions

View File

@ -418,8 +418,12 @@ st_widget_paint_background (StWidget *widget)
CoglFramebuffer *framebuffer;
StThemeNode *theme_node;
ClutterActorBox allocation;
float resource_scale;
guint8 opacity;
if (!st_widget_get_resource_scale (widget, &resource_scale))
return;
framebuffer = cogl_get_draw_framebuffer ();
theme_node = st_widget_get_theme_node (widget);
@ -431,13 +435,15 @@ st_widget_paint_background (StWidget *widget)
st_theme_node_transition_paint (priv->transition_animation,
framebuffer,
&allocation,
opacity);
opacity,
resource_scale);
else
st_theme_node_paint (theme_node,
current_paint_state (widget),
framebuffer,
&allocation,
opacity);
opacity,
resource_scale);
}
static void
@ -1495,7 +1501,16 @@ st_widget_resource_scale_notify (StWidget *widget,
GParamSpec *pspec,
gpointer data)
{
StWidgetPrivate *priv = st_widget_get_instance_private (widget);
int i;
for (i = 0; i < G_N_ELEMENTS (priv->paint_states); i++)
st_theme_node_paint_state_invalidate (&priv->paint_states[i]);
g_signal_emit (widget, signals[RESOURCE_SCALE_CHANGED], 0);
if (clutter_actor_is_mapped (CLUTTER_ACTOR (widget)))
clutter_actor_queue_redraw (CLUTTER_ACTOR (widget));
}
static void