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

Stephan Arts stephan at xfce.org
Sun Nov 25 10:02:35 CET 2007


Author: stephan
Date: 2007-11-25 09:02:35 +0000 (Sun, 25 Nov 2007)
New Revision: 3631

Modified:
   ristretto/trunk/src/picture_viewer.c
Log:
First (broken) version of boxed zoom added.



Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-11-24 19:37:28 UTC (rev 3630)
+++ ristretto/trunk/src/picture_viewer.c	2007-11-25 09:02:35 UTC (rev 3631)
@@ -275,7 +275,7 @@
         GdkPixmap *buffer = gdk_pixmap_new(NULL, widget->allocation.width, widget->allocation.height, gdk_drawable_get_depth(widget->window));
         GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(buffer));
 
-        gdk_gc_set_foreground(gc, &color);
+        gdk_gc_set_foreground(gc, &(widget->style->bg[GTK_STATE_NORMAL]));
         gdk_draw_rectangle(GDK_DRAWABLE(buffer), gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
         if(pixbuf)
         {
@@ -910,6 +910,91 @@
             case RSTTO_PICTURE_VIEWER_STATE_MOVE:
                 break;
             case RSTTO_PICTURE_VIEWER_STATE_BOX_ZOOM:
+                if(GTK_WIDGET_REALIZED(widget))
+                {
+                    RsttoNavigatorEntry *entry = rstto_navigator_get_file(viewer->priv->navigator);
+                    gdouble scale = rstto_navigator_entry_get_scale(entry);
+                    gdouble old_scale = scale;
+                    gdouble width = (gdouble)gdk_pixbuf_get_width(viewer->priv->src_pixbuf);
+                    gdouble height = (gdouble)gdk_pixbuf_get_height(viewer->priv->src_pixbuf);
+                    gdouble box_width, box_height;
+                    gdouble top_left_x, top_left_y;
+                    if (viewer->priv->motion.x < viewer->priv->motion.current_x)
+                    {
+                        top_left_x = viewer->priv->motion.x;
+                        box_width = viewer->priv->motion.current_x - viewer->priv->motion.x;
+                    }
+                    else
+                    {
+                        top_left_x = viewer->priv->motion.current_x;
+                        box_width = viewer->priv->motion.x - viewer->priv->motion.current_x;
+                    }
+                    if (viewer->priv->motion.y < viewer->priv->motion.current_y)
+                    {
+                        top_left_y = viewer->priv->motion.y;
+                        box_height = viewer->priv->motion.current_y - viewer->priv->motion.y;
+                    }
+                    else
+                    {
+                        top_left_y = viewer->priv->motion.current_y;
+                        box_height = viewer->priv->motion.y - viewer->priv->motion.current_y;
+                    }
+
+                    gdouble h_scale = width / box_width * scale;
+                    gdouble v_scale = width / box_width * scale;
+
+                    if (h_scale < v_scale)
+                    {
+                        rstto_navigator_entry_set_scale(entry, h_scale);
+                    }
+                    else
+                    {
+                        rstto_navigator_entry_set_scale(entry, v_scale);
+                    }
+                    rstto_navigator_entry_set_fit_to_screen(entry, FALSE);
+                    scale = rstto_navigator_entry_get_scale(entry);
+
+
+                        
+                    if(viewer->hadjustment)
+                    {
+                        viewer->hadjustment->page_size = box_width / old_scale * scale;
+                        viewer->hadjustment->upper = width * scale;
+                        viewer->hadjustment->lower = 0;
+                        viewer->hadjustment->step_increment = 1;
+                        viewer->hadjustment->page_increment = 100;
+                        viewer->hadjustment->value = (viewer->hadjustment->value + top_left_x) / old_scale * scale;
+                        if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+                        {
+                            viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
+                        }
+                        if(viewer->hadjustment->value < viewer->hadjustment->lower)
+                        {
+                            viewer->hadjustment->value = viewer->hadjustment->lower;
+                        }
+                        gtk_adjustment_changed(viewer->hadjustment);
+                        gtk_adjustment_value_changed(viewer->hadjustment);
+                    }
+                    if(viewer->vadjustment)
+                    {
+                        viewer->vadjustment->page_size = box_height /old_scale* scale;
+                        viewer->vadjustment->upper = height * scale;
+                        viewer->vadjustment->lower = 0;
+                        viewer->vadjustment->step_increment = 1;
+                        viewer->vadjustment->page_increment = 100;
+                        viewer->vadjustment->value = (viewer->vadjustment->value + top_left_x) / old_scale * scale;
+                        if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+                        {
+                            viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+                        }
+                        if(viewer->vadjustment->value < viewer->vadjustment->lower)
+                        {
+                            viewer->vadjustment->value = viewer->vadjustment->lower;
+                        }
+                        gtk_adjustment_changed(viewer->vadjustment);
+                        gtk_adjustment_value_changed(viewer->vadjustment);
+                    }
+                }
                 viewer->priv->motion.state = RSTTO_PICTURE_VIEWER_STATE_NONE;
 
                 if (viewer->priv->refresh.idle_id > 0)




More information about the Goodies-commits mailing list