[Goodies-commits] r2958 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Tue Aug 7 10:02:14 CEST 2007


Author: stephan
Date: 2007-08-07 08:02:14 +0000 (Tue, 07 Aug 2007)
New Revision: 2958

Modified:
   ristretto/trunk/src/thumbnail_viewer.c
Log:
Add thumbnailer scrolling

Modified: ristretto/trunk/src/thumbnail_viewer.c
===================================================================
--- ristretto/trunk/src/thumbnail_viewer.c	2007-08-07 00:42:24 UTC (rev 2957)
+++ ristretto/trunk/src/thumbnail_viewer.c	2007-08-07 08:02:14 UTC (rev 2958)
@@ -32,6 +32,7 @@
 {
     GtkOrientation  orientation;
     RsttoNavigator *navigator;
+    gint offset;
 };
 
 static void
@@ -244,13 +245,14 @@
 
         pango_layout_set_text(pl, info->display_name, strlen(info->display_name));
 
+
         if(viewer->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
         {
 	        gdk_gc_set_foreground(gc, &color);
             gdk_draw_rectangle(GDK_DRAWABLE(widget->window),
                   gc,
                   TRUE,
-                  (i*74), 0, 74, 74);
+                  20+(i*74)-viewer->priv->offset, 0, 74, 74);
 
             
             if(current_entry == entry)
@@ -259,14 +261,14 @@
                              GTK_STATE_SELECTED,
                              GTK_SHADOW_NONE,
                              NULL,NULL,NULL,
-                             (i*74)+4, 4, 66, 50);
+                             20+(i*74)+4-viewer->priv->offset, 4, 66, 50);
             else
                 gtk_paint_box(widget->style,
                              widget->window,
                              GTK_STATE_NORMAL,
                              GTK_SHADOW_NONE,
                              NULL,NULL,NULL,
-                             (i*74)+4, 4, 66, 50);
+                             20+(i*74)+4-viewer->priv->offset, 4, 66, 50);
             /*
             gdk_draw_rectangle(GDK_DRAWABLE(widget->window),
                   gc_1,
@@ -279,7 +281,7 @@
                             gc,
                             pixbuf,
                             0, 0,
-                            i * 74 + 5 + (0.5 * (64 - gdk_pixbuf_get_width(pixbuf))),
+                            20 + i * 74 + 5 + (0.5 * (64 - gdk_pixbuf_get_width(pixbuf))) - viewer->priv->offset,
                             5 + (0.5 *(48 - gdk_pixbuf_get_height(pixbuf))),
                             -1, -1,
                             GDK_RGB_DITHER_NORMAL,
@@ -287,11 +289,41 @@
 
             gdk_draw_layout(GDK_DRAWABLE(widget->window),
                   gc_1,
-                  (i*74)+5, 56,
+                  20+(i*74)+5-viewer->priv->offset, 56,
                   pl);
 
         }
-        gdk_window_clear_area(widget->window, 74 * (i+1), 0, widget->allocation.width, 74);
+
+        gtk_paint_box(widget->style,
+                        widget->window,
+                        GTK_STATE_NORMAL,
+                        GTK_SHADOW_NONE,
+                        NULL,NULL,NULL,
+                        0, 0, 20, 74);
+        gtk_paint_arrow(widget->style,
+                        widget->window,
+                        viewer->priv->offset == 0?GTK_STATE_INSENSITIVE:GTK_STATE_NORMAL,
+                        GTK_SHADOW_NONE,
+                        NULL,NULL,NULL,
+                        GTK_ARROW_LEFT,
+                        TRUE,
+                        4,20,15,15);
+
+        gtk_paint_box(widget->style,
+                        widget->window,
+                        GTK_STATE_NORMAL,
+                        GTK_SHADOW_NONE,
+                        NULL,NULL,NULL,
+                        widget->allocation.width - 20, 0, 20, 74);
+        gtk_paint_arrow(widget->style,
+                        widget->window,
+                        GTK_STATE_NORMAL,
+                        GTK_SHADOW_NONE,
+                        NULL,NULL,NULL,
+                        GTK_ARROW_RIGHT,
+                        TRUE,
+                        widget->allocation.width - 19, 20,15,15);
+        gdk_window_clear_area(widget->window, 20 + 74 * (i+1), 0, widget->allocation.width, 74);
     }
 
 }
@@ -330,20 +362,55 @@
 cb_rstto_thumbnailer_button_press_event (RsttoThumbnailViewer *viewer,
                                          GdkEventButton *event)
 {
+    GtkWidget *widget = GTK_WIDGET(viewer);
+    gint n = 0;
+    gint old_offset = viewer->priv->offset;
     switch(viewer->priv->orientation)
     {
         case GTK_ORIENTATION_HORIZONTAL:
             if(event->button == 1)
             {
-                rstto_navigator_set_file(viewer->priv->navigator, event->x / 74);
+                if ((event->x < 20) || ((widget->allocation.width - event->x) < 20))
+                    n = -1;
+                else
+                    n = (event->x - 20 + viewer->priv->offset) / 74;
             }
             break;
         case GTK_ORIENTATION_VERTICAL:
             if(event->button == 1)
             {
-                rstto_navigator_set_file(viewer->priv->navigator, event->y / 74);
+                if(event->y < 20)
+                    n = -1;
+                else
+                    n = (event->y - 20) / 74;
+
             }
             break;
 
     }
+    if (n < 0)
+    {
+        if (event->x < 20)
+        {
+            viewer->priv->offset -= 37;
+            if(viewer->priv->offset < 0)
+            {
+                viewer->priv->offset = 0;
+            }
+        }
+        else
+        {
+            viewer->priv->offset += 37;
+            if((rstto_navigator_get_n_files(viewer->priv->navigator) * 74 - viewer->priv->offset) < 74)
+            {
+                viewer->priv->offset = (rstto_navigator_get_n_files(viewer->priv->navigator) - 1) * 74;
+            }
+        }
+        if(old_offset != viewer->priv->offset)
+            rstto_thumbnail_viewer_paint(viewer);
+    }
+    else
+    {
+        rstto_navigator_set_file(viewer->priv->navigator, n);
+    }
 }




More information about the Goodies-commits mailing list