st/icon: Store paint scaled icon size instead of normal size
This makes it easier to track size changes when the paint scale changes, since in those cases we basically want to do the same thing as when the normal icon size changes: Request a new texture from the cache. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/953>
This commit is contained in:
parent
67596e7c83
commit
13562033d7
@ -334,7 +334,9 @@ st_icon_init (StIcon *self)
|
|||||||
CLUTTER_BIN_ALIGNMENT_FILL);
|
CLUTTER_BIN_ALIGNMENT_FILL);
|
||||||
clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), layout_manager);
|
clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), layout_manager);
|
||||||
|
|
||||||
self->priv->icon_size = DEFAULT_ICON_SIZE;
|
/* Set the icon size to -1 here to make sure we apply the scale to the
|
||||||
|
* default size on the first "style-changed" signal. */
|
||||||
|
self->priv->icon_size = -1;
|
||||||
self->priv->prop_icon_size = -1;
|
self->priv->prop_icon_size = -1;
|
||||||
|
|
||||||
self->priv->shadow_pipeline = NULL;
|
self->priv->shadow_pipeline = NULL;
|
||||||
@ -462,6 +464,9 @@ st_icon_update (StIcon *icon)
|
|||||||
if (theme_node == NULL)
|
if (theme_node == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (priv->icon_size <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon));
|
stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon));
|
||||||
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
|
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
|
||||||
g_object_get (context, "scale-factor", &paint_scale, NULL);
|
g_object_get (context, "scale-factor", &paint_scale, NULL);
|
||||||
@ -472,7 +477,7 @@ st_icon_update (StIcon *icon)
|
|||||||
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
||||||
theme_node,
|
theme_node,
|
||||||
priv->gicon,
|
priv->gicon,
|
||||||
priv->icon_size,
|
priv->icon_size / paint_scale,
|
||||||
paint_scale,
|
paint_scale,
|
||||||
resource_scale);
|
resource_scale);
|
||||||
|
|
||||||
@ -480,7 +485,7 @@ st_icon_update (StIcon *icon)
|
|||||||
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
||||||
theme_node,
|
theme_node,
|
||||||
priv->fallback_gicon,
|
priv->fallback_gicon,
|
||||||
priv->icon_size,
|
priv->icon_size / paint_scale,
|
||||||
paint_scale,
|
paint_scale,
|
||||||
resource_scale);
|
resource_scale);
|
||||||
|
|
||||||
@ -488,7 +493,7 @@ st_icon_update (StIcon *icon)
|
|||||||
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
||||||
theme_node,
|
theme_node,
|
||||||
default_gicon,
|
default_gicon,
|
||||||
priv->icon_size,
|
priv->icon_size / paint_scale,
|
||||||
paint_scale,
|
paint_scale,
|
||||||
resource_scale);
|
resource_scale);
|
||||||
|
|
||||||
@ -519,34 +524,31 @@ st_icon_update_icon_size (StIcon *icon)
|
|||||||
{
|
{
|
||||||
StIconPrivate *priv = icon->priv;
|
StIconPrivate *priv = icon->priv;
|
||||||
int new_size;
|
int new_size;
|
||||||
|
gint scale = 1;
|
||||||
|
ClutterActor *stage;
|
||||||
|
StThemeContext *context;
|
||||||
|
|
||||||
if (priv->prop_icon_size > 0)
|
stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon));
|
||||||
new_size = priv->prop_icon_size;
|
if (stage != NULL)
|
||||||
else if (priv->theme_icon_size > 0)
|
|
||||||
{
|
{
|
||||||
gint scale;
|
|
||||||
ClutterActor *stage;
|
|
||||||
StThemeContext *context;
|
|
||||||
|
|
||||||
/* The theme will give us an already-scaled size, so we
|
|
||||||
* undo it here, as priv->icon_size is in unscaled pixels.
|
|
||||||
*/
|
|
||||||
stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon));
|
|
||||||
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
|
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
|
||||||
g_object_get (context, "scale-factor", &scale, NULL);
|
g_object_get (context, "scale-factor", &scale, NULL);
|
||||||
new_size = (gint) (priv->theme_icon_size / scale);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (priv->prop_icon_size > 0)
|
||||||
|
new_size = priv->prop_icon_size * scale;
|
||||||
|
else if (priv->theme_icon_size > 0)
|
||||||
|
new_size = priv->theme_icon_size;
|
||||||
else
|
else
|
||||||
new_size = DEFAULT_ICON_SIZE;
|
new_size = DEFAULT_ICON_SIZE * scale;
|
||||||
|
|
||||||
if (new_size != priv->icon_size)
|
if (new_size != priv->icon_size)
|
||||||
{
|
{
|
||||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (icon));
|
|
||||||
priv->icon_size = new_size;
|
priv->icon_size = new_size;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user