You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by rw...@apache.org on 2013/09/14 20:26:10 UTC
svn commit: r1523284 -
/pivot/branches/2.0.x/wtk/src/org/apache/pivot/wtk/TextPane.java
Author: rwhitcomb
Date: Sat Sep 14 18:26:10 2013
New Revision: 1523284
URL: http://svn.apache.org/r1523284
Log:
Small tweak to TextPane to allow insert at the end of a paragraph to add to
a TextNode that is positioned there, instead of always creating a new TextNode.
This allows a bit more efficiency when doing things like syntax coloring of
a document.
Modified:
pivot/branches/2.0.x/wtk/src/org/apache/pivot/wtk/TextPane.java
Modified: pivot/branches/2.0.x/wtk/src/org/apache/pivot/wtk/TextPane.java
URL: http://svn.apache.org/viewvc/pivot/branches/2.0.x/wtk/src/org/apache/pivot/wtk/TextPane.java?rev=1523284&r1=1523283&r2=1523284&view=diff
==============================================================================
--- pivot/branches/2.0.x/wtk/src/org/apache/pivot/wtk/TextPane.java (original)
+++ pivot/branches/2.0.x/wtk/src/org/apache/pivot/wtk/TextPane.java Sat Sep 14 18:26:10 2013
@@ -371,6 +371,18 @@ public class TextPane extends Container
}
}
+ private Node getRightmostDescendant(Element element) {
+ int n = element.getLength();
+ if (n > 0) {
+ Node node = element.get(n - 1);
+ if (node instanceof Element) {
+ return getRightmostDescendant((Element)node);
+ }
+ return node;
+ }
+ return element;
+ }
+
public void insert(char character) {
// TODO Don't make every character undoable; break at word boundaries?
@@ -405,19 +417,18 @@ public class TextPane extends Container
textNode.insertText(text, offset);
} else if (descendant instanceof Paragraph) {
// The caret is positioned on the paragraph terminator
+ // so get to the bottom rightmost descendant and add there
Paragraph paragraph = (Paragraph)descendant;
- int n = paragraph.getLength();
- if (n > 0) {
- Node node = paragraph.get(n - 1);
- if (node instanceof TextNode) {
- // Insert the text into the existing node
- TextNode textNode = (TextNode)node;
- textNode.insertText(text, offset - textNode.getOffset());
- } else {
- // Append a new text node
- paragraph.add(new TextNode(text));
- }
+ Node node = getRightmostDescendant(paragraph);
+ if (node instanceof TextNode) {
+ // Insert the text into the existing node
+ TextNode textNode = (TextNode)node;
+ textNode.insertText(text, selectionStart - textNode.getDocumentOffset());
+ } else if (node instanceof Element) {
+ // Append a new text node
+ Element element = (Element)node;
+ element.add(new TextNode(text));
} else {
// The paragraph is currently empty
paragraph.add(new TextNode(text));