diff options
Diffstat (limited to 'x11/hsetroot/files/patch-hsetroot.c')
-rw-r--r-- | x11/hsetroot/files/patch-hsetroot.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/x11/hsetroot/files/patch-hsetroot.c b/x11/hsetroot/files/patch-hsetroot.c new file mode 100644 index 000000000000..56516311ea9d --- /dev/null +++ b/x11/hsetroot/files/patch-hsetroot.c @@ -0,0 +1,56 @@ +--- hsetroot.c.orig 2016-02-14 00:09:11 UTC ++++ hsetroot.c +@@ -8,7 +8,7 @@ + #include "outputs.h" + + +-typedef enum { Full, Fill, Center, Tile, Xtend, Cover } ImageMode; ++typedef enum { Full, Fill, Center, Tile, Xtend, Cover, Sane } ImageMode; + + void + usage(char *commandline) +@@ -33,6 +33,7 @@ usage(char *commandline) + "Image files:\n" + " -center <image> Render an image centered on screen\n" + " -cover <image> Render an image centered on screen scaled to fill the screen fully\n" ++ " -sane <image> Render an image in sane mode (choose the best aspect, but do not center)\n" + " -tile <image> Render an image tiled\n" + " -full <image> Render an image maximum aspect\n" + " -extend <image> Render an image max aspect and fill borders\n" +@@ -229,6 +230,20 @@ load_image(ImageMode mode, const char *arg, int alpha, + } + } + } ++ } else if (mode == Sane) { ++ int newW, newH; ++ double aspect_w = ((double) o.w) / imgW; ++ double aspect_h = ((double) o.h) / imgH; ++ if (aspect_h < aspect_w) { ++ // image is taller ++ newW = o.w; ++ newH = (int) (imgH * aspect_w); ++ } else { ++ // image is wider ++ newW = (int) (imgW * aspect_h); ++ newH = o.h; ++ } ++ imlib_blend_image_onto_image(buffer, 0, 0, 0, imgW, imgH, 0, 0, newW, newH); + } else { // Center || Tile + int left = (o.w - imgW) / 2; + int top = (o.h - imgH) / 2; +@@ -457,6 +472,15 @@ main(int argc, char **argv) + } + if (load_image(Cover, argv[i], alpha, image, outputs, noutputs) == 0) { + fprintf (stderr, "Bad image (%s)\n", argv[i]); ++ continue; ++ } ++ } else if (strcmp (argv[i], "-sane") == 0) { ++ if ((++i) >= argc) { ++ fprintf(stderr, "Missing image\n"); ++ continue; ++ } ++ if (load_image(Sane, argv[i], alpha, image, outputs, noutputs) == 0) { ++ fprintf(stderr, "Bad image (%s)\n", argv[i]); + continue; + } + } else if (strcmp(argv[i], "-tint") == 0) { |