The first part of this patch was wrong, removing the repaint from
updateDamage.  The host container should be repainted if a new line was
added.  There is a test case at the bottom of this message demonstrating
that.  I reverted that part of the patch.

2005-10-13  Anthony Balkissoon  <[EMAIL PROTECTED]>

        * javax/swing/text/PlainView.java:
        (updateDamage): Repaint the container if a new line is added.


--Tony (testcase is below)


***TESTCASE***
import javax.swing.*;

public class InsertNewLine
{
  public static void main (String[] args) throws InterruptedException
  {
    JTextArea pane = new JTextArea();
    pane.setText("012345678901234567890e");
    JFrame jf = new JFrame();
    jf.add(pane);
    jf.setSize(200,200);
    jf.show();
    Thread.sleep (4000);    
    pane.append("\n\nhello");
  }
}


On Thu, 2005-10-13 at 12:57 +0000, Roman Kennke wrote:
> Hi,
> 
> it seems that my latest patches made swing painting more sensible in
> respect to clipping. This is indeed a good thing, since it can save
> valuable painting time, with optimized components even better. However,
> it uncovers some smaller bugs that are related to clipping. Like this
> one.
> 
> There were two reasons why textfields haven't been painted correctly
> after my fixes:
> - the initial allocation for the views didn't respect the insets of the
> text component, so the Graphics clip was initialized slightly off
> - the damageLineInRange method in PlainView only caused the area of the
> line repainted, that is still there, that means, if I have 'abcde' and
> delete the 'e', then only the area of 'abcd' gets repainted, leaving
> the 'e' there. I fixed this by causing the repaint call to cover the
> whole width of the text component (== the whole line). If somebody has a
> clever idea how to optimize this, then say so. I would not consider it
> worth the effort though
> 
> 2005-10-13  Roman Kennke  <[EMAIL PROTECTED]>
> 
>         * javax/swing/text/JTextComponent.java
>         (replaceSelection): Removed debug statement.
>         * javax/swing/text/PlainView.java
>         (updateDamage): Removed unnecessary repaint call.
>         (damageLineRange): Trigger repaint over the whole width of the
>         text component at the requested line range. Otherwise we might
>         not clear deleted text.
>         * javax/swing/plaf/basic/BasicTextUI.java
>         (DocumentHandler.changedUpdate): Use visibleEditorRect as
>         initial allocation.
>         (DocumentHandler.removeUpdate): Use visibleEditorRect as
>         initial allocation.
>         (DocumentHandler.insertUpdate): Use visibleEditorRect as
>         initial allocation.
>         (getVisibleEditorRect): If component width and height values are
>         invalid (==uninitialized), return a Rectangle of (0,0,0,0) instead
>         of null.
> 
> /Roman
> _______________________________________________
> Classpath-patches mailing list
> [email protected]
> http://lists.gnu.org/mailman/listinfo/classpath-patches
Index: javax/swing/text/PlainView.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/PlainView.java,v
retrieving revision 1.22
diff -u -r1.22 PlainView.java
--- javax/swing/text/PlainView.java     13 Oct 2005 13:34:46 -0000      1.22
+++ javax/swing/text/PlainView.java     13 Oct 2005 15:50:41 -0000
@@ -426,4 +426,6 @@
         maxLineLength = longestNewLength;
         longestLine = longestNewLine;
       }
+    // Repaint the container
+    ((JTextComponent)getContainer()).repaint();
   }

   /**
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches

Reply via email to