Mercurial > hg > ristipolku
view game/IDMButton.java @ 58:cde170f2f980
Clean up the piece rendering.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 23 Feb 2011 21:43:07 +0200 |
parents | f81f76458b92 |
children | bca0112851d6 |
line wrap: on
line source
/* * Ristipolku IDM button widget * (C) Copyright 2011 Matti 'ccr' Hämäläinen <ccr@tnsp.org> */ package game; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.awt.geom.*; import javax.imageio.*; import java.io.*; public class IDMButton extends IDMWidget { enum State { FOCUSED, PRESSED, NORMAL } State state; static BufferedImage imgUp, imgPressed; Font font; FontMetrics metrics; String text; boolean active; public IDMButton(IDMPoint pos, int keyCode, Font font, String text) { loadImages(); this.pos = pos; this.font = font; this.keyCode = keyCode; this.text = text; state = State.NORMAL; active = false; } public IDMButton(float x, float y, int keyCode, Font font, String text) { this(new IDMPoint(x, y), keyCode, font, text); } private static void loadImages() { try { ResourceLoader res = new ResourceLoader("graphics/button1_up.png"); imgUp = ImageIO.read(res.getStream()); res = new ResourceLoader("graphics/button1_down.png"); imgPressed = ImageIO.read(res.getStream()); } catch (IOException e) { System.out.print(e.getMessage()); } } public void paint(Graphics2D g) { BufferedImage img; int xoffs, yoffs; if (state == State.PRESSED) { img = imgPressed; xoffs = yoffs = 5; } else { xoffs = yoffs = 0; img = imgUp; } if (metrics == null) metrics = g.getFontMetrics(font); int textWidth = metrics.stringWidth(text); g.drawImage(img, getScaledX() + xoffs, getScaledY() + yoffs, null); g.setFont(font); g.setPaint(Color.black); g.drawString(text, getScaledX() + xoffs * 2 + (img.getWidth() - textWidth) / 2, getScaledY() + yoffs * 2 + img.getHeight() / 2); } public boolean contains(Point where) { return (where.x >= getScaledX() && where.y >= getScaledY() && where.x < getScaledX() + imgUp.getWidth() && where.y < getScaledY() + imgUp.getHeight()); } public void mousePressed(MouseEvent e) { state = State.PRESSED; active = true; } public void mouseReleased(MouseEvent e) { super.mouseReleased(e); state = State.NORMAL; active = false; } public void mouseEntered(MouseEvent e) { if (active) state = State.PRESSED; } public void mouseExited(MouseEvent e) { if (active) state = State.NORMAL; } }