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:47 +0200
commit9089246f6132f217982ecc1fddd5ec32b106990b (patch)
treeca87c785591d7bce772bbc99407e424348012e00
parentd3c2b0f67be512f45535246250b8f35987734619 (diff)
downloadmetacity-9089246f6132f217982ecc1fddd5ec32b106990b.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 97bc1b43..10ffdb01 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;