Addl fix #521: zoom increment is not multiplicative
[geeqie.git] / src / pixbuf-renderer.c
index 3653b41..54a943f 100644 (file)
@@ -1259,40 +1259,68 @@ static void pr_zoom_adjust_real(PixbufRenderer *pr, gdouble increment,
                        }
                }
 
-       if (increment < 0.0)
+       if (options->image.zoom_style == ZOOM_GEOMETRIC)
                {
-               if (zoom >= 1.0)
+               if (increment < 0.0)
                        {
-                       if (zoom / -(increment - 1.0) < 1.0)
+                       if (zoom >= 1.0)
                                {
-                               zoom = 1.0 / (zoom / (increment - 1.0));
+                               if (zoom / -(increment - 1.0) < 1.0)
+                                       {
+                                       zoom = 1.0 / (zoom / (increment - 1.0));
+                                       }
+                               else
+                                       {
+                                       zoom = zoom / -(increment - 1.0) ;
+                                       }
                                }
                        else
                                {
-                               zoom = zoom / -(increment - 1.0) ;
+                               zoom = zoom * -(increment - 1.0);
                                }
                        }
                else
                        {
-                       zoom = zoom * -(increment - 1.0);
+                       if (zoom <= -1.0 )
+                               {
+                               if (zoom / (increment + 1.0) > -1.0)
+                                       {
+                                       zoom = -(1.0 / (zoom / (increment + 1.0)));
+                                       }
+                               else
+                                       {
+                                       zoom = zoom / (increment + 1.0) ;
+                                       }
+                               }
+                       else
+                               {
+                               zoom = zoom * (increment + 1.0);
+                               }
                        }
                }
        else
                {
-               if (zoom <= -1.0 )
+               if (increment < 0.0)
                        {
-                       if (zoom / (increment + 1.0) > -1.0)
+                       if (zoom >= 1.0 && zoom + increment < 1.0)
                                {
-                               zoom = -(1.0 / (zoom / (increment + 1.0)));
+                               zoom = zoom + increment - 2.0;
                                }
                        else
                                {
-                               zoom = zoom / (increment + 1.0) ;
+                               zoom = zoom + increment;
                                }
                        }
                else
                        {
-                       zoom = zoom * (increment + 1.0);
+                       if (zoom <= -1.0 && zoom + increment > -1.0)
+                               {
+                               zoom = zoom + increment + 2.0;
+                               }
+                       else
+                               {
+                               zoom = zoom + increment;
+                               }
                        }
                }