diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-06-19 00:14:27 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-06-19 00:14:27 +0200 |
commit | 479384d6bfeea0c225af829cbc1cac730d87c844 (patch) | |
tree | f9a1ef3b2e87c9179d482443a11e98581e660939 /src/jrummikub/view/impl/StonePainter.java | |
parent | e8549b95dff600aa173384a8f7bdbf0871ba9d47 (diff) | |
download | JRummikub-479384d6bfeea0c225af829cbc1cac730d87c844.tar JRummikub-479384d6bfeea0c225af829cbc1cac730d87c844.zip |
Correctly show invalid sets
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@471 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/view/impl/StonePainter.java')
-rw-r--r-- | src/jrummikub/view/impl/StonePainter.java | 79 |
1 files changed, 46 insertions, 33 deletions
diff --git a/src/jrummikub/view/impl/StonePainter.java b/src/jrummikub/view/impl/StonePainter.java index 298f9ac..143ef86 100644 --- a/src/jrummikub/view/impl/StonePainter.java +++ b/src/jrummikub/view/impl/StonePainter.java @@ -23,6 +23,10 @@ import jrummikub.model.StoneColor; * coordinates */ class StonePainter { + enum StoneState { + NORMAL, SELECTED, INVALID + } + private static final double ASPECT_RATIO = 0.75f; private static final double DEFAULT_WIDTH = 40; private static final double TEXT_POS = 0.275f; @@ -34,11 +38,10 @@ class StonePainter { private static final double BRIGHTER_SCALE = 1.15f; private static final double HOVER_RATIO = 0.7f; + private static final double REDDEN_RATIO = 0.3f; - private Map<StoneColor, Map<Integer, BufferedImage>> defaultStones; - private Map<StoneColor, Map<Integer, BufferedImage>> selectedStones; - private Map<StoneColor, Map<Integer, BufferedImage>> hoveredStones; - private Map<StoneColor, Map<Integer, BufferedImage>> hoveredSelectedStones; + private Map<StoneState, Map<StoneColor, Map<Integer, BufferedImage>>> defaultStones; + private Map<StoneState, Map<StoneColor, Map<Integer, BufferedImage>>> hoveredStones; /** * The width of one pixel in the scale of 1.0 @@ -71,6 +74,14 @@ class StonePainter { return new Color(r > 255 ? 255 : r, g > 255 ? 255 : g, b > 255 ? 255 : b); } + private static Color redden(Color color) { + int r = (int) (color.getRed() * REDDEN_RATIO + 255 * (1 - REDDEN_RATIO)); + int g = (int) (color.getGreen() * REDDEN_RATIO + 128 * (1 - REDDEN_RATIO)); + int b = (int) (color.getBlue() * REDDEN_RATIO + 128 * (1 - REDDEN_RATIO)); + + return new Color(r > 255 ? 255 : r, g > 255 ? 255 : g, b > 255 ? 255 : b); + } + public static Color getColor(StoneColor color) { switch (color) { case BLACK: @@ -160,21 +171,13 @@ class StonePainter { } private BufferedImage getStoneImage(StoneColor color, int value, - boolean selected, boolean hovered) { + StoneState state, boolean hovered) { Map<StoneColor, Map<Integer, BufferedImage>> stoneMap; - if (selected) { - if (hovered) { - stoneMap = hoveredSelectedStones; - } else { - stoneMap = selectedStones; - } + if (hovered) { + stoneMap = hoveredStones.get(state); } else { - if (hovered) { - stoneMap = hoveredStones; - } else { - stoneMap = defaultStones; - } + stoneMap = defaultStones.get(state); } BufferedImage image = stoneMap.get(color).get(value); @@ -182,10 +185,15 @@ class StonePainter { if (image == null) { Color background = BACKGROUND_COLOR; Color foreground = getColor(color); - if (selected) { + + if (state == StoneState.SELECTED) { background = background.darker(); foreground = foreground.darker(); + } else if (state == StoneState.INVALID) { + background = redden(background); + foreground = redden(foreground); } + if (hovered) { background = hover(background); foreground = hover(foreground); @@ -200,16 +208,20 @@ class StonePainter { } private void resetPrepaint() { - defaultStones = new HashMap<StoneColor, Map<Integer, BufferedImage>>(); - selectedStones = new HashMap<StoneColor, Map<Integer, BufferedImage>>(); - hoveredStones = new HashMap<StoneColor, Map<Integer, BufferedImage>>(); - hoveredSelectedStones = new HashMap<StoneColor, Map<Integer, BufferedImage>>(); - - for (StoneColor color : StoneColor.values()) { - defaultStones.put(color, new HashMap<Integer, BufferedImage>()); - selectedStones.put(color, new HashMap<Integer, BufferedImage>()); - hoveredStones.put(color, new HashMap<Integer, BufferedImage>()); - hoveredSelectedStones.put(color, new HashMap<Integer, BufferedImage>()); + defaultStones = new HashMap<StoneState, Map<StoneColor, Map<Integer, BufferedImage>>>(); + hoveredStones = new HashMap<StoneState, Map<StoneColor, Map<Integer, BufferedImage>>>(); + + for (StoneState state : StoneState.values()) { + Map<StoneColor, Map<Integer, BufferedImage>> defaultStateStones = new HashMap<StoneColor, Map<Integer, BufferedImage>>(); + Map<StoneColor, Map<Integer, BufferedImage>> hoveredStateStones = new HashMap<StoneColor, Map<Integer, BufferedImage>>(); + + defaultStones.put(state, defaultStateStones); + hoveredStones.put(state, hoveredStateStones); + + for (StoneColor color : StoneColor.values()) { + defaultStateStones.put(color, new HashMap<Integer, BufferedImage>()); + hoveredStateStones.put(color, new HashMap<Integer, BufferedImage>()); + } } } @@ -348,25 +360,26 @@ class StonePainter { * the stone to paint * @param p * the position of the stone - * @param selected - * if selected is true the stone will be painted darker + * @param state + * if the stone is selected the stone will be painted darker, if it + * is invalid it will be painted in red * @param hovered * if hovered is true the stone will be painted brighter */ public void paintStone(Graphics2D g, Stone stone, Position p, - boolean selected, boolean hovered) { + StoneState state, boolean hovered) { int width = getStoneWidth(); int height = getStoneHeight(); int x = (int) Math.round(p.getX() * width), y = (int) Math.round(p.getY() * height); if (stone.isJoker()) { - g.drawImage(getStoneImage(stone.getColor(), 0, selected, hovered), x, y, + g.drawImage(getStoneImage(stone.getColor(), 0, state, hovered), x, y, null); } else { g.drawImage( - getStoneImage(stone.getColor(), stone.getValue(), selected, hovered), - x, y, null); + getStoneImage(stone.getColor(), stone.getValue(), state, hovered), x, + y, null); } } } |