]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
mousewheel now zooms at the current mouse position
authorterencehill <piuntn@gmail.com>
Wed, 8 Jun 2011 18:34:27 +0000 (20:34 +0200)
committerterencehill <piuntn@gmail.com>
Wed, 8 Jun 2011 18:34:27 +0000 (20:34 +0200)
qcsrc/menu/item/image.c
qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c
qcsrc/menu/xonotic/screenshotimage.c

index 6253bcb8b6a8ee2ba6fd5b21b14ea2d165d7fae9..354225a2001f28a3373a1106674eea3a6e4b32c4 100644 (file)
@@ -5,7 +5,7 @@ CLASS(Image) EXTENDS(Item)
        METHOD(Image, toString, string(entity))
        METHOD(Image, resizeNotify, void(entity, vector, vector, vector, vector))
        METHOD(Image, updateAspect, void(entity))
-       METHOD(Image, setZoom, void(entity, float))
+       METHOD(Image, setZoom, void(entity, float, float))
        METHOD(Image, startZoomMove, float(entity, vector))
        METHOD(Image, zoomMove, float(entity, vector))
        ATTRIB(Image, src, string, string_null)
@@ -84,7 +84,7 @@ void Image_updateAspect(entity me)
 }
 float Image_startZoomMove(entity me, vector coords)
 {
-       if (me.zoomFactor > 1)
+       //if (me.zoomFactor > 1) //mousewheel zoom may start from a non-zoomed-in image
        {
                me.start_zoomOffset = me.zoomOffset;
                me.start_coords = coords;
@@ -100,8 +100,10 @@ float Image_zoomMove(entity me, vector coords)
        }
        return 1;
 }
-void Image_setZoom(entity me, float z)
+void Image_setZoom(entity me, float z, float atMousePosition)
 {
+       float prev_zoomFactor;
+       prev_zoomFactor = me.zoomFactor;
        if (z < 0) // multiply by the current zoomFactor
                me.zoomFactor *= -z;
        else if (z == 0) // reset (no zoom)
@@ -111,6 +113,8 @@ void Image_setZoom(entity me, float z)
        me.zoomFactor = bound(1/16, me.zoomFactor, 16);
        if (me.zoomFactor <= 1)
                me.zoomOffset = '0.5 0.5 0';
+       else if (atMousePosition && prev_zoomFactor != me.zoomFactor)
+               me.zoomOffset = me.start_zoomOffset + (me.start_coords - '0.5 0.5 0') * (1/prev_zoomFactor);
        me.updateAspect(me);
 }
 void Image_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
index eb6079338ae66a13c49f762821dab0388849c09b..a4a4ce7cc0a7ecced7303e8f2784f162a8a32dab 100644 (file)
@@ -37,15 +37,15 @@ void nextScreenshot_Click(entity btn, entity me)
 }
 void increaseZoom_Click(entity btn, entity me)
 {
-       me.screenshotImage.setZoom(me.screenshotImage, -2);
+       me.screenshotImage.setZoom(me.screenshotImage, -2, FALSE);
 }
 void decreaseZoom_Click(entity btn, entity me)
 {
-       me.screenshotImage.setZoom(me.screenshotImage, -1/2);
+       me.screenshotImage.setZoom(me.screenshotImage, -1/2, FALSE);
 }
 void resetZoom_Click(entity btn, entity me)
 {
-       me.screenshotImage.setZoom(me.screenshotImage, 0);
+       me.screenshotImage.setZoom(me.screenshotImage, 0, FALSE);
 }
 void toggleSlideShow_Click(entity btn, entity me)
 {
@@ -86,12 +86,12 @@ float XonoticScreenshotViewerDialog_keyDown(entity me, float key, float ascii, f
                default:
                        if (key == K_MWHEELUP || ascii == '+')
                        {
-                               me.screenshotImage.setZoom(me.screenshotImage, -2);
+                               me.screenshotImage.setZoom(me.screenshotImage, -2, (key == K_MWHEELUP));
                                return 1;
                        }
                        else if (key == K_MWHEELDOWN || ascii == '-')
                        {
-                               me.screenshotImage.setZoom(me.screenshotImage, -1/2);
+                               me.screenshotImage.setZoom(me.screenshotImage, -1/2, (key == K_MWHEELDOWN));
                                return 1;
                        }
                        if (me.scrList.keyDown(me.scrList, key, ascii, shift))
index 77a9a9fbfc805f3551920845805bdda7f47b0088..1c8a939e43cb6f9d71598fec9cbadb023b8ba13b 100644 (file)
@@ -5,6 +5,7 @@ CLASS(XonoticScreenshotImage) EXTENDS(Image)
        ATTRIB(XonoticScreenshotImage, focusable, float, 1) // mousePress and mouseDrag work only if focusable is set
        METHOD(XonoticScreenshotImage, mousePress, float(entity, vector))
        METHOD(XonoticScreenshotImage, mouseDrag, float(entity, vector))
+       METHOD(XonoticScreenshotImage, mouseMove, float(entity, vector))
        METHOD(XonoticScreenshotImage, resizeNotify, void(entity, vector, vector, vector, vector))
        ATTRIB(XonoticScreenshotImage, realFontSize, vector, '0 0 0')
        ATTRIB(XonoticScreenshotImage, fontSize, float, SKINFONTSIZE_NORMAL)
@@ -45,6 +46,11 @@ float XonoticScreenshotImage_mouseDrag(entity me, vector coords)
        return me.zoomMove(me, coords);
 }
 
+float XonoticScreenshotImage_mouseMove(entity me, vector coords)
+{
+       return me.startZoomMove(me, coords);
+}
+
 void XonoticScreenshotImage_draw(entity me)
 {
        if (me.src != "")