replace imageviewer integer zoom with fp userscale setting

2 days ago

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 30 Mar 2025 10:45:56 +0200 (2 days ago)
changeset 533
951b92ce3708
parent 532
80a6d8923d75
child 534
21f8a7656f6a

replace imageviewer integer zoom with fp userscale setting

ui/gtk/image.c file | annotate | diff | comparison | revisions
ui/gtk/image.h file | annotate | diff | comparison | revisions
--- a/ui/gtk/image.c	Sun Mar 30 10:37:35 2025 +0200
+++ b/ui/gtk/image.c	Sun Mar 30 10:45:56 2025 +0200
@@ -183,13 +183,13 @@
 }
 
 static void imageviewer_reset(UiImageViewer *imgviewer) {
-    imgviewer->zoom = 0;
     imgviewer->isautoscaled = FALSE;
     imgviewer->transx = 0;
     imgviewer->transy;
     imgviewer->begin_transx = 0;
     imgviewer->begin_transy = 0;
     imgviewer->scale = 1;
+    imgviewer->user_scale = 1;
 }
 
 UIWIDGET ui_imageviewer_reset(UIWIDGET w) {
@@ -250,9 +250,12 @@
         } else {
             scale = imgviewer->scale;
         }
+        
+        imgviewer->user_scale = scale;
     } else {
         // user-adjusted scaling
-        scale = 1 + ((double)imgviewer->zoom / (double)imgviewer->zoom_scale);
+        //scale = 1 + ((double)imgviewer->zoom / (double)imgviewer->zoom_scale);
+        scale = imgviewer->user_scale;
     }
 
     dpixwidth *= scale;
@@ -335,10 +338,11 @@
 {
     UiImageViewer *imgviewer = userdata;
     if(imgviewer->useradjustable) {
-        imgviewer->zoom -= dy;
-        if(imgviewer->zoom < -imgviewer->zoom_scale) {
-            imgviewer->zoom = -imgviewer->zoom_scale;
+        double step = dy / imgviewer->zoom_scale;
+        if(imgviewer->user_scale - step > 0) {
+            imgviewer->user_scale -= step;
         }
+        
         imgviewer->scale = 0; // disable autoscale
         gtk_widget_queue_draw(imgviewer->widget);
         return TRUE;
--- a/ui/gtk/image.h	Sun Mar 30 10:37:35 2025 +0200
+++ b/ui/gtk/image.h	Sun Mar 30 10:45:56 2025 +0200
@@ -48,13 +48,13 @@
     UiBool useradjustable;
     GdkPixbuf *pixbuf;
     
-    int zoom_scale;    
+    double zoom_scale;
     int transx;
     int transy;
     int begin_transx;
     int begin_transy;
-    int zoom;
     UiBool isautoscaled;
+    double user_scale;
     double scale;
 } UiImageViewer;
 

mercurial