Merge pull request #615 from devLotto/stretched-fixed-mode
Stretched fixed mode
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
package net.runelite.api;
|
package net.runelite.api;
|
||||||
|
|
||||||
import java.awt.Canvas;
|
import java.awt.Canvas;
|
||||||
|
import java.awt.Dimension;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
@@ -295,4 +296,16 @@ public interface Client extends GameEngine
|
|||||||
void setCameraPitchRelaxerEnabled(boolean enabled);
|
void setCameraPitchRelaxerEnabled(boolean enabled);
|
||||||
|
|
||||||
RenderOverview getRenderOverview();
|
RenderOverview getRenderOverview();
|
||||||
|
|
||||||
|
boolean isStretchedEnabled();
|
||||||
|
|
||||||
|
void setStretchedEnabled(boolean state);
|
||||||
|
|
||||||
|
boolean isStretchedFast();
|
||||||
|
|
||||||
|
void setStretchedFast(boolean state);
|
||||||
|
|
||||||
|
void setStretchedKeepAspectRatio(boolean state);
|
||||||
|
|
||||||
|
Dimension getStretchedDimensions();
|
||||||
}
|
}
|
||||||
|
|||||||
36
runelite-api/src/main/java/net/runelite/api/Constants.java
Normal file
36
runelite-api/src/main/java/net/runelite/api/Constants.java
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.api;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
|
|
||||||
|
public class Constants
|
||||||
|
{
|
||||||
|
public static final int GAME_FIXED_WIDTH = 765;
|
||||||
|
public static final int GAME_FIXED_HEIGHT = 503;
|
||||||
|
public static final Dimension GAME_FIXED_SIZE = new Dimension(GAME_FIXED_WIDTH, GAME_FIXED_HEIGHT);
|
||||||
|
public static final double GAME_FIXED_ASPECT_RATIO = (double) GAME_FIXED_WIDTH / (double) GAME_FIXED_HEIGHT;
|
||||||
|
}
|
||||||
@@ -26,8 +26,10 @@ package net.runelite.client.callback;
|
|||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.RenderingHints;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.MouseWheelEvent;
|
import java.awt.event.MouseWheelEvent;
|
||||||
@@ -83,6 +85,10 @@ public class Hooks
|
|||||||
private static final DeathChecker death = new DeathChecker(client, eventBus);
|
private static final DeathChecker death = new DeathChecker(client, eventBus);
|
||||||
private static final GameTick tick = new GameTick();
|
private static final GameTick tick = new GameTick();
|
||||||
|
|
||||||
|
private static Dimension lastStretchedDimensions;
|
||||||
|
private static BufferedImage stretchedImage;
|
||||||
|
private static Graphics2D stretchedGraphics;
|
||||||
|
|
||||||
private static long lastCheck;
|
private static long lastCheck;
|
||||||
|
|
||||||
public static void clientMainLoop(Client client, boolean arg1)
|
public static void clientMainLoop(Client client, boolean arg1)
|
||||||
@@ -182,9 +188,9 @@ public class Hooks
|
|||||||
return mouseManager.processMouseMoved(mouseEvent);
|
return mouseManager.processMouseMoved(mouseEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void mouseWheelMoved(MouseWheelEvent event)
|
public static MouseWheelEvent mouseWheelMoved(MouseWheelEvent event)
|
||||||
{
|
{
|
||||||
mouseManager.processMouseWheelMoved(event);
|
return mouseManager.processMouseWheelMoved(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void keyPressed(KeyEvent keyEvent)
|
public static void keyPressed(KeyEvent keyEvent)
|
||||||
@@ -204,7 +210,12 @@ public class Hooks
|
|||||||
|
|
||||||
public static void draw(MainBufferProvider mainBufferProvider, Graphics graphics, int x, int y)
|
public static void draw(MainBufferProvider mainBufferProvider, Graphics graphics, int x, int y)
|
||||||
{
|
{
|
||||||
final BufferedImage image = (BufferedImage) mainBufferProvider.getImage();
|
if (graphics == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferedImage image = (BufferedImage) mainBufferProvider.getImage();
|
||||||
final Graphics2D graphics2d = (Graphics2D) image.getGraphics();
|
final Graphics2D graphics2d = (Graphics2D) image.getGraphics();
|
||||||
|
|
||||||
try
|
try
|
||||||
@@ -216,6 +227,39 @@ public class Hooks
|
|||||||
log.warn("Error during overlay rendering", ex);
|
log.warn("Error during overlay rendering", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Stretch the game image if the user has that enabled
|
||||||
|
if (!client.isResized() && client.isStretchedEnabled())
|
||||||
|
{
|
||||||
|
Dimension stretchedDimensions = client.getStretchedDimensions();
|
||||||
|
|
||||||
|
if (lastStretchedDimensions == null || !lastStretchedDimensions.equals(stretchedDimensions))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Reuse the resulting image instance to avoid creating an extreme amount of objects
|
||||||
|
*/
|
||||||
|
stretchedImage = new BufferedImage(stretchedDimensions.width, stretchedDimensions.height, BufferedImage.TYPE_INT_RGB);
|
||||||
|
|
||||||
|
if (stretchedGraphics != null)
|
||||||
|
{
|
||||||
|
stretchedGraphics.dispose();
|
||||||
|
}
|
||||||
|
stretchedGraphics = (Graphics2D) stretchedImage.getGraphics();
|
||||||
|
|
||||||
|
lastStretchedDimensions = stretchedDimensions;
|
||||||
|
}
|
||||||
|
|
||||||
|
stretchedGraphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
|
||||||
|
client.isStretchedFast()
|
||||||
|
? RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR
|
||||||
|
: RenderingHints.VALUE_INTERPOLATION_BILINEAR);
|
||||||
|
stretchedGraphics.drawImage(image, 0, 0, stretchedDimensions.width, stretchedDimensions.height, null);
|
||||||
|
|
||||||
|
image = stretchedImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw the image onto the game canvas
|
||||||
|
graphics.drawImage(image, 0, 0, client.getCanvas());
|
||||||
|
|
||||||
renderer.provideScreenshot(image);
|
renderer.provideScreenshot(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
package net.runelite.client.config;
|
package net.runelite.client.config;
|
||||||
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
|
import net.runelite.api.Constants;
|
||||||
|
|
||||||
@ConfigGroup(
|
@ConfigGroup(
|
||||||
keyName = "runelite",
|
keyName = "runelite",
|
||||||
@@ -40,7 +41,7 @@ public interface RuneLiteConfig extends Config
|
|||||||
)
|
)
|
||||||
default Dimension gameSize()
|
default Dimension gameSize()
|
||||||
{
|
{
|
||||||
return new Dimension(765, 503);
|
return Constants.GAME_FIXED_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
|
|||||||
@@ -44,6 +44,11 @@ public class MouseManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerMouseListener(int position, MouseListener mouseListener)
|
||||||
|
{
|
||||||
|
mouseListeners.add(position, mouseListener);
|
||||||
|
}
|
||||||
|
|
||||||
public void unregisterMouseListener(MouseListener mouseListener)
|
public void unregisterMouseListener(MouseListener mouseListener)
|
||||||
{
|
{
|
||||||
mouseListeners.remove(mouseListener);
|
mouseListeners.remove(mouseListener);
|
||||||
@@ -57,6 +62,11 @@ public class MouseManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerMouseWheelListener(int position, MouseWheelListener mouseWheelListener)
|
||||||
|
{
|
||||||
|
mouseWheelListeners.add(position, mouseWheelListener);
|
||||||
|
}
|
||||||
|
|
||||||
public void unregisterMouseWheelListener(MouseWheelListener mouseWheelListener)
|
public void unregisterMouseWheelListener(MouseWheelListener mouseWheelListener)
|
||||||
{
|
{
|
||||||
mouseWheelListeners.remove(mouseWheelListener);
|
mouseWheelListeners.remove(mouseWheelListener);
|
||||||
@@ -125,11 +135,12 @@ public class MouseManager
|
|||||||
return mouseEvent;
|
return mouseEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processMouseWheelMoved(MouseWheelEvent mouseWheelEvent)
|
public MouseWheelEvent processMouseWheelMoved(MouseWheelEvent mouseWheelEvent)
|
||||||
{
|
{
|
||||||
for (MouseWheelListener mouseWheelListener : mouseWheelListeners)
|
for (MouseWheelListener mouseWheelListener : mouseWheelListeners)
|
||||||
{
|
{
|
||||||
mouseWheelListener.mouseWheelMoved(mouseWheelEvent);
|
mouseWheelEvent = mouseWheelListener.mouseWheelMoved(mouseWheelEvent);
|
||||||
}
|
}
|
||||||
|
return mouseWheelEvent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,12 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.input;
|
package net.runelite.client.input;
|
||||||
|
|
||||||
public interface MouseWheelListener extends java.awt.event.MouseWheelListener
|
import java.awt.event.MouseWheelEvent;
|
||||||
|
|
||||||
|
public abstract class MouseWheelListener
|
||||||
{
|
{
|
||||||
|
public MouseWheelEvent mouseWheelMoved(MouseWheelEvent event)
|
||||||
|
{
|
||||||
|
return event;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.plugins.stretchedfixedmode;
|
||||||
|
|
||||||
|
import net.runelite.client.config.Config;
|
||||||
|
import net.runelite.client.config.ConfigGroup;
|
||||||
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
|
||||||
|
@ConfigGroup(
|
||||||
|
keyName = "stretchedfixedmode",
|
||||||
|
name = "Stretched Fixed Mode",
|
||||||
|
description = "Resizes the game while in fixed mode"
|
||||||
|
)
|
||||||
|
public interface StretchedFixedModeConfig extends Config
|
||||||
|
{
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "keepAspectRatio",
|
||||||
|
name = "Keep aspect ratio",
|
||||||
|
description = "Keeps the aspect ratio when stretching"
|
||||||
|
)
|
||||||
|
default boolean keepAspectRatio()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "increasedPerformance",
|
||||||
|
name = "Increased performance mode",
|
||||||
|
description = "Uses a fast algorithm when stretching, lowering quality but increasing performance"
|
||||||
|
)
|
||||||
|
default boolean increasedPerformance()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.plugins.stretchedfixedmode;
|
||||||
|
|
||||||
|
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.ConfigChanged;
|
||||||
|
import net.runelite.client.config.ConfigManager;
|
||||||
|
import net.runelite.client.input.MouseManager;
|
||||||
|
import net.runelite.client.plugins.Plugin;
|
||||||
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
|
|
||||||
|
@PluginDescriptor(
|
||||||
|
name = "Stretched Fixed Mode",
|
||||||
|
enabledByDefault = false
|
||||||
|
)
|
||||||
|
public class StretchedFixedModePlugin extends Plugin
|
||||||
|
{
|
||||||
|
@Inject
|
||||||
|
private Client client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private StretchedFixedModeConfig config;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private MouseManager mouseManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private TranslateMouseListener mouseListener;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private TranslateMouseWheelListener mouseWheelListener;
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
StretchedFixedModeConfig provideConfig(ConfigManager configManager)
|
||||||
|
{
|
||||||
|
return configManager.getConfig(StretchedFixedModeConfig.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void startUp()
|
||||||
|
{
|
||||||
|
mouseManager.registerMouseListener(0, mouseListener);
|
||||||
|
mouseManager.registerMouseWheelListener(0, mouseWheelListener);
|
||||||
|
|
||||||
|
client.setStretchedEnabled(true);
|
||||||
|
updateConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void shutDown() throws Exception
|
||||||
|
{
|
||||||
|
client.setStretchedEnabled(false);
|
||||||
|
|
||||||
|
mouseManager.unregisterMouseListener(mouseListener);
|
||||||
|
mouseManager.unregisterMouseWheelListener(mouseWheelListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onConfigChanged(ConfigChanged event)
|
||||||
|
{
|
||||||
|
if (!event.getGroup().equals("stretchedfixedmode"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateConfig()
|
||||||
|
{
|
||||||
|
client.setStretchedKeepAspectRatio(config.keepAspectRatio());
|
||||||
|
client.setStretchedFast(config.increasedPerformance());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.plugins.stretchedfixedmode;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Provider;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Constants;
|
||||||
|
import net.runelite.client.input.MouseListener;
|
||||||
|
|
||||||
|
public class TranslateMouseListener extends MouseListener
|
||||||
|
{
|
||||||
|
private final Client client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public TranslateMouseListener(Client client)
|
||||||
|
{
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseEvent mouseClicked(MouseEvent mouseEvent)
|
||||||
|
{
|
||||||
|
return translateEvent(mouseEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseEvent mousePressed(MouseEvent mouseEvent)
|
||||||
|
{
|
||||||
|
return translateEvent(mouseEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseEvent mouseReleased(MouseEvent mouseEvent)
|
||||||
|
{
|
||||||
|
return translateEvent(mouseEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseEvent mouseEntered(MouseEvent mouseEvent)
|
||||||
|
{
|
||||||
|
return translateEvent(mouseEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseEvent mouseExited(MouseEvent mouseEvent)
|
||||||
|
{
|
||||||
|
return translateEvent(mouseEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseEvent mouseDragged(MouseEvent mouseEvent)
|
||||||
|
{
|
||||||
|
return translateEvent(mouseEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseEvent mouseMoved(MouseEvent mouseEvent)
|
||||||
|
{
|
||||||
|
return translateEvent(mouseEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MouseEvent translateEvent(MouseEvent e)
|
||||||
|
{
|
||||||
|
if (!client.isResized())
|
||||||
|
{
|
||||||
|
Dimension stretchedDimensions = client.getStretchedDimensions();
|
||||||
|
|
||||||
|
int newX = (int) (e.getX() / (stretchedDimensions.width / (double) Constants.GAME_FIXED_WIDTH));
|
||||||
|
int newY = (int) (e.getY() / (stretchedDimensions.height / (double) Constants.GAME_FIXED_HEIGHT));
|
||||||
|
|
||||||
|
return new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), e.getModifiers(),
|
||||||
|
newX, newY, e.getClickCount(), e.isPopupTrigger());
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.plugins.stretchedfixedmode;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.event.MouseWheelEvent;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Provider;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Constants;
|
||||||
|
import net.runelite.client.input.MouseWheelListener;
|
||||||
|
|
||||||
|
public class TranslateMouseWheelListener extends MouseWheelListener
|
||||||
|
{
|
||||||
|
private final Client client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public TranslateMouseWheelListener(Client client)
|
||||||
|
{
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseWheelEvent mouseWheelMoved(MouseWheelEvent event)
|
||||||
|
{
|
||||||
|
return translateEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MouseWheelEvent translateEvent(MouseWheelEvent e)
|
||||||
|
{
|
||||||
|
if (!client.isResized())
|
||||||
|
{
|
||||||
|
Dimension stretchedDimensions = client.getStretchedDimensions();
|
||||||
|
|
||||||
|
int newX = (int) (e.getX() / (stretchedDimensions.width / (double) Constants.GAME_FIXED_WIDTH));
|
||||||
|
int newY = (int) (e.getY() / (stretchedDimensions.height / (double) Constants.GAME_FIXED_HEIGHT));
|
||||||
|
|
||||||
|
return new MouseWheelEvent((Component) e.getSource(), e.getID(), e.getWhen(), e.getModifiers(), newX, newY,
|
||||||
|
e.getClickCount(), e.isPopupTrigger(), e.getScrollType(), e.getScrollAmount(), e.getWheelRotation());
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,22 +27,20 @@ package net.runelite.client.ui;
|
|||||||
import java.applet.Applet;
|
import java.applet.Applet;
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Constants;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
final class ClientPanel extends JPanel
|
final class ClientPanel extends JPanel
|
||||||
{
|
{
|
||||||
public static final int PANEL_WIDTH = 765, PANEL_HEIGHT = 503;
|
|
||||||
|
|
||||||
public ClientPanel(@Nullable Applet client)
|
public ClientPanel(@Nullable Applet client)
|
||||||
{
|
{
|
||||||
setSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
|
setSize(Constants.GAME_FIXED_SIZE);
|
||||||
setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
|
setMinimumSize(Constants.GAME_FIXED_SIZE);
|
||||||
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
|
setPreferredSize(Constants.GAME_FIXED_SIZE);
|
||||||
setLayout(new BorderLayout());
|
setLayout(new BorderLayout());
|
||||||
setBackground(Color.black);
|
setBackground(Color.black);
|
||||||
|
|
||||||
@@ -52,7 +50,7 @@ final class ClientPanel extends JPanel
|
|||||||
}
|
}
|
||||||
|
|
||||||
client.setLayout(null);
|
client.setLayout(null);
|
||||||
client.setSize(PANEL_WIDTH, PANEL_HEIGHT);
|
client.setSize(Constants.GAME_FIXED_SIZE);
|
||||||
|
|
||||||
client.init();
|
client.init();
|
||||||
client.start();
|
client.start();
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
package net.runelite.client.callback;
|
package net.runelite.client.callback;
|
||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import net.runelite.api.MainBufferProvider;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.MouseWheelEvent;
|
import java.awt.event.MouseWheelEvent;
|
||||||
@@ -41,6 +43,11 @@ public class Hooks
|
|||||||
|
|
||||||
public static EventBus eventBus;
|
public static EventBus eventBus;
|
||||||
|
|
||||||
|
public static void draw(MainBufferProvider mainBufferProvider, Graphics graphics, int x, int y)
|
||||||
|
{
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
public static MouseEvent mousePressed(MouseEvent mouseEvent)
|
public static MouseEvent mousePressed(MouseEvent mouseEvent)
|
||||||
{
|
{
|
||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
@@ -76,7 +83,7 @@ public class Hooks
|
|||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void mouseWheelMoved(MouseWheelEvent event)
|
public static MouseWheelEvent mouseWheelMoved(MouseWheelEvent event)
|
||||||
{
|
{
|
||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 Abex
|
* Copyright (c) 2018 Abex
|
||||||
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -28,11 +29,16 @@ import java.awt.Canvas;
|
|||||||
import java.awt.event.FocusListener;
|
import java.awt.event.FocusListener;
|
||||||
import net.runelite.api.mixins.Inject;
|
import net.runelite.api.mixins.Inject;
|
||||||
import net.runelite.api.mixins.Mixin;
|
import net.runelite.api.mixins.Mixin;
|
||||||
|
import net.runelite.api.mixins.Shadow;
|
||||||
|
import net.runelite.rs.api.RSClient;
|
||||||
import net.runelite.rs.api.RSGameCanvas;
|
import net.runelite.rs.api.RSGameCanvas;
|
||||||
|
|
||||||
@Mixin(RSGameCanvas.class)
|
@Mixin(RSGameCanvas.class)
|
||||||
public abstract class RSGameCanvasMixin extends Canvas implements RSGameCanvas
|
public abstract class RSGameCanvasMixin extends Canvas implements RSGameCanvas
|
||||||
{
|
{
|
||||||
|
@Shadow("clientInstance")
|
||||||
|
private static RSClient client;
|
||||||
|
|
||||||
// This is inverted because it is false initialized.
|
// This is inverted because it is false initialized.
|
||||||
@Inject
|
@Inject
|
||||||
private static boolean shouldNotHaveFocus;
|
private static boolean shouldNotHaveFocus;
|
||||||
@@ -56,4 +62,32 @@ public abstract class RSGameCanvasMixin extends Canvas implements RSGameCanvas
|
|||||||
this.requestFocusInWindow();
|
this.requestFocusInWindow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Override
|
||||||
|
public void setSize(int width, int height)
|
||||||
|
{
|
||||||
|
if (!client.isResized() && client.isStretchedEnabled())
|
||||||
|
{
|
||||||
|
super.setSize(getParent().getWidth(), getParent().getHeight());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
super.setSize(width, height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Override
|
||||||
|
public void setLocation(int x, int y)
|
||||||
|
{
|
||||||
|
if (!client.isResized() && client.isStretchedEnabled())
|
||||||
|
{
|
||||||
|
super.setLocation(0, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
super.setLocation(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.mixins;
|
||||||
|
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import net.runelite.api.mixins.Mixin;
|
||||||
|
import net.runelite.api.mixins.Replace;
|
||||||
|
import net.runelite.client.callback.Hooks;
|
||||||
|
import net.runelite.rs.api.RSMainBufferProvider;
|
||||||
|
|
||||||
|
@Mixin(RSMainBufferProvider.class)
|
||||||
|
public abstract class RSMainBufferProviderMixin implements RSMainBufferProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Replacing this method makes it so we can completely
|
||||||
|
* control when/what is drawn on the game's canvas,
|
||||||
|
* as the method that is replaced draws
|
||||||
|
* the game's image on the canvas.
|
||||||
|
*/
|
||||||
|
@Replace("draw")
|
||||||
|
final void draw(Graphics graphics, int x, int y)
|
||||||
|
{
|
||||||
|
Hooks.draw(this, graphics, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -41,7 +41,7 @@ public abstract class RSMouseWheelHandlerMixin implements RSMouseWheelHandler
|
|||||||
@Replace("mouseWheelMoved")
|
@Replace("mouseWheelMoved")
|
||||||
public void mouseWheelMoved(MouseWheelEvent event)
|
public void mouseWheelMoved(MouseWheelEvent event)
|
||||||
{
|
{
|
||||||
Hooks.mouseWheelMoved(event);
|
event = Hooks.mouseWheelMoved(event);
|
||||||
if (!event.isConsumed())
|
if (!event.isConsumed())
|
||||||
{
|
{
|
||||||
rs$mouseWheelMoved(event);
|
rs$mouseWheelMoved(event);
|
||||||
|
|||||||
@@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.mixins;
|
||||||
|
|
||||||
|
import java.awt.Canvas;
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import net.runelite.api.Constants;
|
||||||
|
import net.runelite.api.mixins.Inject;
|
||||||
|
import net.runelite.api.mixins.Mixin;
|
||||||
|
import net.runelite.rs.api.RSClient;
|
||||||
|
|
||||||
|
@Mixin(RSClient.class)
|
||||||
|
public abstract class StretchedFixedModeMixin implements RSClient
|
||||||
|
{
|
||||||
|
@Inject
|
||||||
|
private static boolean stretchedEnabled;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private static boolean stretchedFast;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private static boolean stretchedKeepAspectRatio;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private static Dimension cachedStretchedDimensions;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private static Dimension lastCanvasDimensions;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Override
|
||||||
|
public boolean isStretchedEnabled()
|
||||||
|
{
|
||||||
|
return stretchedEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Override
|
||||||
|
public void setStretchedEnabled(boolean state)
|
||||||
|
{
|
||||||
|
stretchedEnabled = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Override
|
||||||
|
public boolean isStretchedFast()
|
||||||
|
{
|
||||||
|
return stretchedFast;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Override
|
||||||
|
public void setStretchedFast(boolean state)
|
||||||
|
{
|
||||||
|
stretchedFast = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Override
|
||||||
|
public void setStretchedKeepAspectRatio(boolean state)
|
||||||
|
{
|
||||||
|
stretchedKeepAspectRatio = state;
|
||||||
|
cachedStretchedDimensions = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Override
|
||||||
|
public Dimension getStretchedDimensions()
|
||||||
|
{
|
||||||
|
Canvas canvas = getCanvas();
|
||||||
|
|
||||||
|
int width = canvas.getWidth();
|
||||||
|
int height = canvas.getHeight();
|
||||||
|
|
||||||
|
if (cachedStretchedDimensions == null || width != lastCanvasDimensions.width || height != lastCanvasDimensions.height)
|
||||||
|
{
|
||||||
|
if (stretchedKeepAspectRatio)
|
||||||
|
{
|
||||||
|
int tempNewWidth = (int) (height * Constants.GAME_FIXED_ASPECT_RATIO);
|
||||||
|
|
||||||
|
if (tempNewWidth > canvas.getWidth())
|
||||||
|
{
|
||||||
|
height = (int) (width / Constants.GAME_FIXED_ASPECT_RATIO);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
width = tempNewWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cachedStretchedDimensions = new Dimension(width, height);
|
||||||
|
lastCanvasDimensions = new Dimension(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cachedStretchedDimensions;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user