root/patches/use-gtkimageview-in-eog2.patch

Revision 409, 26.2 kB (checked in by bjourne, 1 year ago)

Add patch description for the EOG patch.

  • src/eog-image.h

    old new  
    148148 
    149149GdkPixbuf*        eog_image_get_pixbuf               (EogImage   *img); 
    150150 
     151GdkPixbufAnimation *eog_image_get_anim               (EogImage   *img); 
     152 
    151153GdkPixbuf*        eog_image_get_thumbnail            (EogImage   *img); 
    152154 
    153155void              eog_image_get_size                 (EogImage   *img,  
  • src/eog-image-private.h

    old new  
    1 /* Eye Of Gnome - Image Private Data  
     1/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; coding: utf-8 -*- 
    22 * 
     3 * Eye Of Gnome - Image Private Data  
     4 * 
    35 * Copyright (C) 2007 The Free Software Foundation 
    46 * 
    57 * Author: Lucas Rocha <lucasr@gnome.org> 
     
    3133 
    3234        EogImageStatus    status; 
    3335 
    34         GdkPixbuf        *image; 
     36        GdkPixbufAnimation *anim; 
     37     
    3538        GdkPixbuf        *thumbnail; 
    3639         
    3740        gint              width; 
  • src/eog-image-jpeg.c

    old new  
    329329        struct error_handler_data jerr; 
    330330         
    331331        g_return_val_if_fail (EOG_IS_IMAGE (image), FALSE); 
    332         g_return_val_if_fail (EOG_IMAGE (image)->priv->image != NULL, FALSE); 
     332        g_return_val_if_fail (EOG_IMAGE (image)->priv->anim != NULL, FALSE); 
    333333         
    334334        priv = image->priv; 
    335        pixbuf = priv->image
     335        pixbuf = gdk_pixbuf_animation_get_static_image (priv->anim)
    336336         
    337337        outfile = fopen (file, "wb"); 
    338338        if (outfile == NULL) { 
  • src/eog-window.c

    old new  
    1 /* Eye Of Gnome - Main Window  
     1/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; coding: utf-8 -*- 
    22 * 
     3 * Eye Of Gnome - Main Window  
     4 * 
    35 * Copyright (C) 2000-2006 The Free Software Foundation 
    46 * 
    57 * Author: Lucas Rocha <lucasr@gnome.org> 
     
    3234#include <math.h> 
    3335 
    3436#include "eog-window.h" 
    35 #include "eog-scroll-view.h" 
    3637#include "eog-debug.h" 
    3738#include "eog-file-chooser.h" 
    3839#include "eog-thumb-view.h" 
     
    6263#include <glib-object.h> 
    6364#include <glib/gi18n.h> 
    6465#include <gdk/gdkkeysyms.h> 
     66#include <gtkimageview/gtkanimview.h> 
     67#include <gtkimageview/gtkimageview.h> 
     68#include <gtkimageview/gtkimagescrollwin.h> 
     69#include <gtkimageview/gtkzooms.h> 
    6570#ifdef GDK_WINDOWING_X11 
    6671#include <gdk/gdkx.h> 
    6772#endif 
     
    135140        GtkWidget           *box; 
    136141        GtkWidget           *layout; 
    137142        GtkWidget           *cbox; 
     143        GtkWidget           *scroll_win; 
    138144        GtkWidget           *view; 
    139145        GtkWidget           *sidebar; 
    140146        GtkWidget           *thumbview; 
     
    220226        eog_debug (DEBUG_PREFERENCES); 
    221227 
    222228        g_return_if_fail (EOG_IS_WINDOW (user_data)); 
    223  
     229         
    224230        priv = EOG_WINDOW (user_data)->priv; 
    225231 
    226         g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view)); 
     232        g_return_if_fail (GTK_IMAGE_VIEW (priv->view)); 
    227233 
    228234        if (entry->value != NULL && entry->value->type == GCONF_VALUE_BOOL) { 
    229235                interpolate = gconf_value_get_bool (entry->value); 
    230236        } 
    231237 
    232         eog_scroll_view_set_antialiasing (EOG_SCROLL_VIEW (priv->view),  
    233                                           interpolate); 
     238        GdkInterpType interp = GDK_INTERP_NEAREST; 
     239        if (interpolate) { 
     240                interp = GDK_INTERP_BILINEAR; 
     241        } 
     242        gtk_image_view_set_interpolation (GTK_IMAGE_VIEW (priv->view), 
     243                                          interp); 
    234244} 
    235245 
    236246static void 
     
    239249                                         GConfEntry  *entry, 
    240250                                         gpointer    user_data) 
    241251{ 
    242         EogWindowPrivate *priv; 
    243         gboolean scroll_wheel_zoom = FALSE; 
    244  
    245         eog_debug (DEBUG_PREFERENCES); 
    246  
    247         g_return_if_fail (EOG_IS_WINDOW (user_data)); 
    248  
    249         priv = EOG_WINDOW (user_data)->priv; 
    250  
    251         g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view)); 
    252  
    253         if (entry->value != NULL && entry->value->type == GCONF_VALUE_BOOL) { 
    254                 scroll_wheel_zoom = gconf_value_get_bool (entry->value); 
    255         } 
    256  
    257         eog_scroll_view_set_scroll_wheel_zoom (EOG_SCROLL_VIEW (priv->view),  
    258                                                scroll_wheel_zoom); 
     252        printf ("THIS SETTING IS NOT SUPPORTED AT ALL!\n"); 
    259253} 
    260254 
    261255static void 
     
    264258                                       GConfEntry  *entry, 
    265259                                       gpointer    user_data) 
    266260{ 
    267         EogWindowPrivate *priv; 
    268         gdouble multiplier = 0.05; 
    269  
    270         eog_debug (DEBUG_PREFERENCES); 
    271  
    272         g_return_if_fail (EOG_IS_WINDOW (user_data)); 
    273  
    274         priv = EOG_WINDOW (user_data)->priv; 
    275  
    276         g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view)); 
    277  
    278         if (entry->value != NULL && entry->value->type == GCONF_VALUE_FLOAT) { 
    279                 multiplier = gconf_value_get_float (entry->value); 
    280         } 
    281  
    282         eog_scroll_view_set_zoom_multiplier (EOG_SCROLL_VIEW (priv->view),  
    283                                              multiplier); 
     261        printf ("THIS SETTING IS NOT SUPPORTED AT ALL!\n"); 
    284262} 
    285263 
    286264static void 
     
    298276 
    299277        priv = EOG_WINDOW (user_data)->priv; 
    300278 
    301         g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view)); 
     279        g_return_if_fail (GTK_IMAGE_VIEW (priv->view)); 
    302280 
    303281        if (entry->value != NULL && entry->value->type == GCONF_VALUE_STRING) { 
    304282                value = gconf_value_get_string (entry->value); 
     
    313291                color_str = gconf_client_get_string (priv->client, 
    314292                                                     EOG_CONF_VIEW_TRANS_COLOR, NULL); 
    315293                if (gdk_color_parse (color_str, &color)) { 
    316                         eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view), 
    317                                                           EOG_TRANSP_COLOR, &color); 
     294                        printf ("FIXME: Color conversion needed.\n"); 
     295                        gtk_image_view_set_transp (GTK_IMAGE_VIEW (priv->view), 
     296                                                   GTK_IMAGE_TRANSP_COLOR, 
     297                                                   (0xff000000 
     298                                                    | ((color.red >> 8) << 16) 
     299                                                    | ((color.green >> 8) << 8) 
     300                                                    | (color.blue >> 8))); 
    318301                } 
    319302                g_free (color_str); 
    320303        } else if (g_ascii_strcasecmp (value, "CHECK_PATTERN") == 0) { 
    321                 eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view), 
    322                                                  EOG_TRANSP_CHECKED, 0); 
     304                gtk_image_view_set_transp (GTK_IMAGE_VIEW (priv->view), 
     305                                           GTK_IMAGE_TRANSP_GRID, 0); 
    323306        } else { 
    324                 eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view), 
    325                                                  EOG_TRANSP_BACKGROUND, 0); 
     307                gtk_image_view_set_transp (GTK_IMAGE_VIEW (priv->view), 
     308                                           GTK_IMAGE_TRANSP_BACKGROUND, 0); 
    326309        } 
    327310} 
    328311 
     
    343326 
    344327        priv = EOG_WINDOW (user_data)->priv; 
    345328 
    346         g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view)); 
     329        g_return_if_fail (GTK_IS_IMAGE_VIEW (priv->view)); 
    347330 
    348331        value = gconf_client_get_string (priv->client,  
    349332                                         EOG_CONF_VIEW_TRANSPARENCY,  
     
    358341                color_str = gconf_value_get_string (entry->value); 
    359342 
    360343                if (gdk_color_parse (color_str, &color)) { 
    361                         eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view), 
    362                                                           EOG_TRANSP_COLOR, &color); 
     344                        printf ("FIXME: Not sure about this\n"); 
     345                        gtk_image_view_set_transp (GTK_IMAGE_VIEW (priv->view), 
     346                                                   GTK_IMAGE_TRANSP_COLOR, 
     347                                                   (0xff000000 
     348                                                    | ((color.red >> 8) << 16) 
     349                                                    | ((color.green >> 8) << 8) 
     350                                                    | (color.blue >> 8))); 
    363351                } 
    364352        } 
    365353        g_free (value); 
     
    380368 
    381369        priv = EOG_WINDOW (user_data)->priv; 
    382370 
    383         g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view)); 
     371        g_return_if_fail (GTK_IS_IMAGE_VIEW (priv->view)); 
    384372 
    385373        if (entry->value != NULL && entry->value->type == GCONF_VALUE_BOOL) { 
    386374                show_buttons = gconf_value_get_bool (entry->value); 
     
    586574        EogWindowPrivate *priv; 
    587575        char *str = NULL; 
    588576 
     577        printf ("update_status_bar\n"); 
     578 
    589579        g_return_if_fail (EOG_IS_WINDOW (window)); 
    590580         
    591581        eog_debug (DEBUG_WINDOW); 
     
    597587                int zoom, width, height; 
    598588                GnomeVFSFileSize bytes = 0; 
    599589 
    600                 zoom = floor (100 * eog_scroll_view_get_zoom (EOG_SCROLL_VIEW (priv->view)) + 0.5); 
     590                zoom = floor (100 * gtk_image_view_get_zoom (GTK_IMAGE_VIEW (priv->view)) + 0.5); 
    601591 
    602592                eog_image_get_size (priv->image, &width, &height); 
    603593 
     
    605595                 
    606596                if ((width > 0) && (height > 0)) { 
    607597                        char *size_string; 
    608  
     598                         
    609599                        size_string = gnome_vfs_format_file_size_for_display (bytes); 
    610600 
    611601                        /* [image width] x [image height] pixels  [bytes]    [zoom in percent] */ 
     
    629619                            priv->image_info_message_cid, str ? str : ""); 
    630620 
    631621        g_free (str); 
     622        printf ("update_status_bar:done\n"); 
    632623} 
    633624 
    634625static void 
     
    759750                                        priv->mode != EOG_WINDOW_MODE_SLIDESHOW; 
    760751 
    761752                gtk_widget_show (priv->layout); 
    762                 gtk_widget_show_all (priv->view->parent); 
     753                gtk_widget_show_all (priv->scroll_win->parent); 
    763754 
    764755                if (show_image_collection)  
    765756                        gtk_widget_show (priv->nav); 
     
    917908        EogWindowPrivate *priv; 
    918909        GnomeVFSURI *uri; 
    919910 
     911        printf ("eog_window_display_image\n"); 
     912 
    920913        g_return_if_fail (EOG_IS_WINDOW (window)); 
    921914        g_return_if_fail (EOG_IS_IMAGE (image)); 
    922915 
     
    935928                image_thumb_changed_cb (image, window); 
    936929        } 
    937930 
    938         eog_scroll_view_set_image (EOG_SCROLL_VIEW (priv->view), image); 
     931        gtk_anim_view_set_anim (GTK_ANIM_VIEW (priv->view), 
     932                                eog_image_get_anim (image)); 
    939933 
    940934        gtk_window_set_title (GTK_WINDOW (window), eog_image_get_caption (image)); 
    941935 
     
    12471241        EogWindow *window; 
    12481242        EogWindowPrivate *priv; 
    12491243 
     1244        printf ("eog_job_load_cb:start\n"); 
     1245 
    12501246        g_return_if_fail (EOG_IS_WINDOW (data)); 
    12511247         
    12521248        eog_debug (DEBUG_WINDOW); 
     
    13031299 
    13041300                update_status_bar (window); 
    13051301 
    1306                 eog_scroll_view_set_image (EOG_SCROLL_VIEW (priv->view), NULL); 
     1302                gtk_anim_view_set_anim (GTK_ANIM_VIEW (priv->view), NULL); 
    13071303 
    13081304                if (window->priv->status == EOG_WINDOW_STATUS_INIT) { 
    13091305                        update_action_groups_state (window); 
     
    13261322        } 
    13271323 
    13281324        g_object_unref (job->image); 
     1325        printf ("eog_job_load_cb:end\n"); 
    13291326} 
    13301327 
    13311328static void 
     
    13491346eog_job_transform_cb (EogJobTransform *job, gpointer data) 
    13501347{ 
    13511348        EogWindow *window; 
     1349 
     1350        printf ("eog_job_transform_cb\n"); 
    13521351         
    13531352        g_return_if_fail (EOG_IS_WINDOW (data)); 
    13541353         
    13551354        window = EOG_WINDOW (data); 
    13561355 
    13571356        eog_window_clear_transform_job (window); 
     1357 
     1358        gtk_anim_view_set_anim (GTK_ANIM_VIEW (window->priv->view), 
     1359                                eog_image_get_anim (window->priv->image)); 
    13581360} 
    13591361 
    13601362static void  
     
    14491451} 
    14501452         
    14511453static void 
    1452 view_zoom_changed_cb (GtkWidget *widget, double zoom, gpointer user_data) 
     1454view_zoom_changed_cb (GtkWidget *widget, gpointer user_data) 
    14531455{ 
    14541456        EogWindow *window; 
    14551457        GtkAction *action_zoom_in; 
    14561458        GtkAction *action_zoom_out; 
     1459        gdouble zoom; 
    14571460 
    14581461        g_return_if_fail (EOG_IS_WINDOW (user_data)); 
    1459          
     1462 
    14601463        window = EOG_WINDOW (user_data); 
    14611464 
    14621465        update_status_bar (window); 
     
    14691472                gtk_action_group_get_action (window->priv->actions_image,  
    14701473                                             "ViewZoomOut"); 
    14711474 
     1475        zoom = gtk_image_view_get_zoom (GTK_IMAGE_VIEW (window->priv->view)); 
    14721476        gtk_action_set_sensitive (action_zoom_in, 
    1473                         !eog_scroll_view_get_zoom_is_max (EOG_SCROLL_VIEW (window->priv->view))); 
     1477                                 zoom < gtk_zooms_get_max_zoom ()); 
    14741478        gtk_action_set_sensitive (action_zoom_out, 
    1475                         !eog_scroll_view_get_zoom_is_min (EOG_SCROLL_VIEW (window->priv->view))); 
     1479                                 zoom > gtk_zooms_get_min_zoom ()); 
    14761480} 
    14771481 
    14781482static void 
     
    16041608 
    16051609        gtk_widget_hide_all (window->priv->fullscreen_popup); 
    16061610 
    1607         eog_scroll_view_hide_cursor (EOG_SCROLL_VIEW (window->priv->view)); 
     1611        gtk_image_view_set_show_cursor (GTK_IMAGE_VIEW (window->priv->view), 
     1612                                        FALSE); 
    16081613 
    16091614        fullscreen_clear_timeout (window); 
    16101615 
     
    16731678 
    16741679        window->priv->fullscreen_timeout_source = source; 
    16751680 
    1676         eog_scroll_view_show_cursor (EOG_SCROLL_VIEW (window->priv->view)); 
     1681        gtk_image_view_set_show_cursor (GTK_IMAGE_VIEW (window->priv->view), 
     1682                                        TRUE); 
    16771683} 
    16781684 
    16791685static void 
     
    19001906{ 
    19011907        EogWindowPrivate *priv; 
    19021908        GtkWidget *menubar; 
    1903         gboolean upscale; 
    19041909 
    19051910        eog_debug (DEBUG_WINDOW); 
    19061911         
     
    19221927        g_assert (GTK_IS_WIDGET (menubar)); 
    19231928        gtk_widget_hide (menubar); 
    19241929 
    1925         g_object_set (G_OBJECT (gtk_widget_get_parent (priv->view)), 
     1930        g_object_set (G_OBJECT (gtk_widget_get_parent (priv->scroll_win)), 
    19261931                      "shadow-type", GTK_SHADOW_NONE, 
    19271932                      NULL); 
    19281933 
     
    19621967                slideshow_set_timeout (window); 
    19631968        } 
    19641969 
    1965         upscale = gconf_client_get_bool (priv->client,  
    1966                                          EOG_CONF_FULLSCREEN_UPSCALE,  
    1967                                          NULL); 
     1970        gtk_widget_grab_focus (priv->view); 
    19681971 
    1969         eog_scroll_view_set_zoom_upscale (EOG_SCROLL_VIEW (priv->view),  
    1970                                           upscale); 
     1972         
    19711973 
    1972         gtk_widget_grab_focus (priv->view); 
    1973  
    1974         gtk_widget_modify_bg (window->priv->view, GTK_STATE_NORMAL,  
     1974        gtk_widget_modify_bg (window->priv->view, GTK_STATE_NORMAL, 
    19751975                              &(GTK_WIDGET (window)->style->black)); 
     1976        gtk_image_view_set_show_frame (GTK_IMAGE_VIEW (priv->view), FALSE); 
    19761977 
    19771978        { 
     1979                /* Make the border of the frame the scroll_win is 
     1980                   added to invisible. */ 
    19781981                GtkStyle *style; 
     1982                GtkWidget *frame; 
    19791983 
    1980                 style = gtk_style_copy (gtk_widget_get_style (priv->view->parent))
     1984                frame = priv->scroll_win->parent
    19811985 
     1986                style = gtk_style_copy (gtk_widget_get_style (frame)); 
    19821987                style->xthickness = 0; 
    19831988                style->ythickness = 0; 
    19841989 
    1985                 gtk_widget_set_style (priv->view->parent, style); 
    1986  
     1990                gtk_widget_set_style (frame, style); 
    19871991                g_object_unref (style); 
    19881992        } 
    19891993 
     
    20192023        if (slideshow) { 
    20202024                slideshow_clear_timeout (window); 
    20212025        } 
    2022          
    2023         g_object_set (G_OBJECT (gtk_widget_get_parent (priv->view)), 
     2026 
     2027        g_object_set (G_OBJECT (gtk_widget_get_parent (priv->scroll_win)), 
    20242028                      "shadow-type", GTK_SHADOW_IN, 
    2025                       NULL); 
     2029                      NULL);    
    20262030 
    20272031        g_signal_handlers_disconnect_by_func (priv->view, 
    20282032                                              (gpointer) fullscreen_motion_notify_cb, 
     
    20452049        menubar = gtk_ui_manager_get_widget (priv->ui_mgr, "/MainMenu"); 
    20462050        g_assert (GTK_IS_WIDGET (menubar)); 
    20472051        gtk_widget_show (menubar); 
    2048          
    2049         eog_scroll_view_set_zoom_upscale (EOG_SCROLL_VIEW (priv->view), FALSE); 
    20502052 
    2051         gtk_widget_modify_bg (window->priv->view, GTK_STATE_NORMAL, NULL); 
    2052         gtk_widget_set_style (window->priv->view->parent, NULL); 
    20532053        gtk_window_unfullscreen (GTK_WINDOW (window)); 
    20542054 
     2055        gtk_widget_modify_bg (window->priv->view, GTK_STATE_NORMAL, NULL); 
     2056        gtk_image_view_set_show_frame (GTK_IMAGE_VIEW (priv->view), TRUE); 
     2057        gtk_image_view_set_show_cursor (GTK_IMAGE_VIEW (priv->view), TRUE); 
     2058 
    20552059        if (slideshow) { 
    20562060                eog_window_update_slideshow_action (window); 
    20572061        } else { 
    20582062                eog_window_update_fullscreen_action (window); 
    20592063        } 
    2060  
    2061         eog_scroll_view_show_cursor (EOG_SCROLL_VIEW (priv->view)); 
    2062  
    20632064        eog_application_screensaver_enable (EOG_APP); 
    20642065} 
    20652066 
     
    30723073        priv = EOG_WINDOW (user_data)->priv; 
    30733074 
    30743075        if (priv->view) { 
    3075                 eog_scroll_view_zoom_in (EOG_SCROLL_VIEW (priv->view), FALSE); 
     3076                gtk_image_view_zoom_in (GTK_IMAGE_VIEW (priv->view)); 
    30763077        } 
    30773078} 
    30783079 
     
    30883089        priv = EOG_WINDOW (user_data)->priv; 
    30893090 
    30903091        if (priv->view) { 
    3091                 eog_scroll_view_zoom_out (EOG_SCROLL_VIEW (priv->view), FALSE); 
     3092                gtk_image_view_zoom_out (GTK_IMAGE_VIEW (priv->view)); 
    30923093        } 
    30933094} 
    30943095 
     
    31043105        priv = EOG_WINDOW (user_data)->priv; 
    31053106 
    31063107        if (priv->view) { 
    3107                 eog_scroll_view_set_zoom (EOG_SCROLL_VIEW (priv->view), 1.0); 
     3108                gtk_image_view_set_zoom (GTK_IMAGE_VIEW (priv->view), 1.0); 
    31083109        } 
    31093110} 
    31103111 
     
    31203121        priv = EOG_WINDOW (user_data)->priv; 
    31213122 
    31223123        if (priv->view) { 
    3123                 eog_scroll_view_zoom_fit (EOG_SCROLL_VIEW (priv->view)); 
     3124                gtk_image_view_set_fitting (GTK_IMAGE_VIEW (priv->view), TRUE); 
    31243125        } 
    31253126} 
    31263127 
     
    38073808                                G_CALLBACK (eog_window_sidebar_page_removed), 
    38083809                                window); 
    38093810 
    3810         priv->view = eog_scroll_view_new (); 
    3811         gtk_widget_set_size_request (GTK_WIDGET (priv->view), 100, 100); 
     3811        priv->view = gtk_anim_view_new (); 
     3812        priv->scroll_win = 
     3813                gtk_image_scroll_win_new (GTK_IMAGE_VIEW (priv->view)); 
     3814        gtk_widget_set_size_request (priv->view, 100, 100); 
    38123815        g_signal_connect (G_OBJECT (priv->view), 
    38133816                          "zoom_changed", 
    38143817                          G_CALLBACK (view_zoom_changed_cb),  
     
    38183821                                "shadow-type", GTK_SHADOW_IN,  
    38193822                                NULL); 
    38203823 
    3821         gtk_container_add (GTK_CONTAINER (frame), priv->view); 
     3824        gtk_container_add (GTK_CONTAINER (frame), priv->scroll_win); 
    38223825 
    38233826        gtk_paned_pack1 (GTK_PANED (hpaned), 
    38243827                         priv->sidebar, 
     
    41954198                if (tbcontainer->focus_child != NULL) 
    41964199                        break; 
    41974200        case GDK_Page_Up: 
    4198                 if (!eog_scroll_view_scrollbars_visible (EOG_SCROLL_VIEW (EOG_WINDOW (widget)->priv->view))) { 
    4199                         eog_thumb_view_select_single (EOG_THUMB_VIEW (EOG_WINDOW (widget)->priv->thumbview),  
    4200                                                       EOG_THUMB_VIEW_SELECT_LEFT); 
    4201                         result = TRUE;           
    4202                 } 
     4201                printf ("FIXME: Not sure about this\n"); 
     4202/*              if (!eog_scroll_view_scrollbars_visible (EOG_SCROLL_VIEW (EOG_WINDOW (widget)->priv->view))) { */ 
     4203/*                      eog_thumb_view_select_single (EOG_THUMB_VIEW (EOG_WINDOW (widget)->priv->thumbview),  */ 
     4204/*                                                    EOG_THUMB_VIEW_SELECT_LEFT); */ 
     4205/*                      result = TRUE;           */ 
     4206/*              } */ 
    42034207 
    4204                 if (EOG_WINDOW (widget)->priv->mode == EOG_WINDOW_MODE_SLIDESHOW) { 
    4205                         slideshow_set_timeout (EOG_WINDOW (widget)); 
    4206                 } 
     4208/*              if (EOG_WINDOW (widget)->priv->mode == EOG_WINDOW_MODE_SLIDESHOW) { */ 
     4209/*                      slideshow_set_timeout (EOG_WINDOW (widget)); */ 
     4210/*              } */ 
    42074211                 
    42084212                break; 
    42094213        case GDK_Down: 
     
    42114215                if (tbcontainer->focus_child != NULL) 
    42124216                        break; 
    42134217        case GDK_Page_Down: 
    4214                 if (!eog_scroll_view_scrollbars_visible (EOG_SCROLL_VIEW (EOG_WINDOW (widget)->priv->view))) { 
    4215                         eog_thumb_view_select_single (EOG_THUMB_VIEW (EOG_WINDOW (widget)->priv->thumbview),  
    4216                                                       EOG_THUMB_VIEW_SELECT_RIGHT); 
    4217                         result = TRUE; 
    4218                 } 
     4218                printf ("FIXME: Not sure about this\n"); 
     4219/*              if (!eog_scroll_view_scrollbars_visible (EOG_SCROLL_VIEW (EOG_WINDOW (widget)->priv->view))) { */ 
     4220/*                      eog_thumb_view_select_single (EOG_THUMB_VIEW (EOG_WINDOW (widget)->priv->thumbview),  */ 
     4221/*                                                    EOG_THUMB_VIEW_SELECT_RIGHT); */ 
     4222/*                      result = TRUE; */ 
     4223/*              } */ 
    42194224 
    4220                 if (EOG_WINDOW (widget)->priv->mode == EOG_WINDOW_MODE_SLIDESHOW) { 
    4221                         slideshow_set_timeout (EOG_WINDOW (widget)); 
    4222                 } 
     4225/*              if (EOG_WINDOW (widget)->priv->mode == EOG_WINDOW_MODE_SLIDESHOW) { */ 
     4226/*                      slideshow_set_timeout (EOG_WINDOW (widget)); */ 
     4227/*              } */ 
    42234228 
    42244229                break; 
    42254230        } 
  • src/eog-image.c

    old new  
    1 /* Eye Of Gnome - Image  
     1/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; coding: utf-8 -*- 
    22 * 
     3 * Eye Of Gnome - Image  
     4 * 
    35 * Copyright (C) 2006 The Free Software Foundation 
    46 * 
    57 * Author: Lucas Rocha <lucasr@gnome.org> 
     
    2325#include "config.h" 
    2426#endif 
    2527 
     28/* Define needed to get the gdk_pixbuf_non_anim_new() function. */ 
     29#define GDK_PIXBUF_ENABLE_BACKEND 
     30 
    2631#include "eog-image.h" 
    2732#include "eog-image-private.h" 
    2833#include "eog-debug.h" 
     
    4146 
    4247#include <unistd.h> 
    4348 
     49 
     50 
    4451#include <glib.h> 
    4552#include <glib-object.h> 
    4653#include <glib/gi18n.h> 
    4754#include <gtk/gtk.h> 
    4855#include <gdk-pixbuf/gdk-pixbuf.h> 
     56#include <gdk-pixbuf/gdk-pixbuf-animation.h> 
    4957#include <libgnomevfs/gnome-vfs.h> 
    5058#include <libgnomeui/gnome-thumbnail.h> 
    5159 
     
    9199        if (priv->status == EOG_IMAGE_STATUS_LOADING) { 
    92100                eog_image_cancel_load (image); 
    93101        } else { 
    94                 if (priv->image != NULL) { 
    95                         g_object_unref (priv->image); 
    96                         priv->image = NULL; 
     102                if (priv->anim != NULL) { 
     103                        g_object_unref (priv->anim); 
     104                        priv->anim = NULL; 
    97105                } 
    98106                 
    99107#ifdef HAVE_EXIF 
     
    231239        img->priv = EOG_IMAGE_GET_PRIVATE (img); 
    232240 
    233241        img->priv->uri = NULL; 
    234         img->priv->image = NULL; 
     242        img->priv->anim = NULL; 
    235243        img->priv->thumbnail = NULL; 
    236244        img->priv->width = -1; 
    237245        img->priv->height = -1; 
     
    342350        GdkPixbuf *transformed; 
    343351        gboolean modified = FALSE; 
    344352 
     353        printf ("eog_image_real_transform\n"); 
     354 
    345355        g_return_if_fail (EOG_IS_IMAGE (img)); 
    346356        g_return_if_fail (EOG_IS_TRANSFORM (trans)); 
    347357 
    348358        priv = img->priv; 
    349359 
    350         if (priv->image != NULL) { 
    351                 transformed = eog_transform_apply (trans, priv->image, job); 
     360        /* Transformations cannot be applied to animations. */ 
     361        if (priv->anim != NULL && 
     362            gdk_pixbuf_animation_is_static_image (priv->anim) == TRUE) { 
     363 
     364                printf ("Making transform!\n"); 
    352365                 
    353                 g_object_unref (priv->image); 
    354                 priv->image = transformed; 
     366                /* Take the static frame, transform it, and then 
     367                   repackage it in the animation. */ 
     368                GdkPixbuf *pixbuf; 
    355369 
     370                pixbuf = gdk_pixbuf_animation_get_static_image (priv->anim); 
     371                transformed = eog_transform_apply (trans, pixbuf, job); 
     372                g_object_unref (priv->anim); 
     373 
     374                priv->anim = gdk_pixbuf_non_anim_new (transformed); 
    356375                priv->width = gdk_pixbuf_get_width (transformed); 
    357376                priv->height = gdk_pixbuf_get_height (transformed); 
    358         
    359377                modified = TRUE; 
    360378        } 
    361379 
     
    459477                return TRUE; 
    460478        } 
    461479 
    462         if (priv->image == NULL) { 
     480        if (priv->anim == NULL) { 
    463481                g_set_error (error,  
    464482                             EOG_IMAGE_ERROR,  
    465483                             EOG_IMAGE_ERROR_NOT_LOADED, 
     
    468486                return FALSE; 
    469487        } 
    470488 
    471         if (priv->trans != NULL) { 
    472                 transformed = eog_transform_apply (priv->trans, priv->image, NULL); 
     489        /* Transformations can only be applied to images, not 
     490           animations. */ 
     491        if (gdk_pixbuf_animation_is_static_image (priv->anim) && 
     492            priv->trans != NULL) { 
     493                /* Take the static frame, transform it, and then 
     494                   repackage it in the animation. */ 
     495                GdkPixbuf *pixbuf; 
     496 
     497                pixbuf = gdk_pixbuf_animation_get_static_image (priv->anim); 
     498                transformed = eog_transform_apply (priv->trans, pixbuf, NULL); 
     499                g_object_unref (priv->anim); 
     500                 
     501                priv->anim = gdk_pixbuf_non_anim_new (transformed); 
     502                priv->width = gdk_pixbuf_get_width (transformed); 
     503                priv->height = gdk_pixbuf_get_height (transformed); 
    473504        } 
    474505 
    475         g_object_unref (priv->image); 
    476         priv->image = transformed; 
    477  
    478         if (transformed != NULL) { 
    479                 priv->width = gdk_pixbuf_get_width (priv->image); 
    480                 priv->height = gdk_pixbuf_get_height (priv->image); 
    481         } else { 
     506        if (transformed == NULL) { 
    482507                g_set_error (error,  
    483508                             EOG_IMAGE_ERROR,  
    484509                             EOG_IMAGE_ERROR_GENERIC, 
     
    529554        cmsHTRANSFORM transform; 
    530555        gint row, width, rows, stride; 
    531556        guchar *p; 
     557        GdkPixbuf *pixbuf; 
    532558         
    533559        g_return_if_fail (img != NULL); 
    534560 
    535561        priv = img->priv; 
    536562 
    537         if (screen == NULL || priv->profile == NULL) return; 
     563        if (screen == NULL || 
     564            priv->profile == NULL || 
     565            gdk_pixbuf_animation_is_static_image (priv->anim) == FALSE) 
     566                return; 
    538567 
    539568        transform = cmsCreateTransform (priv->profile,  
    540569                                        TYPE_RGB_8,  
     
    542571                                        TYPE_RGB_8,  
    543572                                        INTENT_PERCEPTUAL,  
    544573                                        0); 
     574 
     575        pixbuf = gdk_pixbuf_animation_get_static_image (priv->anim); 
    545576         
    546         rows = gdk_pixbuf_get_height(priv->image); 
    547         width = gdk_pixbuf_get_width (priv->image); 
    548         stride = gdk_pixbuf_get_rowstride (priv->image); 
    549         p = gdk_pixbuf_get_pixels (priv->image); 
     577        rows = gdk_pixbuf_get_height(pixbuf); 
     578        width = gdk_pixbuf_get_width (pixbuf); 
     579        stride = gdk_pixbuf_get_rowstride (pixbuf); 
     580        p = gdk_pixbuf_get_pixels (pixbuf); 
    550581 
    551582        for (row = 0; row < rows; ++row) { 
    552583                cmsDoTransform(transform, p, p, width); 
     
    870901 
    871902        priv = img->priv; 
    872903 
    873         g_assert (!read_image_data || priv->image == NULL); 
     904        g_assert (!read_image_data || priv->anim == NULL); 
    874905 
    875906        if (read_image_data && priv->file_type != NULL) { 
    876907                g_free (priv->file_type); 
     
    10311062                } 
    10321063        } else { 
    10331064                if (read_image_data) { 
    1034                         if (priv->image != NULL) { 
    1035                                 g_object_unref (priv->image); 
     1065                        if (priv->anim != NULL) { 
     1066                                g_object_unref (priv->anim); 
    10361067                        } 
    10371068 
    1038                         priv->image = gdk_pixbuf_loader_get_pixbuf (loader); 
     1069                        priv->anim = gdk_pixbuf_loader_get_animation (loader); 
    10391070 
    1040                         g_assert (priv->image != NULL); 
     1071                        g_assert (priv->anim != NULL); 
    10411072 
    1042                         g_object_ref (priv->image); 
     1073                        g_object_ref (priv->anim); 
    10431074 
    1044                         priv->width = gdk_pixbuf_get_width (priv->image); 
    1045                         priv->height = gdk_pixbuf_get_height (priv->image); 
     1075                        priv->width = 
     1076                                gdk_pixbuf_animation_get_width (priv->anim); 
     1077                        priv->height = 
     1078                                gdk_pixbuf_animation_get_height (priv->anim); 
    10461079 
    10471080                        format = gdk_pixbuf_loader_get_format (loader); 
    10481081 
     
    10841117         
    10851118        if ((req_data & EOG_IMAGE_DATA_IMAGE) > 0) { 
    10861119                req_data = (req_data & !EOG_IMAGE_DATA_IMAGE); 
    1087                 has_data = has_data && (priv->image != NULL); 
     1120                has_data = has_data && (priv->anim != NULL); 
    10881121        } 
    10891122 
    10901123        if ((req_data & EOG_IMAGE_DATA_DIMENSION) > 0 ) { 
     
    11981231        g_return_val_if_fail (EOG_IS_IMAGE (img), NULL); 
    11991232 
    12001233        g_mutex_lock (img->priv->status_mutex); 
    1201         image = img->priv->image
     1234        image = gdk_pixbuf_animation_get_static_image (img->priv->anim)
    12021235        g_mutex_unlock (img->priv->status_mutex); 
    12031236 
    12041237        if (image != NULL) { 
     
    12081241        return image; 
    12091242} 
    12101243 
     1244GdkPixbufAnimation * 
     1245eog_image_get_anim (EogImage *img) 
     1246{ 
     1247        GdkPixbufAnimation *anim; 
     1248         
     1249        g_return_val_if_fail (EOG_IS_IMAGE (img), NULL); 
     1250 
     1251        g_mutex_lock (img->priv->status_mutex); 
     1252        anim = img->priv->anim; 
     1253        g_mutex_unlock (img->priv->status_mutex); 
     1254 
     1255        if (anim != NULL) { 
     1256                g_object_ref (anim); 
     1257        } 
     1258 
     1259        return anim; 
     1260} 
     1261 
    12111262#ifdef HAVE_LCMS 
    12121263cmsHPROFILE 
    12131264eog_image_get_profile (EogImage *img) 
     
    14811532        } 
    14821533 
    14831534        /* fail if there is no image to save */ 
    1484         if (priv->image == NULL) { 
     1535        if (priv->anim == NULL) { 
    14851536                g_set_error (error, EOG_IMAGE_ERROR, 
    14861537                             EOG_IMAGE_ERROR_NOT_LOADED, 
    14871538                             _("No image loaded.")); 
     
    15071558#endif 
    15081559 
    15091560        if (!success && (*error == NULL)) { 
    1510                 success = gdk_pixbuf_save (priv->image, tmpfile, source->format, error, NULL); 
     1561                success = gdk_pixbuf_save 
     1562                        (gdk_pixbuf_animation_get_static_image (priv->anim), 
     1563                         tmpfile, 
     1564                         source->format, 
     1565                         error, 
     1566                         NULL); 
    15111567        } 
    15121568 
    15131569        if (success) { 
     
    16091665        priv = img->priv; 
    16101666 
    16111667        /* fail if there is no image to save */ 
    1612         if (priv->image == NULL) { 
     1668        if (priv->anim == NULL) { 
    16131669                g_set_error (error,  
    16141670                             EOG_IMAGE_ERROR, 
    16151671                             EOG_IMAGE_ERROR_NOT_LOADED, 
     
    16451701#endif 
    16461702 
    16471703        if (!success && (*error == NULL)) { 
    1648                 success = gdk_pixbuf_save (priv->image, tmpfile, target->format, error, NULL); 
     1704                success = gdk_pixbuf_save 
     1705                        (gdk_pixbuf_animation_get_static_image (priv->anim), 
     1706                         tmpfile, 
     1707                         target->format, 
     1708                         error, 
     1709                         NULL); 
    16491710        } 
    16501711 
    16511712        if (success && !direct_copy) { /* not required if we alredy copied the file directly */ 
  • configure.ac

    old new  
    7676GNOME_ICON_THEME_REQUIRED=2.19.1 
    7777SHARED_MIME_INFO_REQUIRED=0.20 
    7878EXEMPI_REQUIRED=1.99.2 
     79GTKIMAGEVIEW_REQUIRED=1.4.0 
    7980 
    8081 
    8182EOG_MODULES="gtk+-2.0 >= $GTK_REQUIRED \ 
     
    8990             gnome-desktop-2.0 >= $GNOME_DESKTOP_REQUIRED \ 
    9091             gtk+-unix-print-2.0 >= $GTK_PRINT_REQUIRED \ 
    9192