1 /***
2 * Redistribution and use in source and binary forms, with or without
3 * modification, are permitted provided that the following conditions are
4 * met :
5 *
6 * . Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 *
9 * . Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * . The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $Id: LineDrawer.java 395 2005-12-31 04:05:41Z mat007 $
29 */
30
31 package palmed.edit;
32
33 import javax.microedition.lcdui.Graphics;
34 import palmed.edit.selection.ILineVisitor;
35
36 /***
37 * This class handles the mechanics of drawing a given line of text.
38 *
39 * @author Mathieu Champlon
40 * @version $Revision: 395 $ $Date: 2005-12-31 13:05:41 +0900 (sam., 31 déc. 2005) $
41 */
42 public final class LineDrawer implements ILineVisitor
43 {
44 /***
45 * The font.
46 */
47 private final IFont font_;
48 /***
49 * The current graphics context.
50 */
51 private Graphics graphics_;
52 /***
53 * The number of characters per line.
54 */
55 private final int width_;
56 /***
57 * The current line number.
58 */
59 private int y_;
60
61 /***
62 * Create a line drawer.
63 *
64 * @param font the font
65 * @param width the number of characters to draw on each line
66 */
67 public LineDrawer( final IFont font, final int width )
68 {
69 if( font == null )
70 throw new IllegalArgumentException( "parameter 'font' is null" );
71 font_ = font;
72 width_ = width;
73 }
74
75 /***
76 * Configure the drawer context.
77 *
78 * @param graphics the graphics context
79 * @param y the line number
80 */
81 public void configure( final Graphics graphics, final int y )
82 {
83 graphics_ = graphics;
84 y_ = y;
85 }
86
87 /***
88 * {@inheritDoc}
89 */
90 public void visit( final String text, final int start, final int end, final boolean continues )
91 {
92 font_.draw( graphics_, text, 0, Math.min( start, width_ ), y_ );
93 font_.drawSelection( graphics_, text, start, Math.min( end, width_ ), y_ );
94 if( continues )
95 font_.drawEmptySelection( graphics_, end, width_, y_ );
96 font_.draw( graphics_, text, end, Math.min( text.length(), width_ ), y_ );
97 }
98 }