diff options
author | Victor Kareh <[email protected]> | 2018-04-10 00:52:39 -0400 |
---|---|---|
committer | raveit65 <[email protected]> | 2018-04-25 20:58:04 +0200 |
commit | 6d06e188de6c50ba0a5d16372c6e300d22b53a95 (patch) | |
tree | 37a4e753984c1bc4813d53c1b10fda80d93b42ed | |
parent | 1aa9a47b34ad7bad501e9b0911bb314456e8c369 (diff) | |
download | mate-desktop-6d06e188de6c50ba0a5d16372c6e300d22b53a95.tar.bz2 mate-desktop-6d06e188de6c50ba0a5d16372c6e300d22b53a95.tar.xz |
Support background fallback on HiDPI
This change is a super hacky way of supporting the fallback desktop background (without caja) on HiDPI displays. It does this by doing two things: providing a function for scaled-up background surfaces using cairo_scale; and triggering a change signal when the entire background schema is re-loaded, and so triggering a redraw.
-rw-r--r-- | libmate-desktop/mate-bg.c | 38 | ||||
-rw-r--r-- | libmate-desktop/mate-bg.h | 7 |
2 files changed, 43 insertions, 2 deletions
diff --git a/libmate-desktop/mate-bg.c b/libmate-desktop/mate-bg.c index e1d05db..0201552 100644 --- a/libmate-desktop/mate-bg.c +++ b/libmate-desktop/mate-bg.c @@ -276,6 +276,9 @@ mate_bg_load_from_preferences (MateBG *bg) mate_bg_load_from_gsettings (bg, settings); g_object_unref (settings); + + /* Queue change to force background redraw */ + queue_changed (bg); } /* This function loads default system settings */ @@ -1138,6 +1141,36 @@ mate_bg_create_surface (MateBG *bg, int height, gboolean root) { + return mate_bg_create_surface_scale (bg, + window, + width, + height, + 1, + root); +} + +/** + * mate_bg_create_surface: + * @bg: MateBG + * @window: + * @width: + * @height: + * @scale: + * @root: + * + * Create a scaled surface that can be set as background for @window. If @is_root is + * TRUE, the surface created will be created by a temporary X server connection + * so that if someone calls XKillClient on it, it won't affect the application + * who created it. + **/ +cairo_surface_t * +mate_bg_create_surface_scale (MateBG *bg, + GdkWindow *window, + int width, + int height, + int scale, + gboolean root) +{ int pm_width, pm_height; cairo_surface_t *surface; @@ -1156,10 +1189,9 @@ mate_bg_create_surface (MateBG *bg, mate_bg_get_pixmap_size (bg, width, height, &pm_width, &pm_height); - if (root) { - surface = make_root_pixmap (window, pm_width, pm_height); + surface = make_root_pixmap (window, pm_width * scale, pm_height * scale); } else { @@ -1168,6 +1200,8 @@ mate_bg_create_surface (MateBG *bg, } cr = cairo_create (surface); + cairo_scale (cr, (double)scale, (double)scale); + if (!bg->filename && bg->color_type == MATE_BG_COLOR_SOLID) { gdk_cairo_set_source_rgba (cr, &(bg->primary)); } diff --git a/libmate-desktop/mate-bg.h b/libmate-desktop/mate-bg.h index a1adf36..16fda8c 100644 --- a/libmate-desktop/mate-bg.h +++ b/libmate-desktop/mate-bg.h @@ -127,6 +127,13 @@ cairo_surface_t *mate_bg_create_surface (MateBG *bg, int height, gboolean root); +cairo_surface_t *mate_bg_create_surface_scale (MateBG *bg, + GdkWindow *window, + int width, + int height, + int scale, + gboolean root); + gboolean mate_bg_get_image_size (MateBG *bg, MateDesktopThumbnailFactory *factory, int best_width, |