Trim trailing white spaces.
[geeqie.git] / src / pixbuf-renderer.c
index a7d744e..688a480 100644 (file)
@@ -390,7 +390,7 @@ static RendererFuncs *pr_backend_renderer_new(PixbufRenderer *pr)
 #endif
                }
        return renderer_tiles_new(pr);
-}      
+}
 
 
 static void pixbuf_renderer_init(PixbufRenderer *pr)
@@ -431,6 +431,7 @@ static void pixbuf_renderer_init(PixbufRenderer *pr)
        pr->renderer2 = NULL;
 
        gtk_widget_set_double_buffered(box, FALSE);
+       gtk_widget_set_app_paintable(box, TRUE);
        g_signal_connect_after(G_OBJECT(box), "size_allocate",
                               G_CALLBACK(pr_size_cb), pr);
 
@@ -1182,6 +1183,7 @@ void pixbuf_renderer_set_tiles(PixbufRenderer *pr, gint width, gint height,
        pr->func_tile_dispose = func_dispose;
        pr->func_tile_data = user_data;
 
+       pr_stereo_temp_disable(pr, TRUE);
        pr_zoom_sync(pr, zoom, PR_ZOOM_FORCE | PR_ZOOM_NEW, 0, 0);
 }
 
@@ -1260,9 +1262,6 @@ static void pr_zoom_adjust_real(PixbufRenderer *pr, gdouble increment,
 
 static void pr_update_signal(PixbufRenderer *pr)
 {
-#if 0
-       log_printf("FIXME: send updated signal\n");
-#endif
        DEBUG_1("%s pixbuf renderer updated - started drawing %p, img: %dx%d", get_exec_time(), pr, pr->image_width, pr->image_height);
        pr->debug_updated = TRUE;
 }
@@ -1496,7 +1495,7 @@ static void pixbuf_renderer_sync_scroll_center(PixbufRenderer *pr)
        gint src_x, src_y;
        if (!pr->width || !pr->height) return;
 
-       /* 
+       /*
         * Update norm_center only if the image is bigger than the window.
         * With this condition the stored center survives also a temporary display
         * of the "broken image" icon.
@@ -1692,8 +1691,6 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom,
 {
        gdouble old_scale;
        gint old_cx, old_cy;
-       gboolean clamped;
-       gboolean sized;
        gboolean center_point = !!(flags & PR_ZOOM_CENTER);
        gboolean force = !!(flags & PR_ZOOM_FORCE);
        gboolean new = !!(flags & PR_ZOOM_NEW);
@@ -1701,7 +1698,7 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom,
        PrZoomFlags clamp_flags = flags;
        gdouble old_center_x = pr->norm_center_x;
        gdouble old_center_y = pr->norm_center_y;
-       
+
        old_scale = pr->scale;
        if (center_point)
                {
@@ -1720,8 +1717,8 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom,
        if (force) clamp_flags |= PR_ZOOM_INVALIDATE;
        if (!pr_zoom_clamp(pr, zoom, clamp_flags)) return;
 
-       clamped = pr_size_clamp(pr);
-       sized = pr_parent_window_resize(pr, pr->width, pr->height);
+       (void) pr_size_clamp(pr);
+       (void) pr_parent_window_resize(pr, pr->width, pr->height);
 
        if (force && new)
                {
@@ -2054,11 +2051,7 @@ static gboolean pr_mouse_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpo
                }
 
        parent = gtk_widget_get_parent(widget);
-#if GTK_CHECK_VERSION(2,20,0)
        if (widget && gtk_widget_get_can_focus(parent))
-#else
-       if (widget && GTK_WIDGET_CAN_FOCUS(parent))
-#endif
                {
                gtk_widget_grab_focus(parent);
                }
@@ -2078,11 +2071,7 @@ static gboolean pr_mouse_release_cb(GtkWidget *widget, GdkEventButton *bevent, g
                return TRUE;
                }
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gdk_pointer_is_grabbed() && gtk_widget_has_grab(GTK_WIDGET(pr)))
-#else
-       if (gdk_pointer_is_grabbed() && GTK_WIDGET_HAS_GRAB(pr))
-#endif
                {
                gtk_grab_remove(widget);
                gdk_pointer_ungrab(bevent->time);
@@ -2146,7 +2135,7 @@ static void pr_signals_connect(PixbufRenderer *pr)
                         G_CALLBACK(pr_leave_notify_cb), pr);
 
        gtk_widget_set_events(GTK_WIDGET(pr), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK |
-                                             GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK |
+                                             GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_SCROLL_MASK |
                                              GDK_LEAVE_NOTIFY_MASK);
 
        g_signal_connect(G_OBJECT(pr), "drag_begin",
@@ -2228,7 +2217,7 @@ const double pr_dubois_matrix[3][6] = {
        { 0.456,  0.500,  0.176, -0.043, -0.088, -0.002},
        {-0.040, -0.038, -0.016,  0.378,  0.734, -0.018},
        {-0.015, -0.021, -0.005, -0.072, -0.113,  1.226}
-       }; 
+       };
 
 static void pr_create_anaglyph_dubois(GdkPixbuf *pixbuf, GdkPixbuf *right, gint x, gint y, gint w, gint h)
 {
@@ -2253,7 +2242,7 @@ static void pr_create_anaglyph_dubois(GdkPixbuf *pixbuf, GdkPixbuf *right, gint
                for (j = 0; j < w; j++)
                        {
                        double res[3];
-                       for (k = 0; k < 3; k++) 
+                       for (k = 0; k < 3; k++)
                                {
                                const double *m = pr_dubois_matrix[k];
                                res[k] = sp[0] * m[0] + sp[1] * m[1] + sp[2] * m[2] + dp[0] * m[3] + dp[1] * m[4] + dp[2] * m[5];
@@ -2297,12 +2286,12 @@ static void pr_pixbuf_size_sync(PixbufRenderer *pr)
                case EXIF_ORIENTATION_LEFT_BOTTOM:
                        pr->image_width = gdk_pixbuf_get_height(pr->pixbuf);
                        pr->image_height = gdk_pixbuf_get_width(pr->pixbuf);
-                       if (pr->stereo_data == STEREO_PIXBUF_SBS) 
+                       if (pr->stereo_data == STEREO_PIXBUF_SBS)
                                {
                                pr->image_height /= 2;
                                pr->stereo_pixbuf_offset_right = pr->image_height;
                                }
-                       else if (pr->stereo_data == STEREO_PIXBUF_CROSS) 
+                       else if (pr->stereo_data == STEREO_PIXBUF_CROSS)
                                {
                                pr->image_height /= 2;
                                pr->stereo_pixbuf_offset_left = pr->image_height;
@@ -2312,12 +2301,12 @@ static void pr_pixbuf_size_sync(PixbufRenderer *pr)
                default:
                        pr->image_width = gdk_pixbuf_get_width(pr->pixbuf);
                        pr->image_height = gdk_pixbuf_get_height(pr->pixbuf);
-                       if (pr->stereo_data == STEREO_PIXBUF_SBS) 
+                       if (pr->stereo_data == STEREO_PIXBUF_SBS)
                                {
                                pr->image_width /= 2;
                                pr->stereo_pixbuf_offset_right = pr->image_width;
                                }
-                       else if (pr->stereo_data == STEREO_PIXBUF_CROSS) 
+                       else if (pr->stereo_data == STEREO_PIXBUF_CROSS)
                                {
                                pr->image_width /= 2;
                                pr->stereo_pixbuf_offset_left = pr->image_width;
@@ -2333,8 +2322,6 @@ static void pr_set_pixbuf(PixbufRenderer *pr, GdkPixbuf *pixbuf, gdouble zoom, P
 
        if (!pr->pixbuf)
                {
-               GtkWidget *box;
-
                /* no pixbuf so just clear the window */
                pr->image_width = 0;
                pr->image_height = 0;
@@ -2342,27 +2329,15 @@ static void pr_set_pixbuf(PixbufRenderer *pr, GdkPixbuf *pixbuf, gdouble zoom, P
                pr->zoom = zoom; /* don't throw away the zoom value, it is set by pixbuf_renderer_move, among others,
                                    and used for pixbuf_renderer_zoom_get */
 
-               box = GTK_WIDGET(pr);
-
-#if GTK_CHECK_VERSION(2,20,0)
-               if (gtk_widget_get_realized(box))
-#else
-               if (GTK_WIDGET_REALIZED(box))
-#endif
-                       {
-#if !GTK_CHECK_VERSION(3,0,0)
-                       gdk_window_clear(gtk_widget_get_window(box));
-#endif
-                       pr->renderer->overlay_draw(pr->renderer, 0, 0, pr->viewport_width, pr->viewport_height);
-                       if (pr->renderer2) pr->renderer2->overlay_draw(pr->renderer2, 0, 0, pr->viewport_width, pr->viewport_height);
-                       }
+               pr->renderer->update_pixbuf(pr->renderer, flags & PR_ZOOM_LAZY);
+               if (pr->renderer2) pr->renderer2->update_pixbuf(pr->renderer2, flags & PR_ZOOM_LAZY);
 
                pr_update_signal(pr);
 
                return;
                }
 
-       if (pr->stereo_mode & PR_STEREO_TEMP_DISABLE) 
+       if (pr->stereo_mode & PR_STEREO_TEMP_DISABLE)
                {
                gint disable = !pr->pixbuf || ! pr->stereo_data;
                pr_stereo_temp_disable(pr, disable);
@@ -2429,7 +2404,7 @@ void pixbuf_renderer_set_stereo_data(PixbufRenderer *pr, StereoPixbufData stereo
 
        pr->stereo_data = stereo_data;
 
-       if (pr->stereo_mode & PR_STEREO_TEMP_DISABLE) 
+       if (pr->stereo_mode & PR_STEREO_TEMP_DISABLE)
                {
                gint disable = !pr->pixbuf || ! pr->stereo_data;
                pr_stereo_temp_disable(pr, disable);
@@ -2511,8 +2486,61 @@ void pixbuf_renderer_move(PixbufRenderer *pr, PixbufRenderer *source)
        pr->scroll_reset = scroll_reset;
 
        pixbuf_renderer_set_pixbuf(source, NULL, source->zoom);
-//     pr_queue_clear(source);
-//     pr_tile_free_all(source);
+}
+
+void pixbuf_renderer_copy(PixbufRenderer *pr, PixbufRenderer *source)
+{
+       GObject *object;
+       PixbufRendererScrollResetType scroll_reset;
+
+       g_return_if_fail(IS_PIXBUF_RENDERER(pr));
+       g_return_if_fail(IS_PIXBUF_RENDERER(source));
+
+       if (pr == source) return;
+
+       object = G_OBJECT(pr);
+
+       g_object_set(object, "zoom_min", source->zoom_min, NULL);
+       g_object_set(object, "zoom_max", source->zoom_max, NULL);
+       g_object_set(object, "loading", source->loading, NULL);
+
+       pr->complete = source->complete;
+
+       pr->x_scroll = source->x_scroll;
+       pr->y_scroll = source->y_scroll;
+       pr->x_mouse  = source->x_mouse;
+       pr->y_mouse  = source->y_mouse;
+
+       scroll_reset = pr->scroll_reset;
+       pr->scroll_reset = PR_SCROLL_RESET_NOCHANGE;
+
+       pr->orientation = source->orientation;
+       pr->stereo_data = source->stereo_data;
+
+       if (source->source_tiles_enabled)
+               {
+               pr->source_tiles_enabled = source->source_tiles_enabled;
+               pr->source_tiles_cache_size = source->source_tiles_cache_size;
+               pr->source_tile_width = source->source_tile_width;
+               pr->source_tile_height = source->source_tile_height;
+               pr->image_width = source->image_width;
+               pr->image_height = source->image_height;
+
+               pr->func_tile_request = source->func_tile_request;
+               pr->func_tile_dispose = source->func_tile_dispose;
+               pr->func_tile_data = source->func_tile_data;
+
+               pr->source_tiles = source->source_tiles;
+               source->source_tiles = NULL;
+
+               pr_zoom_sync(pr, source->zoom, PR_ZOOM_FORCE | PR_ZOOM_NEW, 0, 0);
+               }
+       else
+               {
+               pixbuf_renderer_set_pixbuf(pr, source->pixbuf, source->zoom);
+               }
+
+       pr->scroll_reset = scroll_reset;
 }
 
 void pixbuf_renderer_area_changed(PixbufRenderer *pr, gint x, gint y, gint w, gint h)
@@ -2621,7 +2649,7 @@ void pixbuf_renderer_stereo_set(PixbufRenderer *pr, gint stereo_mode)
        
        pr_stereo_set(pr);
        
-       if (redraw) 
+       if (redraw)
                {
                pr_size_sync(pr, pr->window_width, pr->window_height); /* recalculate new viewport */
                pr_zoom_sync(pr, pr->zoom, PR_ZOOM_FORCE | PR_ZOOM_NEW, 0, 0);
@@ -2662,7 +2690,7 @@ static void pr_stereo_temp_disable(PixbufRenderer *pr, gboolean disable)
        pr_size_sync(pr, pr->window_width, pr->window_height); /* recalculate new viewport */
 }
 
-gboolean pixbuf_renderer_get_pixel_colors(PixbufRenderer *pr, gint x_pixel, gint y_pixel, 
+gboolean pixbuf_renderer_get_pixel_colors(PixbufRenderer *pr, gint x_pixel, gint y_pixel,
                                           gint *r_mouse, gint *g_mouse, gint *b_mouse)
 {
        GdkPixbuf *pb = pr->pixbuf;
@@ -2818,7 +2846,7 @@ gboolean pixbuf_renderer_get_virtual_rect(PixbufRenderer *pr, GdkRectangle *rect
 void pixbuf_renderer_set_size_early(PixbufRenderer *pr, guint width, guint height)
 {
 #if 0
-       /* FIXME: this function does not consider the image orientation, 
+       /* FIXME: this function does not consider the image orientation,
        so it probably only breaks something */
        gdouble zoom;
        gint w, h;