From d2871d925c975e176e90b5296517a5d95af5e945 Mon Sep 17 00:00:00 2001 From: BeefaloKing Date: Fri, 25 May 2018 00:21:37 -0600 Subject: [PATCH] Stretched Fixed Mode Plugin: Add Integer Scaling option (#2863) Forces integer scale factor by rounding stretched dimensions towards zero. --- .../main/java/net/runelite/api/Client.java | 2 ++ .../StretchedFixedModeConfig.java | 10 ++++++++ .../StretchedFixedModePlugin.java | 1 + .../mixins/StretchedFixedModeMixin.java | 23 +++++++++++++++++++ 4 files changed, 36 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 3dd46af5a8..e428c8e2fd 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -329,6 +329,8 @@ public interface Client extends GameEngine void setStretchedFast(boolean state); + void setStretchedIntegerScaling(boolean state); + void setStretchedKeepAspectRatio(boolean state); Dimension getStretchedDimensions(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModeConfig.java index d263140651..00cd9d48b2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModeConfig.java @@ -55,4 +55,14 @@ public interface StretchedFixedModeConfig extends Config { return false; } + + @ConfigItem( + keyName = "integerScaling", + name = "Integer Scaling", + description = "Forces use of a whole number scale factor" + ) + default boolean integerScaling() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModePlugin.java index f84f36690f..f06b9957f2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModePlugin.java @@ -94,6 +94,7 @@ public class StretchedFixedModePlugin extends Plugin private void updateConfig() { + client.setStretchedIntegerScaling(config.integerScaling()); client.setStretchedKeepAspectRatio(config.keepAspectRatio()); client.setStretchedFast(config.increasedPerformance()); } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedFixedModeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedFixedModeMixin.java index 9729ef676d..8fe47f5a42 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedFixedModeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedFixedModeMixin.java @@ -40,6 +40,9 @@ public abstract class StretchedFixedModeMixin implements RSClient @Inject private static boolean stretchedFast; + @Inject + private static boolean stretchedIntegerScaling; + @Inject private static boolean stretchedKeepAspectRatio; @@ -77,6 +80,14 @@ public abstract class StretchedFixedModeMixin implements RSClient stretchedFast = state; } + @Inject + @Override + public void setStretchedIntegerScaling(boolean state) + { + stretchedIntegerScaling = state; + cachedStretchedDimensions = null; + } + @Inject @Override public void setStretchedKeepAspectRatio(boolean state) @@ -122,6 +133,18 @@ public abstract class StretchedFixedModeMixin implements RSClient } } + if (stretchedIntegerScaling) + { + if (width > Constants.GAME_FIXED_WIDTH) + { + width = width - (width % Constants.GAME_FIXED_WIDTH); + } + if (height > Constants.GAME_FIXED_HEIGHT) + { + height = height - (height % Constants.GAME_FIXED_HEIGHT); + } + } + cachedStretchedDimensions = new Dimension(width, height); lastCanvasDimensions = new Dimension(width, height); }