Fixed some metrics in the view

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@61 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-05-02 03:40:24 +02:00
parent 15a41ec38e
commit 6d406adc6d
2 changed files with 117 additions and 117 deletions

View file

@ -107,40 +107,7 @@ class PlayerPanel extends JPanel implements IPlayerPanel {
});
leftPanel.add(sortByColorButton);
leftPanel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Insets insets = leftPanel.getInsets();
int x = insets.left, y = insets.top, width = leftPanel.getWidth()
- insets.left - insets.right, height = leftPanel.getHeight()
- insets.top - insets.bottom;
if (width > SIDE_PANEL_MAX_WIDTH) {
x += (width - SIDE_PANEL_MAX_WIDTH) / 4;
width = width / 2 + SIDE_PANEL_MAX_WIDTH / 2;
}
int firstLineHeight = (int) ((height - SIDE_PANEL_SEPARATOR) * SIDE_PANEL_FIRST_LINE_HEIGHT);
int buttonWidth = (width - SIDE_PANEL_SEPARATOR) / 2;
int buttonHeight = height - SIDE_PANEL_SEPARATOR - firstLineHeight;
float fontSize = (float) Math.sqrt(buttonWidth * buttonHeight) / 5;
if (fontSize > MAX_BUTTON_FONT_SIZE)
fontSize = MAX_BUTTON_FONT_SIZE;
currentPlayerNameLabel.setBounds(x, y, width, firstLineHeight);
sortByNumberButton.setBounds(x, y + firstLineHeight
+ SIDE_PANEL_SEPARATOR, buttonWidth, buttonHeight);
sortByColorButton
.setBounds(x + buttonWidth + SIDE_PANEL_SEPARATOR, y
+ firstLineHeight + SIDE_PANEL_SEPARATOR, buttonWidth,
buttonHeight);
sortByNumberButton.setFont(sortByNumberButton.getFont().deriveFont(
fontSize));
sortByColorButton.setFont(sortByColorButton.getFont().deriveFont(
fontSize));
}
});
leftPanel.addComponentListener(new LeftPanelResizeListener());
}
private void createRightPanel() {
@ -164,33 +131,7 @@ class PlayerPanel extends JPanel implements IPlayerPanel {
rightPanel.add(endTurnButton);
rightPanel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Insets insets = rightPanel.getInsets();
int x = insets.left, y = insets.top, width = rightPanel.getWidth()
- insets.left - insets.right, height = rightPanel.getHeight()
- insets.top - insets.bottom;
if (width > SIDE_PANEL_MAX_WIDTH) {
x += (width - SIDE_PANEL_MAX_WIDTH) / 4;
width = width / 2 + SIDE_PANEL_MAX_WIDTH / 2;
}
int firstLineHeight = (int) ((height - SIDE_PANEL_SEPARATOR) * SIDE_PANEL_FIRST_LINE_HEIGHT);
int buttonWidth = width;
int buttonHeight = height - SIDE_PANEL_SEPARATOR - firstLineHeight;
float fontSize = (float) Math.sqrt(buttonWidth * buttonHeight) / 5;
if (fontSize > MAX_BUTTON_FONT_SIZE)
fontSize = MAX_BUTTON_FONT_SIZE;
timeBar.setBounds(x, y, width, firstLineHeight);
endTurnButton.setBounds(x, y + firstLineHeight + SIDE_PANEL_SEPARATOR,
buttonWidth, buttonHeight);
endTurnButton.setFont(endTurnButton.getFont().deriveFont(
fontSize));
}
});
rightPanel.addComponentListener(new RightPanelResizeListener());
}
private void rescale() {
@ -232,4 +173,64 @@ class PlayerPanel extends JPanel implements IPlayerPanel {
addComponentListener(rescaleListener);
board.addComponentListener(rescaleListener);
}
private class LeftPanelResizeListener extends ComponentAdapter {
@Override
public void componentResized(ComponentEvent e) {
Insets insets = leftPanel.getInsets();
int x = insets.left, y = insets.top, width = leftPanel.getWidth()
- insets.left - insets.right, height = leftPanel.getHeight()
- insets.top - insets.bottom;
if (width > SIDE_PANEL_MAX_WIDTH) {
x += (width - SIDE_PANEL_MAX_WIDTH) / 4;
width = width / 2 + SIDE_PANEL_MAX_WIDTH / 2;
}
int firstLineHeight = (int) ((height - SIDE_PANEL_SEPARATOR) * SIDE_PANEL_FIRST_LINE_HEIGHT);
int buttonWidth = (width - SIDE_PANEL_SEPARATOR) / 2;
int buttonHeight = height - SIDE_PANEL_SEPARATOR - firstLineHeight;
float fontSize = (float) Math.sqrt(buttonWidth * buttonHeight) / 5;
if (fontSize > MAX_BUTTON_FONT_SIZE)
fontSize = MAX_BUTTON_FONT_SIZE;
currentPlayerNameLabel.setBounds(x, y, width, firstLineHeight);
sortByNumberButton.setBounds(x, y + firstLineHeight
+ SIDE_PANEL_SEPARATOR, buttonWidth, buttonHeight);
sortByColorButton.setBounds(x + buttonWidth + SIDE_PANEL_SEPARATOR, y
+ firstLineHeight + SIDE_PANEL_SEPARATOR, buttonWidth, buttonHeight);
sortByNumberButton.setFont(sortByNumberButton.getFont().deriveFont(
fontSize));
sortByColorButton.setFont(sortByColorButton.getFont()
.deriveFont(fontSize));
}
}
private class RightPanelResizeListener extends ComponentAdapter {
@Override
public void componentResized(ComponentEvent e) {
Insets insets = rightPanel.getInsets();
int x = insets.left, y = insets.top, width = rightPanel.getWidth()
- insets.left - insets.right, height = rightPanel.getHeight()
- insets.top - insets.bottom;
if (width > SIDE_PANEL_MAX_WIDTH) {
x += (width - SIDE_PANEL_MAX_WIDTH) / 4;
width = width / 2 + SIDE_PANEL_MAX_WIDTH / 2;
}
int firstLineHeight = (int) ((height - SIDE_PANEL_SEPARATOR) * SIDE_PANEL_FIRST_LINE_HEIGHT);
int buttonWidth = width;
int buttonHeight = height - SIDE_PANEL_SEPARATOR - firstLineHeight;
float fontSize = (float) Math.sqrt(buttonWidth * buttonHeight) / 5;
if (fontSize > MAX_BUTTON_FONT_SIZE)
fontSize = MAX_BUTTON_FONT_SIZE;
timeBar.setBounds(x, y, width, firstLineHeight);
endTurnButton.setBounds(x, y + firstLineHeight + SIDE_PANEL_SEPARATOR,
buttonWidth, buttonHeight);
endTurnButton.setFont(endTurnButton.getFont().deriveFont(fontSize));
}
}
}

View file

@ -5,6 +5,7 @@ import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Stroke;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
@ -26,6 +27,7 @@ class StonePainter {
private static final float BRIGHTER_SCALE = 1.15f;
public static final float WIDTH_SCALE = 1 / DEFAULT_WIDTH;
public static final float HEIGHT_SCALE = ASPECT_RATIO / DEFAULT_WIDTH;
private float scale;
@ -91,121 +93,118 @@ class StonePainter {
this.scale = scale;
}
private void paintStoneBackground(Graphics2D g, int x, int y, int width,
int height, Color background) {
private void paintStoneBackground(Graphics2D g, Rectangle r, Color background) {
// Paint background
g.setColor(background);
g.fillRect(x, y, width, height);
g.fillRect(r.x, r.y, r.width, r.height);
// Paint bevel border
g.setColor(brighter(brighter(background)));
g.fillRect(x, y, 1, height);
g.fillRect(r.x, r.y, 1, r.height);
g.setColor(brighter(background));
g.fillRect(x + 1, y + 1, 1, height - 2);
g.fillRect(r.x + 1, r.y + 1, 1, r.height - 2);
g.setColor(brighter(brighter(background)));
g.fillRect(x, y, width, 1);
g.fillRect(r.x, r.y, r.width, 1);
g.setColor(brighter(background));
g.fillRect(x + 1, y + 1, width - 2, 1);
g.fillRect(r.x + 1, r.y + 1, r.width - 2, 1);
g.setColor(background.darker().darker());
g.fillRect(x + width - 1, y, 1, height);
g.fillRect(r.x + r.width - 1, r.y, 1, r.height);
g.setColor(background.darker());
g.fillRect(x + width - 2, y + 1, 1, height - 2);
g.fillRect(r.x + r.width - 2, r.y + 1, 1, r.height - 2);
g.setColor(background.darker().darker());
g.fillRect(x, y + height - 1, width, 1);
g.fillRect(r.x, r.y + r.height - 1, r.width, 1);
g.setColor(background.darker());
g.fillRect(x + 1, y + height - 2, width - 2, 1);
g.fillRect(r.x + 1, r.y + r.height - 2, r.width - 2, 1);
}
private void paintJokerFace(Graphics2D g, int x, int y, int width, int height) {
private void paintJokerFace(Graphics2D g, Rectangle r) {
Stroke oldStroke = g.getStroke();
g.setStroke(new BasicStroke(2));
g.drawOval(x, y, width, height);
g.drawOval(r.x, r.y, r.width, r.height);
g.setStroke(new BasicStroke(1));
GeneralPath path = new GeneralPath();
// nose
path.moveTo(x + 0.5f * width, y + 0.45f * height);
path.lineTo(x + 0.53f * width, y + 0.6f * height);
path.lineTo(x + 0.47f * width, y + 0.6f * height);
path.moveTo(r.x + 0.5f * r.width, r.y + 0.45f * r.height);
path.lineTo(r.x + 0.53f * r.width, r.y + 0.6f * r.height);
path.lineTo(r.x + 0.47f * r.width, r.y + 0.6f * r.height);
path.closePath();
g.fill(path);
path.reset();
// mouth, left
path.moveTo(x + 0.23f * width, y + 0.75f * width);
path.lineTo(x + 0.27f * width, y + 0.65f * width);
path.moveTo(r.x + 0.23f * r.width, r.y + 0.75f * r.width);
path.lineTo(r.x + 0.27f * r.width, r.y + 0.65f * r.width);
// mouth, middle
path.moveTo(x + 0.25f * width, y + 0.7f * width);
path.lineTo(x + 0.5f * width, y + 0.8f * width);
path.lineTo(x + 0.75f * width, y + 0.7f * width);
path.moveTo(r.x + 0.25f * r.width, r.y + 0.7f * r.width);
path.lineTo(r.x + 0.5f * r.width, r.y + 0.8f * r.width);
path.lineTo(r.x + 0.75f * r.width, r.y + 0.7f * r.width);
// mouth, right
path.moveTo(x + 0.77f * width, y + 0.75f * width);
path.lineTo(x + 0.73f * width, y + 0.65f * width);
path.moveTo(r.x + 0.77f * r.width, r.y + 0.75f * r.width);
path.lineTo(r.x + 0.73f * r.width, r.y + 0.65f * r.width);
g.draw(path);
path.reset();
// left eye
path.moveTo(x + 0.3f * width, y + 0.41f * height);
path.lineTo(x + 0.375f * width, y + 0.375f * height);
path.lineTo(x + 0.3f * width, y + 0.34f * height);
path.lineTo(x + 0.225f * width, y + 0.375f * height);
path.moveTo(r.x + 0.3f * r.width, r.y + 0.41f * r.height);
path.lineTo(r.x + 0.375f * r.width, r.y + 0.375f * r.height);
path.lineTo(r.x + 0.3f * r.width, r.y + 0.34f * r.height);
path.lineTo(r.x + 0.225f * r.width, r.y + 0.375f * r.height);
path.closePath();
g.draw(path);
path.reset();
// right eye
path.moveTo(x + 0.7f * width, y + 0.41f * height);
path.lineTo(x + 0.625f * width, y + 0.375f * height);
path.lineTo(x + 0.7f * width, y + 0.34f * height);
path.lineTo(x + 0.775f * width, y + 0.375f * height);
path.moveTo(r.x + 0.7f * r.width, r.y + 0.41f * r.height);
path.lineTo(r.x + 0.625f * r.width, r.y + 0.375f * r.height);
path.lineTo(r.x + 0.7f * r.width, r.y + 0.34f * r.height);
path.lineTo(r.x + 0.775f * r.width, r.y + 0.375f * r.height);
path.closePath();
g.draw(path);
g.setStroke(oldStroke);
}
private void paintJoker(Graphics2D g, int x, int y, int width, int height,
Color color) {
int faceSize = even(FACE_WIDTH * width);
int pos = y + (int) (TEXT_POS * height);
private void paintJoker(Graphics2D g, Rectangle r, Color color) {
int faceSize = even(FACE_WIDTH * r.width);
int pos = r.y + (int) (TEXT_POS * r.height);
g.setColor(color);
paintJokerFace(g, x + width / 2 - faceSize / 2, pos - faceSize / 2,
faceSize, faceSize);
paintJokerFace(g, new Rectangle(r.x + r.width / 2 - faceSize / 2, pos
- faceSize / 2, faceSize, faceSize));
}
private void paintStoneNumber(Graphics2D g, int x, int y, int width,
int height, Color color, int v) {
int pos = y + (int) (TEXT_POS * height);
private void paintStoneNumber(Graphics2D g, Rectangle r, Color color, int v) {
int pos = r.y + (int) (TEXT_POS * r.height);
g.setFont(new Font("SansSerif", Font.BOLD, height / 4));
g.setFont(new Font("SansSerif", Font.BOLD, r.height / 4));
FontMetrics fm = g.getFontMetrics();
String value = Integer.toString(v);
Rectangle2D stringRect = fm.getStringBounds(value, g);
g.setColor(color.darker());
g.drawString(value, (int) (x + width / 2 - stringRect.getWidth() / 2) + 1,
g.drawString(value,
(int) (r.x + r.width / 2 - stringRect.getWidth() / 2) + 1,
pos + (fm.getAscent() - fm.getDescent()) / 2 + 1);
g.setColor(color);
g.drawString(value, (int) (x + width / 2 - stringRect.getWidth() / 2), pos
+ (fm.getAscent() - fm.getDescent()) / 2);
g.drawString(value, (int) (r.x + r.width / 2 - stringRect.getWidth() / 2),
pos + (fm.getAscent() - fm.getDescent()) / 2);
}
private void paintCircle(Graphics2D g, int x, int y, int width, int height,
Color background) {
int size = even(width * CIRCLE_WIDTH);
int pos = y + (int) (CIRCLE_POS * height);
private void paintCircle(Graphics2D g, Rectangle r, Color background) {
int size = even(r.width * CIRCLE_WIDTH);
int pos = r.y + (int) (CIRCLE_POS * r.height);
// Paint circle
g.setColor(background.darker());
g.drawArc(x + width / 2 - size / 2, pos - size / 2, size, size, 50, 170);
g.drawArc(r.x + r.width / 2 - size / 2, pos - size / 2, size, size, 50, 170);
g.setColor(brighter(background));
g.drawArc((int) (x + width / 2 - size / 2), pos - size / 2, size, size,
g.drawArc((int) (r.x + r.width / 2 - size / 2), pos - size / 2, size, size,
-130, 170);
}
@ -214,21 +213,21 @@ class StonePainter {
int width = getStoneWidth();
int height = getStoneHeight();
int x = (int) (p.getX() * width);
int y = (int) (p.getY() * height);
Rectangle rect = new Rectangle((int) (p.getX() * width),
(int) (p.getY() * height), width, height);
paintStoneBackground(g, x, y, width, height, background);
paintStoneBackground(g, rect, background);
Color color = getColor(stone.getColor());
if (selected)
color = color.darker();
if (stone.isJoker()) {
paintJoker(g, x, y, width, height, color);
paintJoker(g, rect, color);
} else {
paintStoneNumber(g, x, y, width, height, color, stone.getValue());
paintStoneNumber(g, rect, color, stone.getValue());
}
paintCircle(g, x, y, width, height, background);
paintCircle(g, rect, background);
}
}