[gnome-shell/gbsneto/fix-switching-scale: 15/18] st/theme-node: Consider scale factor when comparing
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gbsneto/fix-switching-scale: 15/18] st/theme-node: Consider scale factor when comparing
- Date: Mon, 6 Apr 2020 14:24:58 +0000 (UTC)
commit c9cfeb831830a00a1b4edb3f226c782150cdff58
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri Apr 3 17:44:54 2020 -0300
st/theme-node: Consider scale factor when comparing
The CSS engine of St is scale-aware, which means every length
and size it produces is multiplied by the current scale factor.
However, the individual nodes aren't aware of the scale factor
when they compare to each other.
Store and compare the scale factors in the nodes themselves.
Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/1635
https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1176
src/st/st-theme-node-private.h | 2 ++
src/st/st-theme-node.c | 6 ++++++
2 files changed, 8 insertions(+)
---
diff --git a/src/st/st-theme-node-private.h b/src/st/st-theme-node-private.h
index 57f3bd6d8f..dedb3cc8f9 100644
--- a/src/st/st-theme-node-private.h
+++ b/src/st/st-theme-node-private.h
@@ -117,6 +117,8 @@ struct _StThemeNode {
CoglPipeline *color_pipeline;
StThemeNodePaintState cached_state;
+
+ int cached_scale_factor;
};
void _st_theme_node_ensure_background (StThemeNode *node);
diff --git a/src/st/st-theme-node.c b/src/st/st-theme-node.c
index 31057b0129..4e122f4410 100644
--- a/src/st/st-theme-node.c
+++ b/src/st/st-theme-node.c
@@ -225,6 +225,7 @@ st_theme_node_new (StThemeContext *context,
node->element_classes = split_on_whitespace (element_class);
node->pseudo_classes = split_on_whitespace (pseudo_class);
node->inline_style = g_strdup (inline_style);
+ node->cached_scale_factor = st_theme_context_get_scale_factor (context);
return node;
}
@@ -345,6 +346,7 @@ st_theme_node_equal (StThemeNode *node_a, StThemeNode *node_b)
node_a->context != node_b->context ||
node_a->theme != node_b->theme ||
node_a->element_type != node_b->element_type ||
+ node_a->cached_scale_factor != node_b->cached_scale_factor ||
g_strcmp0 (node_a->element_id, node_b->element_id) ||
g_strcmp0 (node_a->inline_style, node_b->inline_style))
return FALSE;
@@ -396,6 +398,7 @@ st_theme_node_hash (StThemeNode *node)
hash = hash * 33 + GPOINTER_TO_UINT (node->context);
hash = hash * 33 + GPOINTER_TO_UINT (node->theme);
hash = hash * 33 + ((guint) node->element_type);
+ hash = hash * 33 + ((guint) node->cached_scale_factor);
if (node->element_id != NULL)
hash = hash * 33 + g_str_hash (node->element_id);
@@ -3967,6 +3970,9 @@ st_theme_node_geometry_equal (StThemeNode *node,
g_return_val_if_fail (ST_IS_THEME_NODE (other), FALSE);
+ if (node->cached_scale_factor != other->cached_scale_factor)
+ return FALSE;
+
_st_theme_node_ensure_geometry (node);
_st_theme_node_ensure_geometry (other);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]