1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43:
44: public final class LineBreakMeasurer
45: {
46: private AttributedCharacterIterator text;
47: private int position;
48: private TextMeasurer tm;
49: private int numChars;
50:
51: public LineBreakMeasurer(AttributedCharacterIterator text,
52: BreakIterator breakIter, FontRenderContext frc)
53: {
54: this( text, frc );
55: }
56:
57: public LineBreakMeasurer(AttributedCharacterIterator text,
58: FontRenderContext frc)
59: {
60: this.text = text;
61: position = 0;
62: numChars = text.getEndIndex();
63: tm = new TextMeasurer( text, frc );
64: }
65:
66: public void deleteChar(AttributedCharacterIterator newParagraph,
67: int deletePos)
68: {
69: tm.deleteChar( newParagraph, deletePos );
70: position = 0;
71: }
72:
73: public void insertChar(AttributedCharacterIterator newParagraph,
74: int insertPos)
75: {
76: tm.insertChar( newParagraph, insertPos );
77: position = 0;
78: }
79:
80: public TextLayout nextLayout(float wrappingWidth)
81: {
82: return nextLayout( wrappingWidth, numChars, false );
83: }
84:
85: public TextLayout nextLayout(float wrappingWidth, int offsetLimit,
86: boolean requireNextWord)
87: {
88: int next = nextOffset( wrappingWidth, offsetLimit, requireNextWord );
89: TextLayout tl = tm.getLayout( position, next );
90: position = next;
91: return tl;
92: }
93:
94: public int nextOffset(float wrappingWidth)
95: {
96: return nextOffset( wrappingWidth, numChars, false );
97: }
98:
99: public int nextOffset(float wrappingWidth, int offsetLimit,
100: boolean requireNextWord)
101: {
102: int guessOffset = tm.getLineBreakIndex(position, wrappingWidth);
103: if( offsetLimit > numChars )
104: offsetLimit = numChars;
105:
106: if( guessOffset > offsetLimit )
107: {
108: text.setIndex( offsetLimit );
109: return offsetLimit;
110: }
111:
112: text.setIndex( guessOffset );
113:
114:
115: if( Character.isWhitespace( text.current() ) )
116: return guessOffset;
117:
118:
119: if( !requireNextWord )
120: while( !Character.isWhitespace( text.previous() ) &&
121: guessOffset > position )
122: guessOffset--;
123: else
124: while( !Character.isWhitespace( text.next() ) &&
125: guessOffset < offsetLimit )
126: guessOffset++;
127:
128: if( guessOffset > offsetLimit )
129: {
130: text.setIndex( offsetLimit );
131: return offsetLimit;
132: }
133:
134: text.setIndex( guessOffset );
135:
136: return guessOffset;
137: }
138:
139: public void setPosition(int newPosition)
140: {
141: position = newPosition;
142: }
143:
144: public int getPosition()
145: {
146: return position;
147: }
148: }