X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Fdialog_multiplayer_screenshot_screenshotviewer.c;h=eb6079338ae66a13c49f762821dab0388849c09b;hb=0ea5cbc4a4f511e12c976ff0a3a5ccef3c307f4f;hp=d067db741da3b852908b78054d2bef0e63ed0236;hpb=b3483af18c0dac736c6523c3c9b3323b0a94cdcc;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c b/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c index d067db741d..eb6079338a 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_screenshot_screenshotviewer.c @@ -1,17 +1,18 @@ #ifdef INTERFACE -CLASS(XonoticScreenshotViewerDialog) EXTENDS(XonoticRootDialog) +CLASS(XonoticScreenshotViewerDialog) EXTENDS(XonoticDialog) METHOD(XonoticScreenshotViewerDialog, fill, void(entity)) METHOD(XonoticScreenshotViewerDialog, keyDown, float(entity, float, float, float)) METHOD(XonoticScreenshotViewerDialog, loadScreenshot, void(entity, string)) + METHOD(XonoticScreenshotViewerDialog, close, void(entity)) ATTRIB(XonoticScreenshotViewerDialog, title, string, "Screenshot Viewer") + ATTRIB(XonoticScreenshotViewerDialog, name, string, "ScreenshotViewer") ATTRIB(XonoticScreenshotViewerDialog, intendedWidth, float, 1) ATTRIB(XonoticScreenshotViewerDialog, rows, float, 25) - ATTRIB(XonoticScreenshotViewerDialog, columns, float, 6.5) - ATTRIB(XonoticScreenshotViewerDialog, screenshotImage, entity, NULL) + ATTRIB(XonoticScreenshotViewerDialog, columns, float, 4) + ATTRIB(XonoticScreenshotViewerDialog, color, vector, SKINCOLOR_DIALOG_SCREENSHOTVIEWER) ATTRIB(XonoticScreenshotViewerDialog, scrList, entity, NULL) - ATTRIB(XonoticScreenshotViewerDialog, titleLabel, entity, NULL) - - ATTRIB(XonoticScreenshotViewerDialog, currentScrName, string, string_null) + ATTRIB(XonoticScreenshotViewerDialog, screenshotImage, entity, NULL) + ATTRIB(XonoticScreenshotViewerDialog, slideShowButton, entity, NULL) ATTRIB(XonoticScreenshotViewerDialog, currentScrPath, string, string_null) ENDCLASS(XonoticScreenshotViewerDialog) #endif @@ -19,16 +20,12 @@ ENDCLASS(XonoticScreenshotViewerDialog) #ifdef IMPLEMENTATION void XonoticScreenshotViewerDialog_loadScreenshot(entity me, string scrImage) { + if (me.currentScrPath == scrImage) + return; if (me.currentScrPath) strunzone(me.currentScrPath); me.currentScrPath = strzone(scrImage); - me.screenshotImage.configureImage(me.screenshotImage, me.currentScrPath); - me.screenshotImage.updateAspect(me.screenshotImage); - - if (me.currentScrName) - strunzone(me.currentScrName); - me.currentScrName = strzone(substring(scrImage, 13, strlen(scrImage) - 13)); - me.titleLabel.setText(me.titleLabel, me.currentScrName); + me.screenshotImage.configureXonoticScreenshotImage(me.screenshotImage, me.currentScrPath); } void prevScreenshot_Click(entity btn, entity me) { @@ -38,7 +35,31 @@ 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) + { + me.scrList.stopSlideShow(me.scrList); + me.slideShowButton.forcePressed = 0; + } + else + { + me.scrList.startSlideShow(me.scrList); + me.slideShowButton.forcePressed = 1; + } +} float XonoticScreenshotViewerDialog_keyDown(entity me, float key, float ascii, float shift) { switch(key) @@ -51,25 +72,73 @@ float XonoticScreenshotViewerDialog_keyDown(entity me, float key, float ascii, f case K_RIGHTARROW: me.scrList.goScreenshot(me.scrList, +1); return 1; + case K_KP_ENTER: + case K_ENTER: + case K_SPACE: + // we cannot use SPACE/ENTER directly, as in a dialog they are needed + // to press buttons while browsing with only the keyboard + if (shift & S_CTRL) + { + toggleSlideShow_Click(world, me); + return 1; + } + return SUPER(XonoticScreenshotViewerDialog).keyDown(me, key, ascii, shift); default: + if (key == K_MWHEELUP || ascii == '+') + { + me.screenshotImage.setZoom(me.screenshotImage, -2); + return 1; + } + else if (key == K_MWHEELDOWN || ascii == '-') + { + me.screenshotImage.setZoom(me.screenshotImage, -1/2); + return 1; + } + if (me.scrList.keyDown(me.scrList, key, ascii, shift)) + { + // keyDown has already changed the selected item + me.scrList.goScreenshot(me.scrList, 0); + return 1; + } return SUPER(XonoticScreenshotViewerDialog).keyDown(me, key, ascii, shift); } } +void XonoticScreenshotViewerDialog_close(entity me) +{ + me.scrList.stopSlideShow(me.scrList); + me.slideShowButton.forcePressed = 0; + SUPER(XonoticScreenshotViewerDialog).close(me); +} void XonoticScreenshotViewerDialog_fill(entity me) { entity e; - me.TR(me); - me.TD(me, me.rows - 1, me.columns, e = makeXonoticImage(string_null, -1)); - me.screenshotImage = e; - me.TD(me, 1, me.columns, e = makeXonoticTextLabel(0.5, "")); - me.titleLabel = e; + me.TD(me, me.rows - 1, me.columns, e = makeXonoticScreenshotImage()); + me.screenshotImage = e; me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns/2, 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.TD(me, 1, me.columns/2, e = makeXonoticButton("Next", '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; } #endif