From: terencehill Date: Fri, 20 May 2011 18:09:52 +0000 (+0200) Subject: Implement zooming X-Git-Tag: xonotic-v0.8.0~139^2~1^2~155^2~43 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ce272d430c0e410352b962f84f296ffa55d05fb0;p=xonotic%2Fxonotic-data.pk3dir.git Implement zooming --- diff --git a/qcsrc/menu/item/image.c b/qcsrc/menu/item/image.c index c64561b39..1ae925538 100644 --- a/qcsrc/menu/item/image.c +++ b/qcsrc/menu/item/image.c @@ -5,9 +5,11 @@ 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)) ATTRIB(Image, src, string, string_null) ATTRIB(Image, color, vector, '1 1 1') ATTRIB(Image, forcedAspect, float, 0) + ATTRIB(Image, zoomFactor, float, 1) ATTRIB(Image, imgOrigin, vector, '0 0 0') ATTRIB(Image, imgSize, vector, '0 0 0') ENDCLASS(Image) @@ -21,10 +23,15 @@ string Image_toString(entity me) void Image_configureImage(entity me, string path) { me.src = path; + me.zoomFactor = 1; } void Image_draw(entity me) { + if (me.zoomFactor > 1) + draw_SetClip(); draw_Picture(me.imgOrigin, me.src, me.imgSize, me.color, 1); + if (me.zoomFactor > 1) + draw_ClearClip(); } void Image_updateAspect(entity me) { @@ -56,9 +63,22 @@ void Image_updateAspect(entity me) // y too large, so center y-wise me.imgSize = eX + eY * (me.size_x / (asp * me.size_y)); } + if (me.zoomFactor) + me.imgSize = me.imgSize * me.zoomFactor; me.imgOrigin = '0.5 0.5 0' - 0.5 * me.imgSize; } } +void Image_setZoom(entity me, float z) +{ + if (z < 0) + me.zoomFactor = -z; + else if (z == 0) + me.zoomFactor = 1; + else + me.zoomFactor *= z; + me.zoomFactor = bound(1/16, me.zoomFactor, 16); + me.updateAspect(me); +} void Image_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) { SUPER(Image).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c b/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c index 50efafc51..99e8752b7 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c @@ -35,6 +35,18 @@ void nextScreenshot_Click(entity btn, entity me) { me.scrList.goScreenshot(me.scrList, +1); } +void increaseZoom_Click(entity btn, entity me) +{ + me.screenshotImage.setZoom(me.screenshotImage, 2); +} +void decreaseZoom_Click(entity btn, entity me) +{ + me.screenshotImage.setZoom(me.screenshotImage, 1/2); +} +void resetZoom_Click(entity btn, entity me) +{ + me.screenshotImage.setZoom(me.screenshotImage, 0); +} void toggleSlideShow_Click(entity btn, entity me) { if (me.slideShowButton.forcePressed) @@ -99,18 +111,29 @@ void XonoticScreenshotViewerDialog_fill(entity me) me.TD(me, me.rows - 1, me.columns, e = makeXonoticScreenshotImage()); me.screenshotImage = e; me.gotoRC(me, me.rows - 1, 0); - me.TDempty(me, 1/4); - me.TD(me, 1, 1, e = makeXonoticButton("Previous", '0 0 0')); + me.TDempty(me, 1/20 * me.columns); + me.TD(me, 1, 1/20 * me.columns, e = makeXonoticButton("-", '0 0 0')); + e.onClick = decreaseZoom_Click; + e.onClickEntity = me; + me.TD(me, 1, 1/20 * me.columns, e = makeXonoticButton("+", '0 0 0')); + e.onClick = increaseZoom_Click; + e.onClickEntity = me; + me.TD(me, 1, 2/20 * me.columns, e = makeXonoticButton("reset", '0 0 0')); + e.onClick = resetZoom_Click; + e.onClickEntity = me; + + me.TDempty(me, 2/20 * me.columns); + me.TD(me, 1, 3/20 * me.columns, e = makeXonoticButton("Previous", '0 0 0')); e.onClick = prevScreenshot_Click; e.onClickEntity = me; - me.TDempty(me, 1/4); - me.TD(me, 1, 1, e = makeXonoticButton("Slide show", '0 0 0')); + me.TD(me, 1, 3/20 * me.columns, e = makeXonoticButton("Next", '0 0 0')); + e.onClick = nextScreenshot_Click; + e.onClickEntity = me; + + me.TDempty(me, 2/20 * me.columns); + me.TD(me, 1, 4/20 * me.columns, e = makeXonoticButton("Slide show", '0 0 0')); e.onClick = toggleSlideShow_Click; e.onClickEntity = me; me.slideShowButton = e; - me.TDempty(me, 1/4); - me.TD(me, 1, 1, e = makeXonoticButton("Next", '0 0 0')); - e.onClick = nextScreenshot_Click; - e.onClickEntity = me; } #endif