summaryrefslogtreecommitdiffstats
path: root/swaybg
diff options
context:
space:
mode:
authorLibravatar Christoph Gysin <christoph.gysin@gmail.com>2015-11-25 16:57:35 +0200
committerLibravatar Christoph Gysin <christoph.gysin@gmail.com>2015-11-25 21:36:48 +0200
commit904983c3753f3b1f275dedc1c7841542f77c9f89 (patch)
tree4c1c0b9e1ec0ea14518019c0bbf113da43e38fad /swaybg
parentswaybg: check for exact number of arguments (diff)
downloadsway-904983c3753f3b1f275dedc1c7841542f77c9f89.tar.gz
sway-904983c3753f3b1f275dedc1c7841542f77c9f89.tar.zst
sway-904983c3753f3b1f275dedc1c7841542f77c9f89.zip
swaybg: implement scaling mode "stretch"
Diffstat (limited to 'swaybg')
-rw-r--r--swaybg/main.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/swaybg/main.c b/swaybg/main.c
index cb9cc42b..5510f2ef 100644
--- a/swaybg/main.c
+++ b/swaybg/main.c
@@ -12,6 +12,10 @@ list_t *surfaces;
12 12
13struct registry *registry; 13struct registry *registry;
14 14
15enum scaling_mode_t {
16 SCALING_MODE_STRETCH,
17};
18
15void sway_terminate(void) { 19void sway_terminate(void) {
16 int i; 20 int i;
17 for (i = 0; i < surfaces->length; ++i) { 21 for (i = 0; i < surfaces->length; ++i) {
@@ -49,16 +53,33 @@ int main(int argc, const char **argv) {
49 desktop_shell_set_background(registry->desktop_shell, output->output, window->surface); 53 desktop_shell_set_background(registry->desktop_shell, output->output, window->surface);
50 list_add(surfaces, window); 54 list_add(surfaces, window);
51 55
52 const char *scaling_mode = argv[3];
53 cairo_surface_t *image = cairo_image_surface_create_from_png(argv[2]); 56 cairo_surface_t *image = cairo_image_surface_create_from_png(argv[2]);
54 double width = cairo_image_surface_get_width(image); 57 double width = cairo_image_surface_get_width(image);
55 double height = cairo_image_surface_get_height(image); 58 double height = cairo_image_surface_get_height(image);
56 59
60 const char *scaling_mode_str = argv[3];
61 enum scaling_mode_t scaling_mode;
62 if (strcmp(scaling_mode_str, "stretch") == 0) {
63 scaling_mode = SCALING_MODE_STRETCH;
64 } else {
65 sway_abort("Unsupported scaling mode: %s", scaling_mode_str);
66 }
67
57 for (i = 0; i < surfaces->length; ++i) { 68 for (i = 0; i < surfaces->length; ++i) {
58 struct window *window = surfaces->items[i]; 69 struct window *window = surfaces->items[i];
59 if (window_prerender(window) && window->cairo) { 70 if (window_prerender(window) && window->cairo) {
60 cairo_scale(window->cairo, window->width / width, window->height / height); 71
61 cairo_set_source_surface(window->cairo, image, 0, 0); 72 switch (scaling_mode) {
73 case SCALING_MODE_STRETCH:
74 cairo_scale(window->cairo,
75 (double) window->width / width,
76 (double) window->height / height);
77 cairo_set_source_surface(window->cairo, image, 0, 0);
78 break;
79 default:
80 sway_abort("Scaling mode '%s' not implemented yet!", scaling_mode_str);
81 }
82
62 cairo_paint(window->cairo); 83 cairo_paint(window->cairo);
63 84
64 window_render(window); 85 window_render(window);