Code

speedify zooming by keys
authorbuliabyak <buliabyak@users.sourceforge.net>
Tue, 18 Dec 2007 17:57:55 +0000 (17:57 +0000)
committerbuliabyak <buliabyak@users.sourceforge.net>
Tue, 18 Dec 2007 17:57:55 +0000 (17:57 +0000)
src/verbs.cpp

index 770550dfdb588e4b0ca4d130199bff80e04f1ec0..f5ff45a0b519d68a43bd7ecac1bfa65667457a4a 100644 (file)
@@ -1532,34 +1532,38 @@ ZoomVerb::perform(SPAction *action, void *data, void */*pdata*/)
     switch (GPOINTER_TO_INT(data)) {
         case SP_VERB_ZOOM_IN:
         {
+            gint mul = 1 + gobble_key_events(
+                 GDK_KP_Add, 0); // with any mask
             // While drawing with the pen/pencil tool, zoom towards the end of the unfinished path
             if (tools_isactive(dt, TOOLS_FREEHAND_PENCIL) || tools_isactive(dt, TOOLS_FREEHAND_PEN)) {
                 SPCurve *rc = SP_DRAW_CONTEXT(ec)->red_curve;
                 if (sp_curve_last_bpath(rc)) {
                     NR::Point const zoom_to (sp_curve_last_point(rc));
-                    dt->zoom_relative_keep_point(zoom_to, zoom_inc);
+                    dt->zoom_relative_keep_point(zoom_to, mul*zoom_inc);
                     break;
                 }
             }
 
             NR::Rect const d = dt->get_display_area();
-            dt->zoom_relative( d.midpoint()[NR::X], d.midpoint()[NR::Y], zoom_inc);
+            dt->zoom_relative( d.midpoint()[NR::X], d.midpoint()[NR::Y], mul*zoom_inc);
             break;
         }
         case SP_VERB_ZOOM_OUT:
         {
+            gint mul = 1 + gobble_key_events(
+                 GDK_KP_Subtract, 0); // with any mask
             // While drawing with the pen/pencil tool, zoom away from the end of the unfinished path
             if (tools_isactive(dt, TOOLS_FREEHAND_PENCIL) || tools_isactive(dt, TOOLS_FREEHAND_PEN)) {
                 SPCurve *rc = SP_DRAW_CONTEXT(ec)->red_curve;
                 if (sp_curve_last_bpath(rc)) {
                     NR::Point const zoom_to (sp_curve_last_point(rc));
-                    dt->zoom_relative_keep_point(zoom_to, 1 / zoom_inc);
+                    dt->zoom_relative_keep_point(zoom_to, 1 / (mul*zoom_inc));
                     break;
                 }
             }
 
             NR::Rect const d = dt->get_display_area();
-            dt->zoom_relative( d.midpoint()[NR::X], d.midpoint()[NR::Y], 1 / zoom_inc );
+            dt->zoom_relative( d.midpoint()[NR::X], d.midpoint()[NR::Y], 1 / (mul*zoom_inc) );
             break;
         }
         case SP_VERB_ZOOM_1_1: