From 9d2f16fd21815af8a8bf8254246bb4c8e419ebc0 Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 25 Oct 2014 16:48:42 +0300 Subject: [PATCH] Add drawToImage method in Background --- src/com/annimon/turrets/Background.java | 9 +++++- src/com/annimon/turrets/GameCanvas.java | 5 +--- src/com/annimon/turrets/util/GuiUtil.java | 36 +++++++++++++---------- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/com/annimon/turrets/Background.java b/src/com/annimon/turrets/Background.java index 01396d4..8ad7c4d 100644 --- a/src/com/annimon/turrets/Background.java +++ b/src/com/annimon/turrets/Background.java @@ -5,6 +5,7 @@ import static com.annimon.turrets.Constants.WIDTH; import com.annimon.turrets.util.Util; import java.awt.Color; import java.awt.Graphics; +import java.awt.image.BufferedImage; /** * @@ -12,12 +13,18 @@ import java.awt.Graphics; */ public final class Background { + public static void drawToImage(BufferedImage img) { + final Graphics g = img.createGraphics(); + new Background().draw(g); + g.dispose(); + } + private static final int STARS_COUNT = (int) Math.sqrt(WIDTH * HEIGHT); private final Color bg, color; private final double shadeAmount; - public Background() { + private Background() { bg = new Color(Util.randomColor(0, 15)); color = new Color(Util.randomColor(150, 235)); shadeAmount = Util.rand(0.5, 2.5); diff --git a/src/com/annimon/turrets/GameCanvas.java b/src/com/annimon/turrets/GameCanvas.java index 24b1317..0e96823 100644 --- a/src/com/annimon/turrets/GameCanvas.java +++ b/src/com/annimon/turrets/GameCanvas.java @@ -11,7 +11,6 @@ import com.annimon.turrets.util.ExceptionHandler; import com.annimon.turrets.util.Util; import java.awt.Color; import java.awt.FontMetrics; -import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; @@ -154,9 +153,7 @@ public final class GameCanvas extends DoubleBufferedCanvas implements Runnable, } private void initBackground() { - final Graphics g = background.createGraphics(); - new Background().draw(g); - g.dispose(); + Background.drawToImage(background); } private void startGame(long seed) { diff --git a/src/com/annimon/turrets/util/GuiUtil.java b/src/com/annimon/turrets/util/GuiUtil.java index c5c5efe..17485e8 100644 --- a/src/com/annimon/turrets/util/GuiUtil.java +++ b/src/com/annimon/turrets/util/GuiUtil.java @@ -22,42 +22,46 @@ public final class GuiUtil { public static JLayer createPlanetLayer(T component) { return new JLayer<>(component, (LayerUI) new PlanetBackground()); } - - public static class GradientBackground extends javax.swing.plaf.LayerUI { + + public static JLayer createGradientLayer(T component) { + return new JLayer<>(component, (LayerUI) new GradientBackground()); + } + + private static class GradientBackground extends BackgroundLayer { @Override - public void paint(Graphics g, JComponent component) { - super.paint(g, component); - final int w = component.getWidth(); - final int h = component.getHeight(); - - Graphics2D g2d = (Graphics2D) g.create(); - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.25f)); + protected void paint(Graphics2D g2d, int w, int h) { g2d.setPaint(new GradientPaint(0, 0, Color.BLACK, 0, h, Color.GREEN)); g2d.fillRect(0, 0, w, h); - g2d.dispose(); } } - public static class PlanetBackground extends javax.swing.plaf.LayerUI { + private static class PlanetBackground extends BackgroundLayer { private final BufferedImage image; public PlanetBackground() { image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = image.createGraphics(); - new Background().draw(g); - g.dispose(); + Background.drawToImage(image); } + @Override + protected void paint(Graphics2D g2d, int w, int h) { + g2d.drawImage(image, 0, 0, null); + } + } + + private static abstract class BackgroundLayer extends LayerUI { + @Override public void paint(Graphics g, JComponent component) { super.paint(g, component); - Graphics2D g2d = (Graphics2D) g.create(); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.25f)); - g2d.drawImage(image, 0, 0, null); + paint(g2d, component.getWidth(), component.getHeight()); g2d.dispose(); } + + protected abstract void paint(Graphics2D g, int w, int h); } }