[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[cp-patches] FYI: javax.swing.text fixes
From: |
Roman Kennke |
Subject: |
[cp-patches] FYI: javax.swing.text fixes |
Date: |
Wed, 04 May 2005 15:01:28 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204 |
Hi there,
I found a fixed the bug that caused textfields to corrupt their view
when text is deleted.
2005-05-04 Roman Kennke <address@hidden>
* javax/swing/text/AbstractDocument.java
(LeafElement): Made start and end package private fields for
effective reindexing.
* javax/swing/text/PlainDocument.java
(constructor): The field rootElement is always BranchElement,
so we handle it as such.
(removeUpdate): Rewritten reindexing for removeUpdate so that
the actual removal is taken into account.
/Roman
Index: javax/swing/text/AbstractDocument.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/AbstractDocument.java,v
retrieving revision 1.17
diff -u -r1.17 AbstractDocument.java
--- javax/swing/text/AbstractDocument.java 25 Apr 2005 09:01:41 -0000
1.17
+++ javax/swing/text/AbstractDocument.java 4 May 2005 12:58:15 -0000
@@ -847,8 +847,8 @@
public class LeafElement extends AbstractElement
{
private static final long serialVersionUID = 5115368706941283802L;
- private int start;
- private int end;
+ int start;
+ int end;
public LeafElement(Element parent, AttributeSet attributes, int start,
int end)
Index: javax/swing/text/PlainDocument.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/PlainDocument.java,v
retrieving revision 1.8
diff -u -r1.8 PlainDocument.java
--- javax/swing/text/PlainDocument.java 25 Jan 2005 07:07:25 -0000 1.8
+++ javax/swing/text/PlainDocument.java 4 May 2005 12:58:15 -0000
@@ -47,7 +47,7 @@
public static final String lineLimitAttribute = "lineLimit";
public static final String tabSizeAttribute = "tabSize";
- private Element rootElement;
+ private BranchElement rootElement;
private int tabSize;
public PlainDocument()
@@ -59,7 +59,7 @@
{
super(content);
tabSize = 8;
- rootElement = createDefaultRoot();
+ rootElement = (BranchElement) createDefaultRoot();
}
private void reindex()
@@ -114,9 +114,43 @@
protected void removeUpdate(DefaultDocumentEvent event)
{
- reindex();
-
super.removeUpdate(event);
+
+ int p0 = event.getOffset();
+ int p1 = event.getLength() + p0;
+ int len = event.getLength();
+
+ // check if we must collapse some elements
+ int i1 = rootElement.getElementIndex(p0);
+ int i2 = rootElement.getElementIndex(p1);
+ if (i1 != i2)
+ {
+ Element el1 = rootElement.getElement(i1);
+ Element el2 = rootElement.getElement(i2);
+ int start = el1.getStartOffset();
+ int end = el2.getEndOffset();
+ // collapse elements if the removal spans more than 1 line
+ Element newEl = createLeafElement(rootElement,
+ SimpleAttributeSet.EMPTY,
+ start, end - len);
+ rootElement.replace(start, end - start, new Element[]{ newEl });
+ }
+ else
+ {
+ // otherwise only adjust indices of the element
+ LeafElement el1 = (LeafElement) rootElement.getElement(i1);
+ el1.end -= len;
+ }
+
+ // reindex remaining elements
+ for (int i = rootElement.getElementIndex(p0) + 1;
+ i < rootElement.getElementCount(); i++)
+ {
+ LeafElement el = (LeafElement) rootElement.getElement(i);
+ el.start -= len;
+ el.end -= len;
+ }
+
}
public Element getDefaultRootElement()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [cp-patches] FYI: javax.swing.text fixes,
Roman Kennke <=