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);