summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/view/impl/StonePainter.java
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-06-19 00:14:27 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-06-19 00:14:27 +0200
commit479384d6bfeea0c225af829cbc1cac730d87c844 (patch)
treef9a1ef3b2e87c9179d482443a11e98581e660939 /src/jrummikub/view/impl/StonePainter.java
parente8549b95dff600aa173384a8f7bdbf0871ba9d47 (diff)
downloadJRummikub-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.java79
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);
}
}
}