classpath-patches
[Top][All Lists]
Advanced

[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()

reply via email to

[Prev in Thread] Current Thread [Next in Thread]