Source code: com/adorphuye/othello/OthelloCellRenderer.java
1 package com.adorphuye.othello;
2
3 import java.awt.*;
4 import java.awt.event.*;
5 import com.adorphuye.othello.gui.board.*;
6
7
8 /** Renders a single cell of a Board
9 */
10 class OthelloCellRenderer implements BoardCellRenderer
11 {
12 private OthelloCellComponent comp = new OthelloCellComponent();
13 private Color p1 = Color.black;
14 private Color p2 = Color.white;
15
16 public OthelloCellRenderer()
17 {
18 }
19
20 /**
21 * @param a
22 * @param b */
23 public OthelloCellRenderer(Color a, Color b)
24 {
25 p1 = a;
26 p2 = b;
27 }
28
29 /**
30 * @param b */
31 public void setHints(boolean b)
32 {
33 hints = b;
34 }
35
36 /**
37 * @return */
38 public boolean getHints()
39 {
40 return hints;
41 }
42
43 private boolean hints = true;
44
45 /**
46 * @param parent
47 * @param hasFocus
48 * @param value
49 * @param p
50 * @return */
51 public Component getBoardCellRenderer(Component parent, boolean hasFocus, Object value, Point p)
52 {
53 comp.setHints(getHints());
54 comp.setValue(value);
55 comp.setPoint(p);
56 return comp;
57 }
58
59 class OthelloCellComponent extends Canvas
60 {
61 private boolean hints = true;
62 private Object value = null;
63 private Point pp = new Point(0,0);
64
65 /**
66 * @param b */
67 public void setHints(boolean b)
68 {
69 hints = b;
70 }
71
72 /**
73 * @return */
74 public boolean getHints()
75 {
76 return hints;
77 }
78
79 /**
80 * @param p */
81 public void setPoint(Point p)
82 {
83 pp = p;
84 }
85
86 /**
87 * @param i */
88 public void setValue(Object i)
89 {
90 value = i;
91 }
92
93 /**
94 * @param g */
95 public void update(Graphics g)
96 {
97 paint(g);
98 }
99
100 /**
101 * @param g */
102 public void paint(Graphics g)
103 {
104 Rectangle r = (Rectangle)getBounds();
105 Color c = g.getColor();
106 g.setColor(getBackground());
107 g.fillRect(r.x,r.y,r.width,r.height);
108
109 if(value!=null)
110 {
111 if(value instanceof Color)
112 {
113
114 int s = Math.min(r.width-1,r.height-1);
115 g.setColor(new Color(64,64,64));
116 g.fillOval(2+r.x-(s/2)+(r.width/2)+1,2+r.y-(s/2)+(r.height/2)+1,s-4,s-4);
117 g.setColor((Color)value);
118 g.fillOval(2+r.x-(s/2)+(r.width/2),2+r.y-(s/2)+(r.height/2),s-4,s-4);
119 }
120 else if(value instanceof Image)
121 {
122 g.drawImage((Image)value,r.x,r.y,r.width,r.height,null);
123 }
124 }
125
126 g.setColor(new Color(32,96,32));
127 g.drawRect(r.x,r.y,r.width-1,r.height-1);
128 g.setColor(new Color(128,192,128));
129 g.drawRect(r.x,r.y,r.width,r.height);
130
131 if(pp.y!=0 && getHints())
132 {
133 g.setColor(new Color(96,160,96));
134 g.fillRect(r.x+2,r.y+2,r.width-3,r.height-3);
135 g.setColor(Color.yellow);
136 g.drawString(""+pp.y,r.x+(r.width/3),r.y+(r.height)-12);
137 }
138 g.setColor(c);
139 }
140 }
141 }
142
143