Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
vkareh authored and raveit65 committed Apr 25, 2018
1 parent 1aa9a47 commit 6d06e18
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 2 deletions.
38 changes: 36 additions & 2 deletions libmate-desktop/mate-bg.c
Expand Up @@ -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 */
Expand Down Expand Up @@ -1137,6 +1140,36 @@ mate_bg_create_surface (MateBG *bg,
int width,
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;

Expand All @@ -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
{
Expand All @@ -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));
}
Expand Down
7 changes: 7 additions & 0 deletions libmate-desktop/mate-bg.h
Expand Up @@ -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,
Expand Down

0 comments on commit 6d06e18

Please sign in to comment.