else
if (options->metadata.write_orientation)
{
- orientation = metadata_read_int(fd_n, ORIENTATION_KEY, EXIF_ORIENTATION_TOP_LEFT);
+ if (g_strcmp0(imd->image_fd->format_name, "heif") == 0)
+ {
+ orientation = EXIF_ORIENTATION_TOP_LEFT;
+ }
+ else
+ {
+ orientation = metadata_read_int(fd_n, ORIENTATION_KEY, EXIF_ORIENTATION_TOP_LEFT);
+ }
}
}
if (orientation != (fd_n->exif_orientation ? fd_n->exif_orientation : 1))
{
- if (!options->metadata.write_orientation)
+ if (g_strcmp0(fd_n->format_name, "heif") != 0)
+ {
+ if (!options->metadata.write_orientation)
+ {
+ /* user_orientation does not work together with options->metadata.write_orientation,
+ use either one or the other.
+ we must however handle switching metadata.write_orientation on and off, therefore
+ we just disable referencing new fd's, not unreferencing the old ones
+ */
+ if (fd_n->user_orientation == 0) file_data_ref(fd_n);
+ fd_n->user_orientation = orientation;
+ }
+ }
+ else
{
- /* user_orientation does not work together with options->metadata.write_orientation,
- use either one or the other.
- we must however handle switching metadata.write_orientation on and off, therefore
- we just disable referencing new fd's, not unreferencing the old ones
- */
if (fd_n->user_orientation == 0) file_data_ref(fd_n);
fd_n->user_orientation = orientation;
}
fd_n->user_orientation = 0;
}
- if (options->metadata.write_orientation)
+ if (g_strcmp0(fd_n->format_name, "heif") != 0)
{
- if (type == ALTER_NONE)
- {
- metadata_write_revert(fd_n, ORIENTATION_KEY);
- }
- else
+ if (options->metadata.write_orientation)
{
- metadata_write_int(fd_n, ORIENTATION_KEY, orientation);
+ if (type == ALTER_NONE)
+ {
+ metadata_write_revert(fd_n, ORIENTATION_KEY);
+ }
+ else
+ {
+ metadata_write_int(fd_n, ORIENTATION_KEY, orientation);
+ }
}
}
case FORMAT_CLASS_DOCUMENT:
pixbuf = pixbuf_inline(PIXBUF_INLINE_ICON_PDF);
break;
+ case FORMAT_CLASS_ARCHIVE:
+ pixbuf = pixbuf_inline(PIXBUF_INLINE_ARCHIVE);
+ break;
default:
pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
}
pr = PIXBUF_RENDERER(imd->pr);
pr->zoom = zoom; /* store the zoom, needed by the loader */
+ /* Disable 2-pass for GIFs. Animated GIFs can flicker when enabled
+ * Reduce quality to worst but fastest to avoid dropped frames */
+ if (g_ascii_strcasecmp(imd->image_fd->extension, ".GIF") == 0)
+ {
+ g_object_set(G_OBJECT(imd->pr), "zoom_2pass", FALSE, NULL);
+ g_object_set(G_OBJECT(imd->pr), "zoom_quality", GDK_INTERP_NEAREST, NULL);
+ }
+
+
if (image_load_begin(imd, imd->image_fd))
{
imd->unknown = FALSE;
lw = layout_find_by_image(imd);
- if (!(options->image.fit_window_to_image && lw && lw->options.tools_float)) window = NULL;
+ if (!(options->image.fit_window_to_image && lw && (lw->options.tools_float || lw->options.tools_hidden))) window = NULL;
pixbuf_renderer_set_parent((PixbufRenderer *)imd->pr, (GtkWindow *)window);
}
else if (options->image.exif_rotate_enable)
{
- imd->orientation = metadata_read_int(imd->image_fd, ORIENTATION_KEY, EXIF_ORIENTATION_TOP_LEFT);
- imd->image_fd->exif_orientation = imd->orientation;
+ if (g_strcmp0(imd->image_fd->format_name, "heif") == 0)
+ {
+ imd->orientation = EXIF_ORIENTATION_TOP_LEFT;
+ imd->image_fd->exif_orientation = imd->orientation;
+ }
+ else
+ {
+ imd->orientation = metadata_read_int(imd->image_fd, ORIENTATION_KEY, EXIF_ORIENTATION_TOP_LEFT);
+ imd->image_fd->exif_orientation = imd->orientation;
+ }
}
}
lw = layout_find_by_image(imd);
if (imd->color_profile_enable && lw && !lw->animation)
{
- image_post_process_color(imd, 0, FALSE); /* TODO: error handling */
+ image_post_process_color(imd, 0, FALSE); /** @todo error handling */
}
if (imd->cm || imd->desaturate || imd->overunderexposed)
if ((type & NOTIFY_REREAD) && fd == imd->image_fd)
{
/* there is no need to reload on NOTIFY_CHANGE,
- modified files should be detacted anyway and NOTIFY_REREAD should be recieved
+ modified files should be detacted anyway and NOTIFY_REREAD should be received
or they are removed from the filelist completely on "move" and "delete"
*/
DEBUG_1("Notify image: %s %04x", fd->path, type);
void image_background_set_color_from_options(ImageWindow *imd, gboolean fullscreen)
{
GdkColor *color = NULL;
+#if GTK_CHECK_VERSION(3,0,0)
+ GdkColor theme_color;
+ GdkRGBA bg_color;
+ GtkStyleContext *style_context;
+ LayoutWindow *lw = NULL;
+#endif
if ((options->image.use_custom_border_color && !fullscreen) ||
(options->image.use_custom_border_color_in_fullscreen && fullscreen))
color = &options->image.border_color;
}
+#if GTK_CHECK_VERSION(3,0,0)
+ else
+ {
+ if (!layout_valid(&lw)) return;
+
+ style_context = gtk_widget_get_style_context(lw->window);
+ gtk_style_context_get_background_color(style_context, GTK_STATE_FLAG_NORMAL, &bg_color);
+
+ theme_color.red = bg_color.red * 65535;
+ theme_color.green = bg_color.green * 65535;
+ theme_color.blue = bg_color.blue * 65535;
+
+ color = &theme_color;
+ }
+#endif
+
image_background_set_color(imd, color);
}