2 *******************************************************************************
\r
3 * Copyright (C) 1997-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.demo.impl;
\r
10 import java.awt.FontMetrics;
\r
11 import java.awt.Graphics;
\r
12 import java.text.BreakIterator;
\r
14 public class DemoTextBox {
\r
16 public DemoTextBox(Graphics g, String text, int width)
\r
19 this.chars = new char[text.length()];
\r
20 text.getChars(0, text.length(), chars, 0);
\r
24 this.metrics = g.getFontMetrics();
\r
29 public int getHeight() {
\r
30 return (nbreaks + 1) * metrics.getHeight();
\r
33 public void draw(Graphics g, int x, int y)
\r
37 y += metrics.getAscent();
\r
39 for (int i = 0; i < nbreaks; i++)
\r
41 g.drawChars(chars, index, breakPos[i] - index, x, y);
\r
42 index = breakPos[i];
\r
43 y += metrics.getHeight();
\r
46 g.drawChars(chars, index, chars.length - index, x, y);
\r
50 private void breakText()
\r
52 if (metrics.charsWidth(chars, 0, chars.length) > width)
\r
54 BreakIterator iter = BreakIterator.getWordInstance();
\r
57 int start = iter.first();
\r
61 while ( (pos = iter.next()) != BreakIterator.DONE )
\r
63 int w = metrics.charsWidth(chars, start, pos - start);
\r
66 // We've gone past the maximum width, so break the line
\r
68 // There was at least one break position before this point
\r
69 breakPos[nbreaks++] = end;
\r
73 // There weren't any break positions before this one, so
\r
74 // let this word overflow the margin (yuck)
\r
75 breakPos[nbreaks++] = pos;
\r
79 // the current position still fits on the line; it's the best
\r
80 // tentative break position we have so far.
\r
88 private String text;
\r
89 private char[] chars;
\r
90 // private Graphics port;
\r
91 private FontMetrics metrics;
\r
94 private int[] breakPos = new int[10]; // TODO: get real
\r
95 private int nbreaks = 0;
\r