From b13e4c707e6d4658dc84c0dd8923ec0974670c63 Mon Sep 17 00:00:00 2001 From: Alexey Dokuchaev Date: Thu, 28 Dec 2017 10:54:29 +0000 Subject: Add custom patch that introduces "sane" image rendering mode: it allows to select the best aspect ratio and display image with minimal scaling yet not centered. This mode is useful when one wants to use an image with author's copyright in the lower corner and wants to hide it. Existing modes did not always provide the best possible result. While here, take maintainership. --- x11/hsetroot/files/patch-hsetroot.c | 56 +++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 x11/hsetroot/files/patch-hsetroot.c (limited to 'x11/hsetroot/files/patch-hsetroot.c') 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 Render an image centered on screen\n" + " -cover Render an image centered on screen scaled to fill the screen fully\n" ++ " -sane Render an image in sane mode (choose the best aspect, but do not center)\n" + " -tile Render an image tiled\n" + " -full Render an image maximum aspect\n" + " -extend 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) { -- cgit v1.2.3