KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jgoodies > animation > renderer > BasicTextRenderer


1 /*
2  * Copyright (c) 2001-2004 JGoodies Karsten Lentzsch. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * o Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  *
10  * o Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  *
14  * o Neither the name of JGoodies Karsten Lentzsch nor the names of
15  * its contributors may be used to endorse or promote products derived
16  * from this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */

30
31 package com.jgoodies.animation.renderer;
32
33 import java.awt.Graphics2D JavaDoc;
34
35
36 /**
37  * Renders a text with modifiable scaling, color, glyph spacing and position.
38  *
39  * @author Karsten Lentzsch
40  * @version $Revision: 1.4 $
41  */

42 public final class BasicTextRenderer extends AbstractTextRenderer {
43     
44     private float offsetX = 0.0f;
45     private float offsetY = 0.0f;
46     private float scaleX = 1.0f;
47     private float scaleY = 1.0f;
48     private float space = 0.0f;
49
50
51     /**
52      * Constructs a renderer for a text that can be scaled, moved, and
53      * change inter-glyph space.
54      *
55      * @param text the text to be displayed
56      */

57     public BasicTextRenderer(String JavaDoc text) { super(text); }
58     
59     
60     public float getOffsetX() { return offsetX; }
61     public float getOffsetY() { return offsetY; }
62     public float getSpace() { return space; }
63     public void setOffsetX(float offsetX){ this.offsetX = offsetX; }
64     public void setOffsetY(float offsetY){ this.offsetY = offsetY; }
65     public void setSpace(float space) { this.space = space; }
66     public float getScaleX() { return scaleX; }
67     public float getScaleY() { return scaleY; }
68     
69
70     public void setScaleX(float scaleX) {
71         if (scaleX <= 0.0f)
72             throw new IllegalArgumentException JavaDoc("scaleX must be positive.");
73             
74         this.scaleX = scaleX;
75     }
76
77     
78     public void setScaleY(float scaleY) {
79         if (scaleY <= 0.0f)
80             throw new IllegalArgumentException JavaDoc("scaleY must be positive.");
81             
82         this.scaleY = scaleY;
83     }
84
85
86     /**
87      * Renders the text. Firstly ensures a valid cache, then sets
88      * the color, and finally paints the cached glyph shapes.
89      *
90      * @param g2 the graphics context to render on
91      * @param width the width of the drawing surface
92      * @param height the height of the drawing surface
93      */

94     public void render(Graphics2D JavaDoc g2, int width, int height) {
95         ensureValidCache(g2);
96
97         int glyphCount = cachedGlyphShapes.length;
98         float totalSpace = (glyphCount - 1) * space;
99         float totalWidth = cachedTextWidth + totalSpace;
100         float textHeight = getAdjustedAscent();
101         float xOffset = getOffsetX() + (width - totalWidth * scaleX) / 2.0f;
102         float yOffset = getOffsetY() + (height + textHeight * scaleY) / 2.0f - getAdjustedDescent();
103         
104         g2.setColor(getColor());
105         g2.translate(xOffset, yOffset);
106         g2.scale(scaleX, scaleY);
107         for (int i = 0; i < glyphCount; i++) {
108             g2.fill(cachedGlyphShapes[i]);
109             g2.translate(space, 0);
110         }
111         g2.scale(1.0f / scaleX, 1.0f / scaleY);
112         g2.translate(-totalSpace -xOffset, -yOffset);
113     }
114     
115 }
Popular Tags