From b145fae00fe4c21c2dd476168dc633375169670c Mon Sep 17 00:00:00 2001 From: Lotto Date: Fri, 2 Nov 2018 16:51:19 +0100 Subject: [PATCH] stretchedmode: reduce wait time after changing scaling percentage It now sets the max width and height right before the canvas is resized, so the canvas size uses those max bounds immediately, instead of setting it 500ms after the canvas is resized initially. --- .../stretchedmode/StretchedModePlugin.java | 7 ---- .../mixins/StretchedModeMaxSizeMixin.java | 34 ++++++++++++++----- .../runelite/mixins/StretchedModeMixin.java | 12 +------ .../net/runelite/rs/api/RSGameEngine.java | 6 ++++ 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java index aa5044015c..42cfbed78b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java @@ -29,7 +29,6 @@ import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import javax.inject.Inject; import net.runelite.api.Client; -import net.runelite.api.events.CanvasSizeChanged; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.ResizeableChanged; import net.runelite.client.config.ConfigManager; @@ -92,12 +91,6 @@ public class StretchedModePlugin extends Plugin client.invalidateStretching(true); } - @Subscribe - public void onCanvasSizeChanged(CanvasSizeChanged event) - { - client.invalidateStretching(false); - } - @Subscribe public void onConfigChanged(ConfigChanged event) { diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMaxSizeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMaxSizeMixin.java index 35a6b67b24..aa52b4e5e5 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMaxSizeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMaxSizeMixin.java @@ -38,21 +38,39 @@ public abstract class StretchedModeMaxSizeMixin implements RSGameEngine @Shadow("clientInstance") private static RSClient client; + @Copy("resizeCanvas") + abstract void rs$resizeCanvas(); + + @Replace("resizeCanvas") + public void rl$resizeCanvas() + { + if (client.isStretchedEnabled()) + { + client.invalidateStretching(false); + + if (client.isResized()) + { + Dimension realDimensions = client.getRealDimensions(); + + setMaxCanvasWidth(realDimensions.width); + setMaxCanvasHeight(realDimensions.height); + } + } + + rs$resizeCanvas(); + } + @Copy("setMaxCanvasSize") abstract void rs$setMaxCanvasSize(int width, int height); @Replace("setMaxCanvasSize") - public void setMaxCanvasSize(int width, int height) + public void rl$setMaxCanvasSize(int width, int height) { if (client.isStretchedEnabled() && client.isResized()) { - Dimension realDimensions = client.getRealDimensions(); + return; + } - rs$setMaxCanvasSize(realDimensions.width, realDimensions.height); - } - else - { - rs$setMaxCanvasSize(width, height); - } + rs$setMaxCanvasSize(width, height); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMixin.java index 6e24a8f701..1dbfe97f00 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMixin.java @@ -197,24 +197,14 @@ public abstract class StretchedModeMixin implements RSClient @Override public void invalidateStretching(boolean resize) { - cachedStretchedDimensions = null; cachedRealDimensions = null; + cachedStretchedDimensions = null; if (resize && isResized()) { /* Tells the game to run resizeCanvas the next frame. - resizeCanvas in turn calls the method that - determines the maximum size of the canvas, - AFTER setting the size of the canvas. - - The frame after that, the game sees that - the maximum size of the canvas isn't - the current size, so it runs resizeCanvas again. - This time it uses our new maximum size - as the bounds for the canvas size. - This is useful when resizeCanvas wouldn't usually run, for example when we've only changed the scaling factor and we still want the game's canvas to resize diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java b/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java index 7dafb17a77..87bc24ca15 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java @@ -51,4 +51,10 @@ public interface RSGameEngine extends GameEngine @Import("replaceCanvasNextFrame") void setReplaceCanvasNextFrame(boolean replace); + + @Import("maxCanvasWidth") + void setMaxCanvasWidth(int width); + + @Import("maxCanvasHeight") + void setMaxCanvasHeight(int height); }