[metacity/gnome-3-22] libmetacity: use POS_EXPR_INT for POS_TOKEN_VARIABLE



commit ac6b821b80e85fdf8e1f84299f5ff4de1fd4f42f
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sun Feb 5 22:05:47 2017 +0200

    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

 libmetacity/meta-draw-op.c           |    2 ++
 libmetacity/meta-draw-spec-private.h |    2 ++
 libmetacity/meta-draw-spec.c         |   11 +++++++++--
 3 files changed, 13 insertions(+), 2 deletions(-)
---
diff --git a/libmetacity/meta-draw-op.c b/libmetacity/meta-draw-op.c
index e2d59ec..659b6ae 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 0730a4e..e842f22 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 6ecde1b..0f0902c 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;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]