summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2017-02-05 22:05:47 +0200
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2017-02-06 00:00:02 +0200
commitac6b821b80e85fdf8e1f84299f5ff4de1fd4f42f (patch)
tree830583953d0631c9ab95097fa204c7905c5750f7
parent047b8d3845d5e64682d2d21eeb2cd4b9422baa4f (diff)
downloadmetacity-ac6b821b80e85fdf8e1f84299f5ff4de1fd4f42f.tar.gz
libmetacity: use POS_EXPR_INT for POS_TOKEN_VARIABLE
Commit 90f64f2ba50413c3fd20a7049162736e2eb98811 changed POS_TOKEN_VARIABLE type from POS_EXPR_INT to POS_EXPR_DOUBLE. Unfortunately this breaks existing themes. Use POS_EXPR_DOUBLE only on HiDPI screens (scale > 1) to restore previous behaviour. https://bugzilla.gnome.org/show_bug.cgi?id=778209
-rw-r--r--libmetacity/meta-draw-op.c2
-rw-r--r--libmetacity/meta-draw-spec-private.h2
-rw-r--r--libmetacity/meta-draw-spec.c11
3 files changed, 13 insertions, 2 deletions
diff --git a/libmetacity/meta-draw-op.c b/libmetacity/meta-draw-op.c
index e2d59ec3..659b6aec 100644
--- a/libmetacity/meta-draw-op.c
+++ b/libmetacity/meta-draw-op.c
@@ -72,6 +72,8 @@ fill_env (MetaPositionExprEnv *env,
env->title_width = info->title_layout_width;
env->title_height = info->title_layout_height;
+
+ env->scale = info->scale;
}
static cairo_surface_t *
diff --git a/libmetacity/meta-draw-spec-private.h b/libmetacity/meta-draw-spec-private.h
index 0730a4eb..e842f22a 100644
--- a/libmetacity/meta-draw-spec-private.h
+++ b/libmetacity/meta-draw-spec-private.h
@@ -50,6 +50,8 @@ struct _MetaPositionExprEnv
gdouble mini_icon_height;
gdouble icon_width;
gdouble icon_height;
+
+ gint scale;
};
G_GNUC_INTERNAL
diff --git a/libmetacity/meta-draw-spec.c b/libmetacity/meta-draw-spec.c
index 6ecde1ba..0f0902ce 100644
--- a/libmetacity/meta-draw-spec.c
+++ b/libmetacity/meta-draw-spec.c
@@ -937,6 +937,8 @@ pos_eval_helper (PosToken *tokens,
if (paren_level == 0)
{
+ gdouble double_val;
+
switch (t->type)
{
case POS_TOKEN_INT:
@@ -963,15 +965,20 @@ pos_eval_helper (PosToken *tokens,
return FALSE;
case POS_TOKEN_VARIABLE:
- exprs[n_exprs].type = POS_EXPR_DOUBLE;
+ exprs[n_exprs].type = env->scale > 1 ? POS_EXPR_DOUBLE : POS_EXPR_INT;
/* FIXME we should just dump all this crap
* in a hash, maybe keep width/height out
* for optimization purposes
*/
- if (!pos_eval_get_variable (t, &exprs[n_exprs].d.double_val, env, err))
+ if (!pos_eval_get_variable (t, &double_val, env, err))
return FALSE;
+ if (env->scale > 1)
+ exprs[n_exprs].d.double_val = double_val;
+ else
+ exprs[n_exprs].d.int_val = double_val;
+
++n_exprs;
break;