summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/view/StonePainter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/view/StonePainter.java')
-rw-r--r--src/jrummikub/view/StonePainter.java93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/jrummikub/view/StonePainter.java b/src/jrummikub/view/StonePainter.java
new file mode 100644
index 0000000..dbdf3c8
--- /dev/null
+++ b/src/jrummikub/view/StonePainter.java
@@ -0,0 +1,93 @@
+package jrummikub.view;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.Rectangle2D;
+
+import jrummikub.model.Stone;
+import jrummikub.model.StoneColor;
+
+class StonePainter {
+ private static final float ASPECT_RATIO = 0.75f;
+ private static final float DEFAULT_WIDTH = 40;
+ private static final float CIRCLE_WIDTH = 0.5f;
+
+ private static final Color BACKGROUND_COLOR = new Color(0.9f, 0.9f, 0.6f);
+
+ public static final float BOARD_SCALE = 75.0f/DEFAULT_WIDTH*ASPECT_RATIO;
+
+
+ private static Color getColor(StoneColor color) {
+ switch(color) {
+ case BLACK:
+ return Color.BLACK;
+ case BLUE:
+ return Color.BLUE;
+ case ORANGE:
+ return new Color(1.0f, 0.6f, 0);
+ case RED:
+ return Color.RED;
+ }
+
+ return null;
+ }
+
+ public static void paintStone(Graphics g, Stone stone, float x, float y, float scale) {
+ if (g instanceof Graphics2D) {
+ ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+ }
+
+ int width = (int)(DEFAULT_WIDTH*scale);
+ int height = (int)(width/ASPECT_RATIO);
+
+ int xpos = (int)(x*width);
+ int ypos = (int)(y*height);
+
+ // Paint background
+ g.setColor(BACKGROUND_COLOR);
+ g.fillRect(xpos, ypos, width, height);
+
+ // Paint bevel border
+ g.setColor(BACKGROUND_COLOR.brighter().brighter());
+ g.fillRect(xpos, ypos, 1, height);
+ g.setColor(BACKGROUND_COLOR.brighter());
+ g.fillRect(xpos+1, ypos+1, 1, height-2);
+
+ g.setColor(BACKGROUND_COLOR.brighter().brighter());
+ g.fillRect(xpos, ypos, width, 1);
+ g.setColor(BACKGROUND_COLOR.brighter());
+ g.fillRect(xpos+1, ypos+1, width-2, 1);
+
+ g.setColor(BACKGROUND_COLOR.darker().darker());
+ g.fillRect(xpos+width-1, ypos, 1, height);
+ g.setColor(BACKGROUND_COLOR.darker());
+ g.fillRect(xpos+width-2, ypos+1, 1, height-2);
+
+ g.setColor(BACKGROUND_COLOR.darker().darker());
+ g.fillRect(xpos, ypos+height-1, width, 1);
+ g.setColor(BACKGROUND_COLOR.darker());
+ g.fillRect(xpos+1, ypos+height-2, width-2, 1);
+
+ // Paint number
+ g.setFont(new Font("SansSerif", Font.BOLD, height/4));
+ FontMetrics fm = g.getFontMetrics();
+ String value = Integer.toString(stone.getValue());
+ Rectangle2D stringRect = fm.getStringBounds(value, g);
+
+ g.setColor(getColor(stone.getColor()).darker());
+ g.drawString(value, (int)(xpos+width/2-stringRect.getWidth()/2)+1, ypos+height/4+(fm.getAscent()-fm.getDescent())/2+1);
+ g.setColor(getColor(stone.getColor()));
+ g.drawString(value, (int)(xpos+width/2-stringRect.getWidth()/2), ypos+height/4+(fm.getAscent()-fm.getDescent())/2);
+
+ g.setColor(BACKGROUND_COLOR.darker());
+ g.drawArc((int)(xpos+width/2-width*CIRCLE_WIDTH/2), (int)(ypos+height*0.65f-width*CIRCLE_WIDTH/2), (int)(width*CIRCLE_WIDTH), (int)(width*CIRCLE_WIDTH), 50, 170);
+
+ g.setColor(BACKGROUND_COLOR.brighter());
+ g.drawArc((int)(xpos+width/2-width*CIRCLE_WIDTH/2), (int)(ypos+height*0.65f-width*CIRCLE_WIDTH/2), (int)(width*CIRCLE_WIDTH), (int)(width*CIRCLE_WIDTH), -130, 170);
+ }
+}