image component: support setPreferredSize

This commit is contained in:
Adam
2021-02-02 21:03:56 -05:00
parent e4d5450283
commit 5e7242388d

View File

@@ -24,35 +24,37 @@
*/ */
package net.runelite.client.ui.overlay.components; package net.runelite.client.ui.overlay.components;
import com.google.common.base.MoreObjects;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.util.ImageUtil;
@RequiredArgsConstructor @RequiredArgsConstructor
@Setter
public class ImageComponent implements LayoutableRenderableEntity public class ImageComponent implements LayoutableRenderableEntity
{ {
@NonNull
private final BufferedImage image; private final BufferedImage image;
private BufferedImage scaledImage;
@Getter @Getter
private final Rectangle bounds = new Rectangle(); private final Rectangle bounds = new Rectangle();
@Setter
private Point preferredLocation = new Point(); private Point preferredLocation = new Point();
@Override @Override
public Dimension render(Graphics2D graphics) public Dimension render(Graphics2D graphics)
{ {
if (image == null) BufferedImage i = MoreObjects.firstNonNull(scaledImage, image);
{ graphics.drawImage(i, preferredLocation.x, preferredLocation.y, null);
return null;
}
graphics.drawImage(image, preferredLocation.x, preferredLocation.y, null);
final Dimension dimension = new Dimension(image.getWidth(), image.getHeight()); final Dimension dimension = new Dimension(image.getWidth(), image.getHeight());
bounds.setLocation(preferredLocation); bounds.setLocation(preferredLocation);
bounds.setSize(dimension); bounds.setSize(dimension);
@@ -60,8 +62,15 @@ public class ImageComponent implements LayoutableRenderableEntity
} }
@Override @Override
public void setPreferredSize(Dimension dimension) public void setPreferredSize(Dimension preferredSize)
{ {
// Just use image dimensions for now if (preferredSize == null || (preferredSize.width == image.getWidth() && preferredSize.height == image.getHeight()))
{
scaledImage = null;
}
else
{
scaledImage = ImageUtil.resizeImage(image, preferredSize.width, preferredSize.height);
}
} }
} }