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); }