diff options
Diffstat (limited to 'src/jrummikub/view/impl/StonePainter.java')
-rw-r--r-- | src/jrummikub/view/impl/StonePainter.java | 57 |
1 files changed, 46 insertions, 11 deletions
diff --git a/src/jrummikub/view/impl/StonePainter.java b/src/jrummikub/view/impl/StonePainter.java index 68ab72c..bfa61ea 100644 --- a/src/jrummikub/view/impl/StonePainter.java +++ b/src/jrummikub/view/impl/StonePainter.java @@ -31,12 +31,14 @@ class StonePainter { private static final float CIRCLE_WIDTH = 0.45f; private static final Color BACKGROUND_COLOR = new Color(0.9f, 0.9f, 0.6f); - private static final Color SELECTED_COLOR = BACKGROUND_COLOR.darker(); private static final float BRIGHTER_SCALE = 1.15f; + private static final float HOVER_RATIO = 0.7f; 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; /** * The width of one pixel in the scale of 1.0 @@ -55,8 +57,16 @@ class StonePainter { private static Color brighter(Color color) { int r = (int) (color.getRed() * BRIGHTER_SCALE); - int g = (int) (color.getRed() * BRIGHTER_SCALE); - int b = (int) (color.getRed() * BRIGHTER_SCALE); + int g = (int) (color.getGreen() * BRIGHTER_SCALE); + int b = (int) (color.getBlue() * BRIGHTER_SCALE); + + return new Color(r > 255 ? 255 : r, g > 255 ? 255 : g, b > 255 ? 255 : b); + } + + private static Color hover(Color color) { + int r = (int) (color.getRed() * HOVER_RATIO + 255 * (1-HOVER_RATIO)); + int g = (int) (color.getGreen() * HOVER_RATIO + 255 * (1-HOVER_RATIO)); + int b = (int) (color.getBlue() * HOVER_RATIO + 255 * (1-HOVER_RATIO)); return new Color(r > 255 ? 255 : r, g > 255 ? 255 : g, b > 255 ? 255 : b); } @@ -156,16 +166,25 @@ class StonePainter { private void prepaint() { 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>>(); Color defaultBackground = BACKGROUND_COLOR; - Color selectedBackground = SELECTED_COLOR; + Color selectedBackground = BACKGROUND_COLOR.darker(); + Color hoveredBackground = hover(defaultBackground); + Color hoveredSelectedBackground = hover(selectedBackground); for (StoneColor color : StoneColor.values()) { Color defaultFg = getColor(color); Color selectedFg = defaultFg.darker(); + Color hoveredFg = hover(defaultFg); + Color hoveredSelectedFg = hover(selectedFg); defaultStones.put(color, prepaintColor(defaultFg, defaultBackground)); selectedStones.put(color, prepaintColor(selectedFg, selectedBackground)); + hoveredStones.put(color, prepaintColor(hoveredFg, hoveredBackground)); + hoveredSelectedStones.put(color, + prepaintColor(hoveredSelectedFg, hoveredSelectedBackground)); } } @@ -303,21 +322,37 @@ class StonePainter { * the position of the stone * @param selected * if selected is true the stone will be painted darker + * @param hovered + * if hovered is true the stone will be painted brighter */ - public void paintStone(Graphics2D g, Stone stone, Position p, boolean selected) { + public void paintStone(Graphics2D g, Stone stone, Position p, + boolean selected, boolean hovered) { // Color background = selected ? SELECTED_COLOR : BACKGROUND_COLOR; int width = getStoneWidth(); int height = getStoneHeight(); int x = (int) (p.getX() * width), y = (int) (p.getY() * height); + Map<StoneColor, Map<Integer, BufferedImage>> stoneMap; + + if (selected) { + if (hovered) { + stoneMap = hoveredSelectedStones; + } else { + stoneMap = selectedStones; + } + } else { + if (hovered) { + stoneMap = hoveredStones; + } else { + stoneMap = defaultStones; + } + } + if (stone.isJoker()) { - g.drawImage( - (selected ? selectedStones : defaultStones).get(stone.getColor()) - .get(0), x, y, null); + g.drawImage(stoneMap.get(stone.getColor()).get(0), x, y, null); } else { - g.drawImage( - (selected ? selectedStones : defaultStones).get(stone.getColor()) - .get(stone.getValue()), x, y, null); + g.drawImage(stoneMap.get(stone.getColor()).get(stone.getValue()), x, y, + null); } } } |