From 9917561a8c3737b39589f5e0406557cdd6fb20a7 Mon Sep 17 00:00:00 2001 From: terencehill Date: Wed, 8 Jun 2011 20:34:27 +0200 Subject: [PATCH] mousewheel now zooms at the current mouse position --- qcsrc/menu/item/image.c | 10 +++++++--- .../dialog_multiplayer_screenshot_screenshotviewer.c | 10 +++++----- qcsrc/menu/xonotic/screenshotimage.c | 6 ++++++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/qcsrc/menu/item/image.c b/qcsrc/menu/item/image.c index 6253bcb8b..354225a20 100644 --- a/qcsrc/menu/item/image.c +++ b/qcsrc/menu/item/image.c @@ -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) diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c b/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c index eb6079338..a4a4ce7cc 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c @@ -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)) diff --git a/qcsrc/menu/xonotic/screenshotimage.c b/qcsrc/menu/xonotic/screenshotimage.c index 77a9a9fbf..1c8a939e4 100644 --- a/qcsrc/menu/xonotic/screenshotimage.c +++ b/qcsrc/menu/xonotic/screenshotimage.c @@ -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 != "") -- 2.39.2