Rescale collection; add bottom margin to table for collection

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@99 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-05-03 21:55:14 +02:00
parent 51f70cafe3
commit a274c2b02e
2 changed files with 67 additions and 48 deletions

View file

@ -22,7 +22,6 @@ import jrummikub.view.IStoneCollectionPanel;
class StoneCollectionPanel extends AbstractStonePanel implements
IStoneCollectionPanel {
private final static int INSET = 7;
private final static float STONE_SCALE = 1.1f;
private Collection<Stone> selectedStones = Collections.emptyList();
@ -30,13 +29,29 @@ class StoneCollectionPanel extends AbstractStonePanel implements
* Creates a new StoneCollection instance
*/
StoneCollectionPanel() {
super(STONE_SCALE);
setOpaque(false);
setVisible(false);
setBorder(new EmptyBorder(INSET, INSET, INSET, INSET));
}
private void rescale() {
setSize(getStonePainter().getStoneWidth() * selectedStones.size() + 2
* INSET, getStonePainter().getStoneHeight() + 2 * INSET);
}
/**
* Sets the height to paint the collected stones in
*
* @param height
* the height in pixels
*/
void setStoneHeight(int height) {
getStonePainter().setScale(height * StonePainter.HEIGHT_SCALE);
rescale();
repaint();
}
/**
* Sets the stones to be shown in the collection
*
@ -59,8 +74,7 @@ class StoneCollectionPanel extends AbstractStonePanel implements
if (selectedStones.isEmpty()) {
setVisible(false);
} else {
setSize(getStonePainter().getStoneWidth() * selectedStones.size() + 2
* INSET, getStonePainter().getStoneHeight() + 2 * INSET);
rescale();
setVisible(true);
repaint();

View file

@ -39,6 +39,7 @@ class TablePanel extends AbstractStonePanel implements ITablePanel {
private final static float HORIZONTAL_MARGIN = 1.5f;
private final static float VERTICAL_MARGIN = 1;
private final static float CONNECTOR_WIDTH = 0.25f;
private final float COLLECTION_RATIO = 0.1f;
private final int COLLECTION_GAP = 5;
private JLabel leftPlayerLabel, topPlayerLabel, rightPlayerLabel;
@ -111,6 +112,46 @@ class TablePanel extends AbstractStonePanel implements ITablePanel {
repaint();
}
/**
* Creates a new Table instance
*/
TablePanel() {
setLayout(null);
leftPlayerLabel = new JLabel();
leftPlayerLabel.setForeground(Color.WHITE);
leftPlayerLabel.setHorizontalAlignment(JLabel.LEFT);
leftPlayerLabel.setHorizontalTextPosition(JLabel.LEFT);
add(leftPlayerLabel);
topPlayerLabel = new JLabel();
topPlayerLabel.setHorizontalAlignment(JLabel.CENTER);
topPlayerLabel.setHorizontalTextPosition(JLabel.CENTER);
topPlayerLabel.setVerticalAlignment(JLabel.TOP);
topPlayerLabel.setVerticalTextPosition(JLabel.TOP);
topPlayerLabel.setForeground(Color.WHITE);
add(topPlayerLabel);
rightPlayerLabel = new JLabel();
rightPlayerLabel.setForeground(Color.WHITE);
rightPlayerLabel.setHorizontalAlignment(JLabel.RIGHT);
rightPlayerLabel.setHorizontalTextPosition(JLabel.RIGHT);
add(rightPlayerLabel);
stoneCollection = new StoneCollectionPanel();
add(stoneCollection);
ComponentListener rescaleListener = new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
rescale();
}
};
addComponentListener(rescaleListener);
stoneCollection.addComponentListener(rescaleListener);
}
private Rectangle2D calculateTableExtent() {
float minx = -MIN_VISIBLE_WIDTH / 2, maxx = MIN_VISIBLE_WIDTH / 2;
float miny = -MIN_VISIBLE_HEIGHT / 2, maxy = MIN_VISIBLE_HEIGHT / 2;
@ -153,54 +194,16 @@ class TablePanel extends AbstractStonePanel implements ITablePanel {
float widthScale = width / (float) extent.getWidth()
* StonePainter.WIDTH_SCALE;
float heightScale = height / (float) extent.getHeight()
* StonePainter.HEIGHT_SCALE;
float heightScale = height * (1 - COLLECTION_RATIO)
/ (float) extent.getHeight() * StonePainter.HEIGHT_SCALE;
getStonePainter().setScale(Math.min(widthScale, heightScale));
stoneCollection.setStoneHeight((int) (height * COLLECTION_RATIO));
repaint();
}
/**
* Creates a new Table instance
*/
TablePanel() {
setLayout(null);
leftPlayerLabel = new JLabel();
leftPlayerLabel.setForeground(Color.WHITE);
leftPlayerLabel.setHorizontalAlignment(JLabel.LEFT);
leftPlayerLabel.setHorizontalTextPosition(JLabel.LEFT);
add(leftPlayerLabel);
topPlayerLabel = new JLabel();
topPlayerLabel.setHorizontalAlignment(JLabel.CENTER);
topPlayerLabel.setHorizontalTextPosition(JLabel.CENTER);
topPlayerLabel.setVerticalAlignment(JLabel.TOP);
topPlayerLabel.setVerticalTextPosition(JLabel.TOP);
topPlayerLabel.setForeground(Color.WHITE);
add(topPlayerLabel);
rightPlayerLabel = new JLabel();
rightPlayerLabel.setForeground(Color.WHITE);
rightPlayerLabel.setHorizontalAlignment(JLabel.RIGHT);
rightPlayerLabel.setHorizontalTextPosition(JLabel.RIGHT);
add(rightPlayerLabel);
stoneCollection = new StoneCollectionPanel();
add(stoneCollection);
ComponentListener rescaleListener = new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
rescale();
}
};
addComponentListener(rescaleListener);
stoneCollection.addComponentListener(rescaleListener);
}
protected boolean handleOtherClickEvent(Position pos) {
for (Map.Entry<StoneSet, Position> entry : stoneSets.entrySet()) {
Position p = entry.getValue();
@ -235,7 +238,9 @@ class TablePanel extends AbstractStonePanel implements ITablePanel {
Rectangle2D extent = calculateTableExtent();
return new Pair<Integer, Integer>((int) (width / 2 - extent.getCenterX()
* stoneWidth), (int) (height / 2 - extent.getCenterY() * stoneHeight));
* stoneWidth),
(int) ((height * (1 - COLLECTION_RATIO)) / 2 - extent.getCenterY()
* stoneHeight));
}
private void paintStoneSet(Graphics2D g, StoneSet stoneSet, Position pos) {