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 2017/12/05 23:42:58 UTC

svn commit: r1817251 - /pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java

Author: rwhitcomb
Date: Tue Dec  5 23:42:57 2017
New Revision: 1817251

URL: http://svn.apache.org/viewvc?rev=1817251&view=rev
Log:
PIVOT-891: Small updates to TerraTextInputSkin to have double click select
the word, and triple click select everything.  Essentially duplicate the
"selectSpan" method from TextArea skin.

Modified:
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java?rev=1817251&r1=1817250&r2=1817251&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java Tue Dec  5 23:42:57 2017
@@ -336,12 +336,12 @@ public class TerraTextInputSkin extends
         TextInput textInput = (TextInput) getComponent();
         int textSize = textInput.getTextSize();
 
-        return averageCharacterSize.width * textSize + (padding.left + padding.right) + 2;
+        return averageCharacterSize.width * textSize + padding.getWidth() + 2;
     }
 
     @Override
     public int getPreferredHeight(int width) {
-        return averageCharacterSize.height + (padding.top + padding.bottom) + 2;
+        return averageCharacterSize.height + padding.getHeight() + 2;
     }
 
     @Override
@@ -430,7 +430,7 @@ public class TerraTextInputSkin extends
             if (textWidth - scrollLeft + padding.left + 1 < width - padding.right - 1) {
                 // The right edge of the text is less than the right inset;
                 // align the text's right edge with the inset
-                scrollLeft = Math.max(textWidth + (padding.left + padding.right + 2) - width, 0);
+                scrollLeft = Math.max(textWidth + padding.getWidth() + 2 - width, 0);
             } else {
                 // Scroll selection start to visible
                 int selectionStart = textInput.getSelectionStart();
@@ -460,7 +460,7 @@ public class TerraTextInputSkin extends
             case CENTER: {
                 TextInput textInput = (TextInput) getComponent();
                 int txtWidth = getTextWidth(textLayout);
-                int availWidth = textInput.getWidth() - (padding.left + padding.right + 2);
+                int availWidth = textInput.getWidth() - (padding.getWidth() + 2);
                 alignmentDeltaX = (availWidth - txtWidth) / 2;
                 break;
             }
@@ -468,7 +468,7 @@ public class TerraTextInputSkin extends
                 TextInput textInput = (TextInput) getComponent();
                 int txtWidth = getTextWidth(textLayout);
                 int availWidth = textInput.getWidth()
-                    - (padding.left + padding.right + 2 + caret.width);
+                    - (padding.getWidth() + 2 + caret.width);
                 alignmentDeltaX = (availWidth - txtWidth);
                 break;
             }
@@ -673,7 +673,7 @@ public class TerraTextInputSkin extends
             }
 
             characterBounds = new Bounds(x + padding.left - scrollLeft + 1 + getAlignmentDeltaX(textLayout),
-                padding.top + 1, width, getHeight() - (padding.top + padding.bottom + 2));
+                padding.top + 1, width, getHeight() - (padding.getHeight() + 2));
         }
 
         return characterBounds;
@@ -695,7 +695,7 @@ public class TerraTextInputSkin extends
             if (characterBounds.x < padding.left + 1) {
                 setScrollLeft(glyphX);
             } else if (characterBounds.x + characterBounds.width > width - (padding.right + 1)) {
-                setScrollLeft(glyphX + (padding.left + padding.right + 2) + characterBounds.width - width);
+                setScrollLeft(glyphX + (padding.getWidth() + 2) + characterBounds.width - width);
             }
         }
     }
@@ -724,14 +724,10 @@ public class TerraTextInputSkin extends
     }
 
     public final void setFont(String font) {
-        Utils.checkNull(font, "font");
-
         setFont(decodeFont(font));
     }
 
     public final void setFont(Dictionary<String, ?> font) {
-        Utils.checkNull(font, "font");
-
         setFont(Theme.deriveFont(font));
     }
 
@@ -1141,13 +1137,69 @@ public class TerraTextInputSkin extends
         return consumed;
     }
 
+    private void selectSpan(TextInput textInput, int start) {
+        int length = textInput.getCharacterCount();
+        if (start >= length) {
+            start = length - 1;
+            if (start < 0) {
+                return;
+            }
+            char ch = textInput.getCharacterAt(start);
+            if (ch == '\r' || ch == '\n') {
+                start--;
+            }
+        }
+        if (start < 0) {
+            return;
+        }
+        char ch = textInput.getCharacterAt(start);
+        int selectionStart = start;
+        int selectionLength = 1;
+        if (Character.isWhitespace(ch)) {
+            // Move backward to beginning of whitespace block
+            // but not before the beginning of the text.
+            do {
+                selectionStart--;
+            } while (selectionStart >= 0
+                && Character.isWhitespace(textInput.getCharacterAt(selectionStart)));
+            selectionStart++;
+            selectionLength = start - selectionStart;
+            // Move forward to end of whitespace block
+            // but not past the end of the text.
+            do {
+                selectionLength++;
+            } while (selectionStart + selectionLength < length
+                && Character.isWhitespace(textInput.getCharacterAt(selectionStart + selectionLength)));
+        } else if (Character.isJavaIdentifierPart(ch)) {
+            // Move backward to beginning of identifier block
+            do {
+                selectionStart--;
+            } while (selectionStart >= 0
+                && Character.isJavaIdentifierPart(textInput.getCharacterAt(selectionStart)));
+            selectionStart++;
+            selectionLength = start - selectionStart;
+            // Move forward to end of identifier block
+            // but not past end of text.
+            do {
+                selectionLength++;
+            } while (selectionStart + selectionLength < length
+                && Character.isJavaIdentifierPart(textInput.getCharacterAt(selectionStart
+                    + selectionLength)));
+        } else {
+            return;
+        }
+        textInput.setSelection(selectionStart, selectionLength);
+    }
+
     @Override
     public boolean mouseClick(Component component, Mouse.Button button, int x, int y, int count) {
         if (button == Mouse.Button.LEFT && count > 1) {
-            // TODO: double click to select the current word, triple click to select all
-            // (like TextArea and TextPane now)
             TextInput textInput = (TextInput) getComponent();
-            textInput.selectAll();
+            if (count == 2) {
+                selectSpan(textInput, getInsertionPoint(x));
+            } else if (count == 3) {
+                textInput.selectAll();
+            }
         }
 
         return super.mouseClick(component, button, x, y, count);