diff options
author | Roman Kennke <roman@kennke.org> | 2006-11-20 11:18:04 +0000 |
---|---|---|
committer | Roman Kennke <roman@kennke.org> | 2006-11-20 11:18:04 +0000 |
commit | cae822ad6e80f552bbf44bd42d2d47d5bdfd759d (patch) | |
tree | fc86ebe5867387b8033242d8610e0ab97b3e8168 /javax/swing/text/BoxView.java | |
parent | 306331a3743616637d2c42b7a830a9853f2c1488 (diff) | |
download | classpath-cae822ad6e80f552bbf44bd42d2d47d5bdfd759d.tar.gz |
2006-11-20 Roman Kennke <kennke@aicas.com>
* javax/swing/text/BoxView.java
(BoxView): Initialize with invalid req's.
(forwardUpdate): Trigger repaint when children changed the
major axis.
(getResizeWeight): Return resizable when the pref differs from
the min or the pref differs from the max size.
(layoutMajorAxis): Actually sum up the preferred sizes.
(paint): Made binary search more robust.
(replace): Let arrays shrink when needed.
(replaceLayoutArray): Let arrays shrink when needed.
(setAxis): Trigger preferenceChanged.
* javax/swing/text/CompositeView.java
(getInsideAllocation): Call insets method to take account
of overriding subclasses.
* javax/swing/text/DefaultStyledDocument.java
(ElementBuffer.finishEdit): Clear the stack and edits buffer.
(ElementBuffer.insertUpdate): Only remove the found element, not
all.
* javax/swing/text/GlyphView.java
(insertUpdate): Pass null in preferenceChanged.
(removeUpdate): Pass null in preferenceChanged.
(changedUpdate): Pass null in preferenceChanged.
* javax/swing/text/Utilities.java
(drawTabbedText): Avoid single calls to charWidth() and instead
call charsWidth() on whole chunks.
* javax/swing/text/html/HTMLDocument.java
(BlockElement.getName): Fall back to super when necessary.
(RunElement.getName): Fall back to super when necessary.
(HTMLReader.MAX_THRESHOLD): New constant field.
(HTMLReader.GROW_THRESHOLD): New constant field.
(HTMLReader.theshold): New field.
(HTMLReader.HTMLReader): Fetch threshold from document.
(HTMLReader.addContent): Sucessivly grow the threshold.
(createLeafElement): Don't create two elemens and don't set
attribute.
* javax/swing/text/html/TableView.java
(RowView.replace): Invalidate grid.
(gridValid): Made package private.
(layoutMinorAxis): Mark all rows as invalid.
(replace): Invalidate grid.
Diffstat (limited to 'javax/swing/text/BoxView.java')
-rw-r--r-- | javax/swing/text/BoxView.java | 98 |
1 files changed, 53 insertions, 45 deletions
diff --git a/javax/swing/text/BoxView.java b/javax/swing/text/BoxView.java index 902927980..72bc07e75 100644 --- a/javax/swing/text/BoxView.java +++ b/javax/swing/text/BoxView.java @@ -38,6 +38,7 @@ exception statement from your version. */ package javax.swing.text; +import java.awt.Container; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Shape; @@ -105,6 +106,8 @@ public class BoxView myAxis = axis; layoutValid[0] = false; layoutValid[1] = false; + requirementsValid[X_AXIS] = false; + requirementsValid[Y_AXIS] = false; span[0] = 0; span[1] = 0; requirements[0] = new SizeRequirements(); @@ -141,7 +144,10 @@ public class BoxView */ public void setAxis(int axis) { + boolean changed = axis != myAxis; myAxis = axis; + if (changed) + preferenceChanged(null, true, true); } /** @@ -222,35 +228,20 @@ public class BoxView */ public void replace(int offset, int length, View[] views) { - int oldNumChildren = getViewCount(); - // Actually perform the replace. super.replace(offset, length, views); // Resize and copy data for cache arrays. int newItems = views != null ? views.length : 0; - int delta = newItems - length; - int src = offset + length; - int numMove = oldNumChildren - src; - int dst = src + delta; - offsets[X_AXIS] = replaceLayoutArray(offsets[X_AXIS], offset, - oldNumChildren, delta, src, dst, - numMove); - spans[X_AXIS] = replaceLayoutArray(spans[X_AXIS], offset, - oldNumChildren, delta, src, dst, - numMove); - offsets[Y_AXIS] = replaceLayoutArray(offsets[Y_AXIS], offset, - oldNumChildren, delta, src, dst, - numMove); - spans[Y_AXIS] = replaceLayoutArray(spans[Y_AXIS], offset, - oldNumChildren, delta, src, dst, - numMove); - - // Invalidate layout information. - layoutValid[X_AXIS] = false; - requirementsValid[X_AXIS] = false; - layoutValid[Y_AXIS] = false; - requirementsValid[Y_AXIS] = false; + int minor = 1 - myAxis; + offsets[myAxis] = replaceLayoutArray(offsets[myAxis], offset, newItems); + spans[myAxis] = replaceLayoutArray(spans[myAxis], offset, newItems); + layoutValid[myAxis] = false; + requirementsValid[myAxis] = false; + offsets[minor] = replaceLayoutArray(offsets[minor], offset, newItems); + spans[minor] = replaceLayoutArray(spans[minor], offset, newItems); + layoutValid[minor] = false; + requirementsValid[minor] = false; } /** @@ -261,23 +252,14 @@ public class BoxView * * @return the replaced array */ - private int[] replaceLayoutArray(int[] oldArray, int offset, int numChildren, - int delta, int src, int dst, int numMove) + private int[] replaceLayoutArray(int[] oldArray, int offset, int newItems) { - int[] newArray; - if (numChildren + delta > oldArray.length) - { - int newLength = Math.max(2 * oldArray.length, numChildren + delta); - newArray = new int[newLength]; - System.arraycopy(oldArray, 0, newArray, 0, offset); - System.arraycopy(oldArray, src, newArray, dst, numMove); - } - else - { - newArray = oldArray; - System.arraycopy(newArray, src, newArray, dst, numMove); - } + int num = getViewCount(); + int[] newArray = new int[num]; + System.arraycopy(oldArray, 0, newArray, 0, offset); + System.arraycopy(oldArray, offset, newArray, offset + newItems, + num - newItems - offset); return newArray; } @@ -341,12 +323,14 @@ public class BoxView newMid = (up - low) / 2 + low; mid = (newMid == mid) ? newMid - 1 : newMid; } - else + else if (isAfter(cX, cY, tmpRect)) { low = mid; newMid = (up - low) / 2 + low; mid = (newMid == mid) ? newMid + 1 : newMid; } + else + break; if (mid >= 0 && mid < viewCount) { start = getView(mid); @@ -864,7 +848,7 @@ public class BoxView { View child = getView(i); spans[i] = (int) child.getPreferredSpan(axis); - sumPref = spans[i]; + sumPref += spans[i]; } // Try to adjust the spans so that we fill the targetSpan. @@ -1105,9 +1089,11 @@ public class BoxView { if (axis != X_AXIS && axis != Y_AXIS) throw new IllegalArgumentException("Illegal axis argument"); - int weight = 1; - if (axis == myAxis) - weight = 0; + updateRequirements(axis); + int weight = 0; + if ((requirements[axis].preferred != requirements[axis].minimum) + || (requirements[axis].preferred != requirements[axis].maximum)) + weight = 1; return weight; } @@ -1134,8 +1120,30 @@ public class BoxView protected void forwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory vf) { - // FIXME: What to do here? + boolean wasValid = isLayoutValid(myAxis); super.forwardUpdate(ec, e, a, vf); + // Trigger repaint when one of the children changed the major axis. + if (wasValid && ! isLayoutValid(myAxis)) + { + Container c = getContainer(); + if (a != null && c != null) + { + int pos = e.getOffset(); + int index = getViewIndexAtPosition(pos); + Rectangle r = getInsideAllocation(a); + if (myAxis == X_AXIS) + { + r.x += offsets[myAxis][index]; + r.width -= offsets[myAxis][index]; + } + else + { + r.y += offsets[myAxis][index]; + r.height -= offsets[myAxis][index]; + } + c.repaint(r.x, r.y, r.width, r.height); + } + } } public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) |