001: /*=============================================================================
002: * Copyright Texas Instruments 2002. All Rights Reserved.
003: *
004: * This program is free software; you can redistribute it and/or modify
005: * it under the terms of the GNU General Public License as published by
006: * the Free Software Foundation; either version 2 of the License, or
007: * (at your option) any later version.
008: *
009: * This program is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012: * GNU General Public License for more details.
013: *
014: * You should have received a copy of the GNU General Public License
015: * along with this program; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018:
019: package ti.swing.console;
020:
021: import java.awt.*;
022:
023: /**
024: * Sorta like java.awt.Graphics, except that it is tailored to drawing text.
025: * You can set an inverse attribute, a background color, a foreground color.
026: * When drawing text, the background is cleared to the bg color. Text is
027: * always draw as monospace, extra padding inserted as needed. Also,
028: * {@link #clearRect} clears to the bg color.
029: *
030: * @author Rob Clark
031: * @version 0.1
032: */
033: public class ConsoleGraphics {
034: private Graphics g;
035: private Color bgColor;
036: private Color fgColor;
037: private boolean inverse = false;
038:
039: /**
040: * Class Constructor.
041: *
042: * @param g the actual Graphics implementation
043: */
044: public ConsoleGraphics(Graphics g) {
045: this .g = g;
046:
047: setColor(Color.lightGray);
048: setBackgroundColor(Color.black);
049: }
050:
051: /**
052: */
053: public void toggleInverse() {
054: inverse = !inverse;
055: }
056:
057: /**
058: */
059: public Color getBackgroundColor() {
060: return bgColor;
061: }
062:
063: private final Color bgColor() {
064: if (inverse)
065: return fgColor;
066: else
067: return bgColor;
068: }
069:
070: /**
071: */
072: public void setBackgroundColor(Color bgColor) {
073: this .bgColor = bgColor;
074: }
075:
076: /**
077: */
078: public Color getColor() {
079: return fgColor;
080: }
081:
082: private final Color fgColor() {
083: if (inverse)
084: return bgColor;
085: else
086: return fgColor;
087: }
088:
089: /**
090: */
091: public void setColor(Color fgColor) {
092: this .fgColor = fgColor;
093: }
094:
095: /**
096: */
097: public void clearRect(int x, int y, int width, int height) {
098: g.setColor(bgColor());
099: g.fillRect(x, y, width, height);
100: g.setColor(fgColor());
101: }
102:
103: /**
104: * upper-left corner to draw is at x,y, rather than the baseline... also
105: * clears background as it draws...
106: */
107: public void drawString(String str, int x, int y) {
108: Font f = g.getFont();
109: FontMetrics fm = g.getFontMetrics(f);
110:
111: g.setColor(bgColor());
112: g.fillRect(x, y, fm.stringWidth(str), fm.getHeight());
113: g.setColor(fgColor());
114: g.drawString(str, x, y + (fm.getHeight() - fm.getDescent()));
115: }
116:
117: /**
118: */
119: public void setFont(Font f) {
120: g.setFont(f);
121: }
122:
123: /**
124: */
125: public Font getFont() {
126: return g.getFont();
127: }
128: }
129:
130: /*
131: * Local Variables:
132: * tab-width: 2
133: * indent-tabs-mode: nil
134: * mode: java
135: * c-indentation-style: java
136: * c-basic-offset: 2
137: * eval: (c-set-offset 'substatement-open '0)
138: * eval: (c-set-offset 'case-label '+)
139: * eval: (c-set-offset 'inclass '+)
140: * eval: (c-set-offset 'inline-open '0)
141: * End:
142: */
|