Hello community, here is the log from the commit of package feh for openSUSE:Factory checked in at 2018-10-23 20:37:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/feh (Old) and /work/SRC/openSUSE:Factory/.feh.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "feh" Tue Oct 23 20:37:29 2018 rev:27 rq:643567 version:2.28 Changes: -------- --- /work/SRC/openSUSE:Factory/feh/feh.changes 2018-07-21 10:25:36.110951935 +0200 +++ /work/SRC/openSUSE:Factory/.feh.new/feh.changes 2018-10-23 20:37:40.300739187 +0200 @@ -1,0 +2,9 @@ +Thu Oct 18 02:55:25 UTC 2018 - s...@suspend.net + +- update to 2.28 + * Decrease loading time for RAW images by utilizing dcraw + * Rename --magick-timeout to --conversion-timeout + * New option: --on-last-slide=hold|quit|resume + * Fix unintended aliasing in rotated images + +------------------------------------------------------------------- Old: ---- feh-2.27.1.tar.bz2 feh-2.27.1.tar.bz2.asc New: ---- feh-2.28.tar.bz2 feh-2.28.tar.bz2.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ feh.spec ++++++ --- /var/tmp/diff_new_pack.ZVh4nE/_old 2018-10-23 20:37:42.020737132 +0200 +++ /var/tmp/diff_new_pack.ZVh4nE/_new 2018-10-23 20:37:42.020737132 +0200 @@ -12,12 +12,12 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: feh -Version: 2.27.1 +Version: 2.28 Release: 0 Summary: X11 image viewer License: MIT AND LGPL-2.0-or-later ++++++ feh-2.27.1.tar.bz2 -> feh-2.28.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/ChangeLog new/feh-2.28/ChangeLog --- old/feh-2.27.1/ChangeLog 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/ChangeLog 2018-09-17 21:47:05.000000000 +0200 @@ -1,3 +1,17 @@ +Mon, 17 Sep 2018 21:17:04 +0200 Daniel Friesel <derf+...@finalrewind.org> + +* Release v2.28 + * Decrease loading time for RAW images by utilizing dcraw to display the + embedded JPEG preview (patch by <https://github.com/ulteq>) + * Rename --magick-timeout to --conversion-timeout. --magick-timeout is + now deprecated and will be removed in a future release + * Fix unintened aliasing in rotated images whose rotation is not a + multiple of 90 degrees (patch by <https://github.com/ulteq>) + * New option: --on-last-slide=hold|quit|resume. + hold replaces --no-cycle (which is now deprecated), quit will cause feh + to quit after the last slide (patch by <https://github.com/ulteq>), + resume is the default (continue at the first image) + Tue, 17 Jul 2018 17:33:10 +0200 Daniel Friesel <derf+...@finalrewind.org> * Release v2.27.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/config.mk new/feh-2.28/config.mk --- old/feh-2.27.1/config.mk 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/config.mk 2018-09-17 21:47:05.000000000 +0200 @@ -1,5 +1,5 @@ PACKAGE ?= feh -VERSION ?= 2.27.1 +VERSION ?= 2.28 app ?= 0 cam ?= 0 @@ -87,7 +87,7 @@ MAN_EXIF = disabled endif -MAN_DATE ?= July 17, 2018 +MAN_DATE ?= September 17, 2018 # Uncomment this to use dmalloc #CFLAGS += -DWITH_DMALLOC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/man/feh.pre new/feh-2.28/man/feh.pre --- old/feh-2.27.1/man/feh.pre 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/man/feh.pre 2018-09-17 21:47:05.000000000 +0200 @@ -142,8 +142,12 @@ .Pq supplied by ImageMagick is available, it also has limited support for many other filetypes, such as svg, xcf and otf. +If dcraw is available, +.Nm +also supports RAW files provided by cameras and will display the embedded +thumbnails. Use -.Cm --magick-timeout Ar num +.Cm --conversion-timeout Ar num with a non-negative value to enable it. . . @@ -264,12 +268,6 @@ See .Sx FORMAT SPECIFIERS . . -.It Cm --cycle-once -. -Exit -.Nm -after one loop through the slideshow. -. .It Cm -G , --draw-actions . Draw the defined actions and what they do at the top-left of the image. @@ -394,8 +392,9 @@ Takes an X-style geometry .Ar string like 640x480 with optional +x+y window offset. -Note that larger images will be zoomed out to fit, but you can see them at 1:1 -by clicking the zoom button. +Use +.Cm --scale-down +to scale down larger images like in fullscreen mode. . Also note that this option does not enforce the geometry, changing it by a tiling WM or manually is still possible. @@ -482,16 +481,15 @@ Just print out their names if imlib2 can successfully load them. Returns false if at least one image failed to load. . -.It Cm --magick-timeout Ar timeout +.It Cm --conversion-timeout Ar timeout . Stop trying to convert unloadable files after .Ar timeout seconds. -A negative value disables covert / magick support altogether, a value -of zero causes +Negative values disable conversion altogether, zero causes .Nm to try indefinitely. -By default, magick support is disabled. +By default, conversion is disabled. . .It Cm --max-dimension Ar width No x Ar height . @@ -552,6 +550,41 @@ .Pq optional feature, $MAN_XINERAMA$ in this build Disable Xinerama support. . +.It Cm --on-last-slide Cm hold | Cm quit | Cm resume +. +Select behaviour when trying to select the next image on the last slide +.Pq or the previous image on the first slide +in a slide show. +. +.Pp +. +With +.Cm hold , +.Nm +will stop advancing images in this case and continue displaying the first/last +image, respectively. +This is intended for linear slide shows. +Behaviour is unspecified when using other navigation commands than previous +and next image. +. +.Pp +. +.Cm quit +will cause +.Nm +to quit when trying to advance past the last image in the slide show. +. +.Pp +. +.Cm resume +is the default behaviour: On the last +.Pq first +image, +.Nm +will wrap around to the first +.Pq last +image. +. .It Cm -j , --output-dir Ar directory . Save files to @@ -1901,7 +1934,7 @@ .Aq https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813729 for details. Workaround: Use -.Cm --magick-timeout 5 +.Cm --conversion-timeout 5 .Pq or some other positive value to load gifs with imagemagick instead, or downgrade to giflib 5.1.1, or upgrade to giflib 5.1.4. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/filelist.c new/feh-2.28/src/filelist.c --- old/feh-2.27.1/src/filelist.c 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/filelist.c 2018-09-17 21:47:05.000000000 +0200 @@ -574,7 +574,7 @@ Imlib_Load_Error err = IMLIB_LOAD_ERROR_NONE; Imlib_Image tmp_im; struct stat st; - signed short tmp_magick_timeout; + signed short tmp_conversion_timeout; if (!filename) return(NULL); @@ -582,8 +582,8 @@ /* * feh_load_image will fail horribly if filename is not seekable */ - tmp_magick_timeout = opt.magick_timeout; - opt.magick_timeout = -1; + tmp_conversion_timeout = opt.conversion_timeout; + opt.conversion_timeout = -1; if (!stat(filename, &st) && S_ISREG(st.st_mode)) { tmp_im = imlib_load_image_with_error_return(filename, &err); if (err == IMLIB_LOAD_ERROR_NONE) { @@ -594,7 +594,7 @@ return NULL; } } - opt.magick_timeout = tmp_magick_timeout; + opt.conversion_timeout = tmp_conversion_timeout; errno = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/help.raw new/feh-2.28/src/help.raw --- old/feh-2.27.1/src/help.raw 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/help.raw 2018-09-17 21:47:05.000000000 +0200 @@ -38,7 +38,8 @@ --auto-rotate Rotate images according to Exif info (if compiled with exif=1) -^, --title TITLE Set window title (see FORMAT SPECIFIERS) -D, --slideshow-delay NUM Set delay between automatically changing slides - --cycle-once Exit after one loop through the slideshow + --on-last-slide quit Exit after one loop through the slide show + --on-last-slide hold Stop at both ends of the filelist -R, --reload NUM Reload images after NUM seconds -k, --keep-http Keep local copies when viewing HTTP/FTP files --insecure Disable peer/host verification when using HTTPS. @@ -90,8 +91,8 @@ --no-xinerama Disable Xinerama support --no-screen-clip Do not limit window size to screen size -Y, --hide-pointer Hide the pointer - --magick-timeout INT Load unknown files with ImageMagick, timeout after - INT seconds (0: no timeout) + --conversion-timeout INT Load unknown files with dcraw or ImageMagick, + timeout after INT seconds (0: no timeout) --min-dimension WxH Only show images with width >= W and height >= H --max-dimension WxH Only show images with width <= W and height <= H --scroll-step COUNT scroll COUNT pixels when movement key is pressed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/imlib.c new/feh-2.28/src/imlib.c --- old/feh-2.27.1/src/imlib.c 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/imlib.c 2018-09-17 21:47:05.000000000 +0200 @@ -61,7 +61,9 @@ int childpid = 0; +static int feh_file_is_raw(char *filename); static char *feh_http_load_image(char *url); +static char *feh_dcraw_load_image(char *filename); static char *feh_magick_load_image(char *filename); #ifdef HAVE_LIBXINERAMA @@ -213,8 +215,7 @@ int feh_load_image(Imlib_Image * im, feh_file * file) { Imlib_Load_Error err = IMLIB_LOAD_ERROR_NONE; - enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK } image_source = - SRC_IMLIB; + enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK, SRC_DCRAW } image_source = SRC_IMLIB; char *tmpname = NULL; char *real_filename = NULL; @@ -229,16 +230,23 @@ if ((tmpname = feh_http_load_image(file->filename)) == NULL) err = IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST; } + else if (opt.conversion_timeout >= 0 && feh_file_is_raw(file->filename)) { + image_source = SRC_DCRAW; + tmpname = feh_dcraw_load_image(file->filename); + if (!tmpname) + err = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT; + } else *im = imlib_load_image_with_error_return(file->filename, &err); - if ((err == IMLIB_LOAD_ERROR_UNKNOWN) - || (err == IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT)) { + if (opt.conversion_timeout >= 0 && ( + (err == IMLIB_LOAD_ERROR_UNKNOWN) || + (err == IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT))) { image_source = SRC_MAGICK; tmpname = feh_magick_load_image(file->filename); } - if ((image_source != SRC_IMLIB) && tmpname) { + if (tmpname) { *im = imlib_load_image_with_error_return(tmpname, &err); if (!err && im) { real_filename = file->filename; @@ -298,6 +306,95 @@ return(1); } +static int feh_file_is_raw(char *filename) +{ + childpid = fork(); + if (childpid == -1) { + perror("fork"); + return 0; + } + + if (childpid == 0) { + if (opt.quiet) { + int devnull = open("/dev/null", O_WRONLY); + dup2(devnull, 1); + dup2(devnull, 2); + } + execlp("dcraw", "dcraw", "-i", filename, NULL); + _exit(1); + } else { + int status; + do { + waitpid(childpid, &status, WUNTRACED); + if (WIFEXITED(status)) { + return !WEXITSTATUS(status); + } + } while (!WIFEXITED(status) && !WIFSIGNALED(status)); + } + + return 0; +} + +static char *feh_dcraw_load_image(char *filename) +{ + char *basename; + char *tmpname; + char *sfn; + int fd = -1; + + basename = strrchr(filename, '/'); + + if (basename == NULL) + basename = filename; + else + basename++; + + tmpname = feh_unique_filename("/tmp/", basename); + + if (strlen(tmpname) > (NAME_MAX-6)) + tmpname[NAME_MAX-7] = '\0'; + + sfn = estrjoin("_", tmpname, "XXXXXX", NULL); + free(tmpname); + + fd = mkstemp(sfn); + + if (fd == -1) { + free(sfn); + return NULL; + } + + childpid = fork(); + if (childpid == -1) { + weprintf("%s: Can't load with dcraw. Fork failed:", filename); + unlink(sfn); + free(sfn); + close(fd); + return NULL; + } else if (childpid == 0) { + + close(1); + dup(fd); + close(fd); + + alarm(opt.conversion_timeout); + execlp("dcraw", "dcraw", "-c", "-e", filename, NULL); + _exit(1); + } + + int status; + waitpid(-1, &status, 0); + if (WIFSIGNALED(status)) { + unlink(sfn); + free(sfn); + sfn = NULL; + if (!opt.quiet) + weprintf("%s - Conversion took too long, skipping", filename); + } + + return sfn; +} + static char *feh_magick_load_image(char *filename) { char *argv_fn; @@ -309,9 +406,6 @@ int status; char created_tempdir = 0; - if (opt.magick_timeout < 0) - return NULL; - basename = strrchr(filename, '/'); if (basename == NULL) @@ -387,10 +481,10 @@ _exit(1); } else { - alarm(opt.magick_timeout); + alarm(opt.conversion_timeout); waitpid(childpid, &status, 0); kill(childpid, SIGKILL); - if (opt.magick_timeout > 0 && !alarm(0)) { + if (opt.conversion_timeout > 0 && !alarm(0)) { unlink(sfn); free(sfn); sfn = NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/index.c new/feh-2.28/src/index.c --- old/feh-2.27.1/src/index.c 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/index.c 2018-09-17 21:47:05.000000000 +0200 @@ -147,9 +147,16 @@ index_image_height = h + title_area_h; im_main = imlib_create_image(index_image_width, index_image_height); - if (!im_main) - eprintf("Failed to create %dx%d pixels (%d MB) index image. Do you have enough RAM?", - index_image_width, index_image_height, index_image_width * index_image_height * 4 / (1024*1024)); + if (!im_main) { + if (index_image_height >= 32768 || index_image_width >= 32768) { + eprintf("Failed to create %dx%d pixels (%d MB) index image.\n" + "This is probably due to Imlib2 issues when dealing with images larger than 32k x 32k pixels.", + index_image_width, index_image_height, index_image_width * index_image_height * 4 / (1024*1024)); + } else { + eprintf("Failed to create %dx%d pixels (%d MB) index image. Do you have enough RAM?", + index_image_width, index_image_height, index_image_width * index_image_height * 4 / (1024*1024)); + } + } if (bg_im) gib_imlib_blend_image_onto_image(im_main, bg_im, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/options.c new/feh-2.28/src/options.c --- old/feh-2.27.1/src/options.c 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/options.c 2018-09-17 21:47:05.000000000 +0200 @@ -55,7 +55,7 @@ opt.display = 1; opt.aspect = 1; opt.slideshow_delay = 0.0; - opt.magick_timeout = -1; + opt.conversion_timeout = -1; opt.thumb_w = 60; opt.thumb_h = 60; opt.thumb_redraw = 10; @@ -415,6 +415,8 @@ {"insecure" , 0, 0, 240}, {"no-recursive" , 0, 0, 241}, {"cache-size" , 1, 0, 243}, + {"on-last-slide" , 1, 0, 244}, + {"conversion-timeout" , 1, 0, 245}, {"version-sort" , 0, 0, 246}, {"offset" , 1, 0, 247}, {0, 0, 0, 0} @@ -693,7 +695,8 @@ opt.index_info = estrdup(optarg); break; case 208: - opt.magick_timeout = atoi(optarg); + weprintf("--magick-timeout is deprecated, please use --conversion-timeout instead"); + opt.conversion_timeout = atoi(optarg); break; case 209: opt.actions[1] = estrdup(optarg); @@ -740,7 +743,8 @@ break; #endif case 224: - opt.cycle_once = 1; + weprintf("--cycle-once is deprecated, please use --on-last-slide=quit instead"); + opt.on_last_slide = ON_LAST_SLIDE_QUIT; break; case 225: opt.xinerama = 0; @@ -783,6 +787,21 @@ if (opt.cache_size > 2048) opt.cache_size = 2048; break; + case 244: + if (!strcmp(optarg, "quit")) { + opt.on_last_slide = ON_LAST_SLIDE_QUIT; + } else if (!strcmp(optarg, "hold")) { + opt.on_last_slide = ON_LAST_SLIDE_HOLD; + } else if (!strcmp(optarg, "resume")) { + opt.on_last_slide = ON_LAST_SLIDE_RESUME; + } else { + weprintf("Unrecognized on-last-slide action \"%s\"." + "Supported actions: hold, resume, quit\n", optarg); + } + break; + case 245: + opt.conversion_timeout = atoi(optarg); + break; case 246: opt.version_sort = 1; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/options.h new/feh-2.28/src/options.h --- old/feh-2.27.1/src/options.h 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/options.h 2018-09-17 21:47:05.000000000 +0200 @@ -27,6 +27,12 @@ #ifndef OPTIONS_H #define OPTIONS_H +enum on_last_slide_action { + ON_LAST_SLIDE_RESUME = 0, + ON_LAST_SLIDE_QUIT, + ON_LAST_SLIDE_HOLD +}; + struct __fehoptions { unsigned char multiwindow; unsigned char montage; @@ -68,7 +74,7 @@ unsigned char draw_actions; unsigned char draw_info; unsigned char cache_thumbnails; - unsigned char cycle_once; + unsigned char on_last_slide; unsigned char hold_actions[10]; unsigned char text_bg; unsigned char no_fehbg; @@ -133,7 +139,7 @@ double slideshow_delay; - signed short magick_timeout; + signed int conversion_timeout; Imlib_Font menu_fn; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/slideshow.c new/feh-2.28/src/slideshow.c --- old/feh-2.27.1/src/slideshow.c 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/slideshow.c 2018-09-17 21:47:05.000000000 +0200 @@ -215,6 +215,7 @@ void slideshow_change_image(winwidget winwid, int change, int render) { gib_list *last = NULL; + gib_list *previous_file = current_file; int i = 0; int jmp = 1; /* We can't use filelist_len in the for loop, since that changes when we @@ -222,9 +223,12 @@ */ int our_filelist_len = filelist_len; + if (opt.slideshow_delay > 0.0) + feh_add_timer(cb_slide_timer, winwid, opt.slideshow_delay, "SLIDE_CHANGE"); + /* Without this, clicking a one-image slideshow reloads it. Not very * intelligent behaviour :-) */ - if (filelist_len < 2 && opt.cycle_once == 0) + if (filelist_len < 2 && opt.on_last_slide != ON_LAST_SLIDE_QUIT) return; /* Ok. I do this in such an odd way to ensure that if the last or first * @@ -234,9 +238,11 @@ if (change == SLIDE_FIRST) { current_file = gib_list_last(filelist); change = SLIDE_NEXT; + previous_file = NULL; } else if (change == SLIDE_LAST) { current_file = filelist; change = SLIDE_PREV; + previous_file = NULL; } /* The for loop prevents us looping infinitely */ @@ -332,6 +338,12 @@ last = NULL; } + if (opt.on_last_slide == ON_LAST_SLIDE_HOLD && previous_file && + ((current_file == filelist && change == SLIDE_NEXT) || + (previous_file == filelist && change == SLIDE_PREV))) { + current_file = previous_file; + } + if (winwidget_loadimage(winwid, FEH_FILE(current_file->data))) { int w = gib_imlib_image_get_width(winwid->im); int h = gib_imlib_image_get_height(winwid->im); @@ -359,8 +371,6 @@ if (filelist_len == 0) eprintf("No more slides in show"); - if (opt.slideshow_delay > 0.0) - feh_add_timer(cb_slide_timer, winwid, opt.slideshow_delay, "SLIDE_CHANGE"); return; } @@ -567,10 +577,10 @@ doomed = current_file; /* - * work around feh_list_jump exiting if cycle_once is enabled + * work around feh_list_jump exiting if ON_LAST_SLIDE_QUIT is set * and no further files are left (we need to delete first) */ - if (opt.cycle_once && ! doomed->next && do_delete) { + if (opt.on_last_slide == ON_LAST_SLIDE_QUIT && ! doomed->next && do_delete) { feh_file_rm_and_free(filelist, doomed); exit(0); } @@ -646,7 +656,7 @@ if (ret->next) { ret = ret->next; } else { - if (opt.cycle_once) { + if (opt.on_last_slide == ON_LAST_SLIDE_QUIT) { exit(0); } if (opt.randomize) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/thumbnail.c new/feh-2.28/src/thumbnail.c --- old/feh-2.27.1/src/thumbnail.c 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/thumbnail.c 2018-09-17 21:47:05.000000000 +0200 @@ -149,9 +149,16 @@ D(("imlib_create_image(%d, %d)\n", index_image_width, index_image_height)); td.im_main = imlib_create_image(index_image_width, index_image_height); - if (!td.im_main) - eprintf("Failed to create %dx%d pixels (%d MB) index image. Do you have enough RAM?", - index_image_width, index_image_height, index_image_width * index_image_height * 4 / (1024*1024)); + if (!td.im_main) { + if (index_image_height >= 32768 || index_image_width >= 32768) { + eprintf("Failed to create %dx%d pixels (%d MB) index image.\n" + "This is probably due to Imlib2 issues when dealing with images larger than 32k x 32k pixels.", + index_image_width, index_image_height, index_image_width * index_image_height * 4 / (1024*1024)); + } else { + eprintf("Failed to create %dx%d pixels (%d MB) index image. Do you have enough RAM?", + index_image_width, index_image_height, index_image_width * index_image_height * 4 / (1024*1024)); + } + } gib_imlib_image_set_has_alpha(td.im_main, 1); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.27.1/src/winwidget.c new/feh-2.28/src/winwidget.c --- old/feh-2.27.1/src/winwidget.c 2018-07-17 17:41:02.000000000 +0200 +++ new/feh-2.28/src/winwidget.c 2018-09-17 21:47:05.000000000 +0200 @@ -520,7 +520,7 @@ D(("sx: %d sy: %d sw: %d sh: %d dx: %d dy: %d dw: %d dh: %d zoom: %f\n", sx, sy, sw, sh, dx, dy, dw, dh, winwid->zoom)); - if ((winwid->zoom != 1.0) && !force_alias && !winwid->force_aliasing) + if ((winwid->zoom != 1.0 || winwid->has_rotated) && !force_alias && !winwid->force_aliasing) antialias = 1; D(("winwidget_render(): winwid->im_angle = %f\n", winwid->im_angle));