summaryrefslogtreecommitdiff
path: root/libmetacity/meta-draw-op.c
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2016-03-24 19:43:50 +0200
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2016-03-24 19:43:50 +0200
commite6cf7fd3f8edd74eadf38ff0ccf326817605850c (patch)
treee6d721b5437f8ca39e9bb9dabe97c4bd8b1e6ee6 /libmetacity/meta-draw-op.c
parent7e5058da54d8043d1288b7ff8fd234c2ca6ccbd8 (diff)
downloadmetacity-e6cf7fd3f8edd74eadf38ff0ccf326817605850c.tar.gz
libmetacity: scale window decorations on HiDPI displays
As we opt out of GTK+/Clutter's HiDPI handling, we need to apply the window scaling factor manually to decorations, both the geometry and when drawing. Based on mutter commit: https://git.gnome.org/browse/mutter/commit/?id=57c1078ee742d9f01e80e7fe05c88adfec4b4ac3
Diffstat (limited to 'libmetacity/meta-draw-op.c')
-rw-r--r--libmetacity/meta-draw-op.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/libmetacity/meta-draw-op.c b/libmetacity/meta-draw-op.c
index 23c3c9de..03bd3057 100644
--- a/libmetacity/meta-draw-op.c
+++ b/libmetacity/meta-draw-op.c
@@ -22,6 +22,7 @@
#include <math.h>
#include "meta-draw-op-private.h"
+#include "meta-theme-impl-private.h"
#define GDK_COLOR_RGBA(color) \
((guint32) (0xff | \
@@ -58,18 +59,22 @@ fill_env (MetaPositionExprEnv *env,
const MetaDrawInfo *info,
GdkRectangle logical_region)
{
+ int scale;
+
+ scale = get_window_scaling_factor ();
+
/* FIXME this stuff could be raised into draw_op_list_draw() probably
*/
env->rect = logical_region;
env->object_width = -1;
env->object_height = -1;
- env->left_width = info->borders.visible.left;
- env->right_width = info->borders.visible.right;
- env->top_height = info->borders.visible.top;
- env->bottom_height = info->borders.visible.bottom;
- env->frame_x_center = info->width / 2 - logical_region.x;
- env->frame_y_center = info->height / 2 - logical_region.y;
+ env->left_width = info->borders.visible.left / scale;
+ env->right_width = info->borders.visible.right / scale;
+ env->top_height = info->borders.visible.top / scale;
+ env->bottom_height = info->borders.visible.bottom / scale;
+ env->frame_x_center = info->width / scale / 2 - logical_region.x;
+ env->frame_y_center = info->height / scale / 2 - logical_region.y;
env->mini_icon_width = info->mini_icon ? gdk_pixbuf_get_width (info->mini_icon) : 0;
env->mini_icon_height = info->mini_icon ? gdk_pixbuf_get_height (info->mini_icon) : 0;