You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by no...@apache.org on 2011/04/28 18:02:08 UTC

svn commit: r1097519 - /pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/

Author: noelgrandin
Date: Thu Apr 28 16:02:08 2011
New Revision: 1097519

URL: http://svn.apache.org/viewvc?rev=1097519&view=rev
Log:
fix similar problem in TextPane to the one in TextArea reported in PIVOT-735

Modified:
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinBulletedListView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinDocumentView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinSpanView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinVerticalElementView.java

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java Thu Apr 28 16:02:08 2011
@@ -187,7 +187,8 @@ public class TextPaneSkin extends Contai
         if (documentView == null) {
            preferredWidth = 0;
         } else {
-            documentView.validate(Integer.MAX_VALUE);
+            documentView.setBreakWidth(Integer.MAX_VALUE);
+            documentView.validate();
 
             preferredWidth = documentView.getWidth() + margin.left + margin.right;
         }
@@ -210,7 +211,8 @@ public class TextPaneSkin extends Contai
                 breakWidth = Integer.MAX_VALUE;
             }
 
-            documentView.validate(breakWidth);
+            documentView.setBreakWidth(breakWidth);
+            documentView.validate();
 
             preferredHeight = documentView.getHeight() + margin.top + margin.bottom;
         }
@@ -227,7 +229,8 @@ public class TextPaneSkin extends Contai
            preferredWidth = 0;
            preferredHeight = 0;
         } else {
-            documentView.validate(Integer.MAX_VALUE);
+            documentView.setBreakWidth(Integer.MAX_VALUE);
+            documentView.validate();
 
             preferredWidth = documentView.getWidth() + margin.left + margin.right;
             preferredHeight = documentView.getHeight() + margin.top + margin.bottom;
@@ -256,7 +259,8 @@ public class TextPaneSkin extends Contai
             } else {
                 breakWidth = Integer.MAX_VALUE;
             }
-            documentView.validate(breakWidth);
+            documentView.setBreakWidth(breakWidth);
+            documentView.validate();
             documentView.setSkinLocation(margin.left, margin.top);
 
             updateSelection();
@@ -286,6 +290,16 @@ public class TextPaneSkin extends Contai
                 graphics.fill(selection);
             }
 
+            int width = getWidth();
+            int breakWidth;
+            if (wrapText) {
+                breakWidth = Math.max(width - (margin.left + margin.right), 0);
+            } else {
+                breakWidth = Integer.MAX_VALUE;
+            }
+            documentView.setBreakWidth(breakWidth);
+            documentView.validate();
+
             // Draw the document content
             graphics.translate(margin.left, margin.top);
             documentView.paint(graphics);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinBulletedListView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinBulletedListView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinBulletedListView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinBulletedListView.java Thu Apr 28 16:02:08 2011
@@ -42,7 +42,7 @@ class TextPaneSkinBulletedListView exten
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
 
             BulletedList bulletedList = (BulletedList)getNode();
@@ -67,7 +67,7 @@ class TextPaneSkinBulletedListView exten
                     listItemView.getIndexTextWidth());
             }
 
-            super.validate(breakWidth);
+            super.validate();
         }
     }
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java Thu Apr 28 16:02:08 2011
@@ -60,7 +60,7 @@ class TextPaneSkinComponentNodeView exte
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
             ComponentNode componentNode = (ComponentNode) getNode();
             Component component = componentNode.getComponent();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinDocumentView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinDocumentView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinDocumentView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinDocumentView.java Thu Apr 28 16:02:08 2011
@@ -41,9 +41,9 @@ class TextPaneSkinDocumentView extends T
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
-            verticalValidate(breakWidth);
+            verticalValidate();
             super.validateComplete();
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java Thu Apr 28 16:02:08 2011
@@ -52,7 +52,7 @@ class TextPaneSkinImageNodeView extends 
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
             ImageNode imageNode = (ImageNode)getNode();
             Image image = imageNode.getImage();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java Thu Apr 28 16:02:08 2011
@@ -43,15 +43,18 @@ class TextPaneSkinListItemView extends T
 
     public void setIndexText(String indexText) {
         indexTextNode.setText(indexText);
-        indexTextNodeView.validate(Integer.MAX_VALUE);
+        indexTextNodeView.setBreakWidth(Integer.MAX_VALUE);
+        indexTextNodeView.validate();
         indexTextNodeView.setLocation(0, 0);
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
+            int breakWidth = getBreakWidth();
 
-            indexTextNodeView.validate(breakWidth);
+            indexTextNodeView.setBreakWidth(breakWidth);
+            indexTextNodeView.validate();
             indexTextNodeView.setLocation(0, 0);
 
             breakWidth -= indexTextNodeView.getWidth();
@@ -64,7 +67,8 @@ class TextPaneSkinListItemView extends T
 
             for ( ; iterator.hasNext(); ) {
                 TextPaneSkinNodeView nodeView = iterator.next();
-                nodeView.validate(breakWidth);
+                nodeView.setBreakWidth(breakWidth);
+                nodeView.validate();
 
                 nodeView.setLocation(indexTextNodeView.getWidth(), itemsY);
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListView.java Thu Apr 28 16:02:08 2011
@@ -31,9 +31,9 @@ class TextPaneSkinListView extends TextP
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
-            verticalValidate(breakWidth);
+            verticalValidate();
             super.validateComplete();
         }
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java Thu Apr 28 16:02:08 2011
@@ -39,6 +39,8 @@ abstract class TextPaneSkinNodeView impl
     private int x = 0;
     private int y = 0;
 
+    private int breakWidth = -1;
+
     private boolean valid = false;
 
     public TextPaneSkinNodeView(Node node) {
@@ -160,7 +162,25 @@ abstract class TextPaneSkinNodeView impl
         valid = true;
     }
 
-    public abstract void validate(int breakWidth);
+    public abstract void validate();
+
+    public int getBreakWidth() {
+        return breakWidth;
+    }
+
+    public void setBreakWidth(int breakWidth) {
+        int previousBreakWidth = this.breakWidth;
+
+        if (previousBreakWidth != breakWidth) {
+            this.breakWidth = breakWidth;
+
+            // NOTE We can't call invalidate() here because it would ultimately
+            // trigger a call to invalidateComponent(), which we don't want; this method
+            // is called during preferred size calculations as well as layout, neither
+            // of which should ever trigger an invalidate.
+            valid = false;
+        }
+    }
 
     public int getOffset() {
         return node.getOffset();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java Thu Apr 28 16:02:08 2011
@@ -89,7 +89,7 @@ class TextPaneSkinNumberedListView exten
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
 
             NumberedList numberedList = (NumberedList)getNode();
@@ -126,7 +126,7 @@ class TextPaneSkinNumberedListView exten
                     listItemView.getIndexTextWidth());
             }
 
-            super.validate(breakWidth);
+            super.validate();
         }
     }
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java Thu Apr 28 16:02:08 2011
@@ -63,18 +63,20 @@ class TextPaneSkinParagraphView extends 
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
             // Break the views into multiple rows
 
             Paragraph paragraph = (Paragraph)getNode();
             rows = new ArrayList<Row>();
             int offset = 0;
+            int breakWidth = getBreakWidth();
 
             Row row = new Row();
             for (TextPaneSkinNodeView nodeView : this) {
-                nodeView.validate(Math.max(breakWidth - (row.width
+                nodeView.setBreakWidth(Math.max(breakWidth - (row.width
                         + PARAGRAPH_TERMINATOR_WIDTH), 0));
+                nodeView.validate();
 
                 int nodeViewWidth = nodeView.getWidth();
 
@@ -99,7 +101,8 @@ class TextPaneSkinParagraphView extends 
                     rows.add(row);
                     row = new Row();
 
-                    nodeView.validate(breakWidth);
+                    nodeView.setBreakWidth(breakWidth);
+                    nodeView.validate();
 
                     row.rowSegments.add(new RowSegment(nodeView, offset));
                     offset += nodeView.getCharacterCount();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinSpanView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinSpanView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinSpanView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinSpanView.java Thu Apr 28 16:02:08 2011
@@ -44,7 +44,7 @@ class TextPaneSkinSpanView extends TextP
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
 
         if (!isValid()) {
 
@@ -52,7 +52,8 @@ class TextPaneSkinSpanView extends TextP
                 setSize(0, 0);
             } else {
                 TextPaneSkinNodeView nodeView = get(0);
-                nodeView.validate(breakWidth);
+                nodeView.setBreakWidth(getBreakWidth());
+                nodeView.validate();
 
                 setSize(nodeView.getWidth(), nodeView.getHeight());
             }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java Thu Apr 28 16:02:08 2011
@@ -84,10 +84,11 @@ class TextPaneSkinTextNodeView extends T
     }
 
     @Override
-    public void validate(int breakWidth) {
+    public void validate() {
         if (!isValid()) {
             TextNode textNode = (TextNode)getNode();
             FontRenderContext fontRenderContext = Platform.getFontRenderContext();
+            int breakWidth = getBreakWidth();
 
             CharSequenceCharacterIterator ci = new CharSequenceCharacterIterator(textNode.getCharacters(), start);
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinVerticalElementView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinVerticalElementView.java?rev=1097519&r1=1097518&r2=1097519&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinVerticalElementView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinVerticalElementView.java Thu Apr 28 16:02:08 2011
@@ -36,7 +36,7 @@ abstract class TextPaneSkinVerticalEleme
         super.attach();
     }
 
-    protected void verticalValidate(int breakWidth) {
+    protected void verticalValidate() {
         // TODO At some point, we may want to optimize this method by deferring layout of
         // non-visible views. If so, we should not recycle views but rather recreate them
         // (as is done in ParagraphView). This way, we avoid thread contention over the
@@ -53,7 +53,8 @@ abstract class TextPaneSkinVerticalEleme
         int height = 0;
 
         for (TextPaneSkinNodeView nodeView : this) {
-            nodeView.validate(breakWidth);
+            nodeView.setBreakWidth(getBreakWidth());
+            nodeView.validate();
 
             nodeView.setLocation(0, height);