Index: src/picture_viewer.c =================================================================== --- src/picture_viewer.c (revision 3381) +++ src/picture_viewer.c (working copy) @@ -913,26 +913,49 @@ { GtkWidget *widget = GTK_WIDGET(viewer); + RsttoNavigatorEntry *entry = rstto_navigator_get_file(viewer->priv->navigator); + if (viewer->priv->src_pixbuf) { gdk_pixbuf_unref(viewer->priv->src_pixbuf); viewer->priv->src_pixbuf = NULL; } - if (viewer->priv->iter) + + if (entry) { - viewer->priv->src_pixbuf = gdk_pixbuf_animation_iter_get_pixbuf(viewer->priv->iter); - viewer->priv->src_pixbuf = gdk_pixbuf_copy(viewer->priv->src_pixbuf); - } - else - { - if (viewer->priv->loader) + GdkPixbuf *pixbuf = NULL; + + if (viewer->priv->iter) { - viewer->priv->src_pixbuf = gdk_pixbuf_loader_get_pixbuf(viewer->priv->loader); - if (viewer->priv->src_pixbuf) + pixbuf = gdk_pixbuf_animation_iter_get_pixbuf(viewer->priv->iter); + } + else + { + if (viewer->priv->loader) { - gdk_pixbuf_ref(viewer->priv->src_pixbuf); + pixbuf = gdk_pixbuf_loader_get_pixbuf(viewer->priv->loader); } } + + + if (pixbuf != NULL) + { + viewer->priv->src_pixbuf = gdk_pixbuf_rotate_simple(pixbuf, rstto_navigator_entry_get_rotation(entry)); + if (rstto_navigator_entry_get_flip(entry, FALSE)) + { + pixbuf = viewer->priv->src_pixbuf; + viewer->priv->src_pixbuf = gdk_pixbuf_flip(pixbuf, FALSE); + gdk_pixbuf_unref(pixbuf); + } + + if (rstto_navigator_entry_get_flip(entry, TRUE)) + { + pixbuf = viewer->priv->src_pixbuf; + viewer->priv->src_pixbuf = gdk_pixbuf_flip(pixbuf, TRUE); + gdk_pixbuf_unref(pixbuf); + } + } + } rstto_picture_viewer_refresh(viewer);