You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/10/20 00:30:28 UTC
svn commit: r826843 - in /incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk:
skin/terra/TerraTextInputSkin.java text/TextNode.java
Author: gbrown
Date: Mon Oct 19 22:30:27 2009
New Revision: 826843
URL: http://svn.apache.org/viewvc?rev=826843&view=rev
Log:
Minor updates to TerraTextInputSkin; add a character iterator to TextNode.
Modified:
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/text/TextNode.java
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java?rev=826843&r1=826842&r2=826843&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java Mon Oct 19 22:30:27 2009
@@ -61,7 +61,7 @@
caretOn = !caretOn;
java.awt.Rectangle caretBounds = caretShapes[0].getBounds();
- LineMetrics lm = font.getLineMetrics("", fontRenderContext);
+ LineMetrics lm = font.getLineMetrics("", FONT_RENDER_CONTEXT);
int ascent = Math.round(lm.getAscent());
caretBounds.x += (padding.left - scrollLeft + 1);
@@ -106,8 +106,6 @@
}
- protected FontRenderContext fontRenderContext = new FontRenderContext(null, true, false);
-
private boolean caretOn = true;
private Shape[] caretShapes = null;
private Shape logicalHighlightShape = null;
@@ -145,6 +143,9 @@
private static final int SCROLL_RATE = 50;
+ private static final FontRenderContext FONT_RENDER_CONTEXT =
+ new FontRenderContext(null, true, false);
+
public TerraTextInputSkin() {
TerraTheme theme = (TerraTheme)Theme.getTheme();
font = theme.getFont();
@@ -194,7 +195,7 @@
// rather than calculating an average width
String testString = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
- Rectangle2D testStringBounds = font.getStringBounds(testString, fontRenderContext);
+ Rectangle2D testStringBounds = font.getStringBounds(testString, FONT_RENDER_CONTEXT);
int averageCharWidth = (int)Math.round((testStringBounds.getWidth() / testString.length()));
return textSize * averageCharWidth + (padding.left + padding.right) + 2;
@@ -202,7 +203,7 @@
@Override
public int getPreferredHeight(int width) {
- Rectangle2D maxCharBounds = font.getMaxCharBounds(fontRenderContext);
+ Rectangle2D maxCharBounds = font.getMaxCharBounds(FONT_RENDER_CONTEXT);
int maxCharHeight = (int)Math.ceil(maxCharBounds.getHeight());
return maxCharHeight + (padding.top + padding.bottom) + 2;
@@ -215,12 +216,7 @@
@Override
public int getBaseline(int width) {
- // Calculate the baseline of the text
- TextInput textInput = (TextInput)getComponent();
- String text = textInput.getText();
-
- // TODO Use a character iterator
- LineMetrics lm = font.getLineMetrics(text, fontRenderContext);
+ LineMetrics lm = font.getLineMetrics("", FONT_RENDER_CONTEXT);
return (int)Math.ceil(lm.getAscent() - 2) + (padding.top + 1);
}
@@ -291,19 +287,19 @@
boolean textValid = textInput.isTextValid();
- LineMetrics lm = font.getLineMetrics("", fontRenderContext);
+ LineMetrics lm = font.getLineMetrics("", FONT_RENDER_CONTEXT);
int ascent = Math.round(lm.getAscent());
graphics.translate(padding.left - scrollLeft + 1, padding.top + ascent + 1);
if (text.length() > 0) {
// Paint the text
- if (fontRenderContext.isAntiAliased()) {
+ if (FONT_RENDER_CONTEXT.isAntiAliased()) {
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
Platform.getTextAntialiasingHint());
}
- if (fontRenderContext.usesFractionalMetrics()) {
+ if (FONT_RENDER_CONTEXT.usesFractionalMetrics()) {
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
}
@@ -387,7 +383,7 @@
}
protected int getInsertionIndex(String text, int x) {
- TextLayout textLayout = new TextLayout(text, font, fontRenderContext);
+ TextLayout textLayout = new TextLayout(text, font, FONT_RENDER_CONTEXT);
TextHitInfo textHitInfo = textLayout.hitTestChar(x + scrollLeft - padding.left - 1, 0);
int index = textHitInfo.getInsertionIndex();
@@ -1238,7 +1234,7 @@
@Override
public void charactersRemoved(TextInput textInput, int index, int count) {
String text = getText();
- Rectangle2D textBounds = font.getStringBounds(text, fontRenderContext);
+ Rectangle2D textBounds = font.getStringBounds(text, FONT_RENDER_CONTEXT);
int textWidth = (int)textBounds.getWidth();
int width = getWidth();
@@ -1289,7 +1285,7 @@
int selectionStart = textInput.getSelectionStart();
int selectionLength = textInput.getSelectionLength();
- TextLayout textLayout = new TextLayout(text, font, fontRenderContext);
+ TextLayout textLayout = new TextLayout(text, font, FONT_RENDER_CONTEXT);
caretShapes = textLayout.getCaretShapes(selectionStart);
logicalHighlightShape = textLayout.getLogicalHighlightShape(selectionStart,
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/text/TextNode.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/text/TextNode.java?rev=826843&r1=826842&r2=826843&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/text/TextNode.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/text/TextNode.java Mon Oct 19 22:30:27 2009
@@ -16,12 +16,83 @@
*/
package org.apache.pivot.wtk.text;
+import java.text.CharacterIterator;
+
import org.apache.pivot.util.ListenerList;
/**
* Node representing a sequence of characters.
*/
public final class TextNode extends Node {
+ private class TextNodeCharacterIterator implements CharacterIterator {
+ private int index;
+
+ public TextNodeCharacterIterator() {
+ index = 0;
+ }
+
+ public TextNodeCharacterIterator(TextNodeCharacterIterator textNodeCharacterIterator) {
+ index = textNodeCharacterIterator.index;
+ }
+
+ @Override
+ public char first() {
+ return setIndex(getBeginIndex());
+ }
+
+ @Override
+ public char last() {
+ return setIndex(getCharacterCount() == 0 ? getEndIndex() : getEndIndex() - 1);
+ }
+
+ @Override
+ public char next() {
+ return setIndex(index < getCharacterCount() ? index + 1 : DONE);
+ }
+
+ @Override
+ public char previous() {
+ return setIndex(index > getBeginIndex() ? index - 1 : DONE);
+ }
+
+ @Override
+ public char current() {
+ return (index < getCharacterCount()) ? getCharacter(index) : DONE;
+ }
+
+ @Override
+ public int getBeginIndex() {
+ return 0;
+ }
+
+ @Override
+ public int getEndIndex() {
+ return getCharacterCount();
+ }
+
+ @Override
+ public int getIndex() {
+ return index;
+ }
+
+ @Override
+ public char setIndex(int index) {
+ if (index < 0
+ || index > getCharacterCount()) {
+ throw new IndexOutOfBoundsException();
+ }
+
+ this.index = index;
+
+ return current();
+ }
+
+ @Override
+ public Object clone() {
+ return new TextNodeCharacterIterator(this);
+ }
+ }
+
private static class TextNodeListenerList extends ListenerList<TextNodeListener>
implements TextNodeListener {
@Override
@@ -95,7 +166,6 @@
text = textBuilder.substring(start, end);
textBuilder.delete(start, end);
-
textNodeListeners.charactersRemoved(this, index, text);
rangeRemoved(index, count);
@@ -118,6 +188,10 @@
return textBuilder.length();
}
+ public CharacterIterator getCharacterIterator() {
+ return new TextNodeCharacterIterator();
+ }
+
public String getText() {
return textBuilder.toString();
}