desktop-shell: Scale background image to output size
This commit is contained in:
+10
-1
@@ -284,7 +284,10 @@ static void
|
|||||||
background_draw(struct window *window, int width, int height, const char *path)
|
background_draw(struct window *window, int width, int height, const char *path)
|
||||||
{
|
{
|
||||||
cairo_surface_t *surface, *image;
|
cairo_surface_t *surface, *image;
|
||||||
|
cairo_pattern_t *pattern;
|
||||||
|
cairo_matrix_t matrix;
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
|
double sx, sy;
|
||||||
|
|
||||||
window_set_child_size(window, width, height);
|
window_set_child_size(window, width, height);
|
||||||
window_draw(window);
|
window_draw(window);
|
||||||
@@ -297,7 +300,13 @@ background_draw(struct window *window, int width, int height, const char *path)
|
|||||||
|
|
||||||
if (path) {
|
if (path) {
|
||||||
image = cairo_image_surface_create_from_png(path);
|
image = cairo_image_surface_create_from_png(path);
|
||||||
cairo_set_source_surface(cr, image, 0, 0);
|
pattern = cairo_pattern_create_for_surface(image);
|
||||||
|
sx = (double) cairo_image_surface_get_width(image) / width;
|
||||||
|
sy = (double) cairo_image_surface_get_height(image) / height;
|
||||||
|
cairo_matrix_init_scale(&matrix, sx, sy);
|
||||||
|
cairo_pattern_set_matrix(pattern, &matrix);
|
||||||
|
cairo_set_source(cr, pattern);
|
||||||
|
cairo_pattern_destroy (pattern);
|
||||||
cairo_paint(cr);
|
cairo_paint(cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user