Mercurial > hg > ristipolku
view game/IDMWidget.java @ 171:5070e57ebbfc
Move text drawing stuff to IDMWidget class.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 06 Mar 2017 10:19:04 +0200 |
parents | b9bc493ae53c |
children | 55ea5821c802 |
line wrap: on
line source
/* * Ristipolku IDM base widget * (C) Copyright 2011 Matti 'ccr' Hämäläinen <ccr@tnsp.org> */ package game; import java.awt.*; import java.awt.event.*; public class IDMWidget { IDMWidget parent; IDMPoint pos, size, scale; int keyCode; IDMPoint textCurrPos, textCurrOffs; Paint textPaint; Font textFont; FontMetrics textMetrics; public IDMWidget() { keyCode = -1; this.scale = new IDMPoint(1, 1); this.pos = new IDMPoint(0, 0); this.size = new IDMPoint(0, 0); } public IDMWidget(IDMPoint pos) { this(); this.pos = pos; } public IDMWidget(IDMPoint pos, IDMPoint size) { this(); this.pos = pos; this.size = size; } public void setParent(IDMWidget par) { this.parent = par; } public void add(IDMWidget widget) { } public void remove(IDMWidget widget) { } public void setPos(IDMPoint pos) { this.pos = pos; } public void setPos(float x, float y) { this.pos = new IDMPoint(x, y); } public void setSize(IDMPoint size) { this.size = size; } public void setSize(float w, float h) { this.size = new IDMPoint(w, h); } public void setScale(IDMPoint scale) { this.scale = scale; } public void setScale(float x, float y) { this.setScale(new IDMPoint(x, y)); } public int getScaledX() { return (int) (pos.x * scale.x); } public int getScaledY() { return (int) (pos.y * scale.y); } public int getScaledX(float x) { return (int) (x * scale.x); } public int getScaledY(float y) { return (int) (y * scale.y); } public int getScaledRelX(float x) { return (int) ((pos.x + x) * scale.x); } public int getScaledRelY(float y) { return (int) ((pos.y + y) * scale.y); } public int getScaledWidth() { return (int) (size.x * scale.x); } public int getScaledHeight() { return (int) (size.y * scale.y); } public boolean contains(float x, float y) { return (x >= getScaledX() && y >= getScaledY() && x < getScaledX() + getScaledWidth() && y < getScaledY() + getScaledHeight()); } public boolean contains(Point where) { return contains(where.x, where.y); } public boolean contains(IDMPoint where) { return contains(where.x, where.y); } public void paint(Graphics2D g) { } public boolean mousePressed(MouseEvent e) { return false; } public boolean mouseReleased(MouseEvent e) { if (contains(e.getPoint())) { clicked(); return true; } return false; } public boolean mouseEntered(MouseEvent e) { return false; } public boolean mouseExited(MouseEvent e) { return false; } // Generic key handler public boolean keyPressed(KeyEvent e) { if (e.getKeyCode() == keyCode) { clicked(); return true; } else return false; } public void clicked() { } public void setTextFont(Font font, FontMetrics metrics) { textFont = font; textMetrics = metrics; } public void setTextPaint(Paint paint) { textPaint = paint; } public void setCurrPos(IDMPoint npos) { textCurrPos = npos; textCurrOffs = new IDMPoint(0, 0); } public void setCurrPos(float x, float y) { setCurrPos(new IDMPoint(x, y)); } public void setCurrPosScaledRel(float x, float y) { setCurrPos(new IDMPoint(getScaledRelX(x), getScaledRelY(y))); } public void drawString(Graphics2D g, String text) { Paint savePaint = g.getPaint(); g.setPaint(textPaint); g.setFont(textFont); int i = 0; while (i < text.length()) { int p = text.indexOf("\n", i); boolean linefeed; String str; if (p >= i) { str = text.substring(i, p); i = p + 1; linefeed = true; } else { str = text.substring(i); i += str.length(); linefeed = false; } g.drawString(str, textCurrPos.x + textCurrOffs.x, textCurrPos.y + textCurrOffs.y); if (linefeed) { textCurrOffs.x = 0; textCurrOffs.y += textMetrics.getHeight(); } else { textCurrOffs.x += textMetrics.stringWidth(str); } } g.setPaint(savePaint); } }