Whoa!

Hey Audrius please continue searching and removing bottlenecks from our Swing
implementation. I checked the difference in speed when resizing the
JInternalFrames and it is *very* noticeable.

Thanks for doing this!

cya
Robert

Audrius Meskauskas wrote:
> Trying to understand, why our internal frames are resized slowly, I
> concluded, that the frame of the same size is repainted nine times
> during resizing, when only one is needed. The reason is that the repaint
> manager treats the repaint rectangles as different if the repaint was
> called on the different components. In reality, the child and parent
> rectangles are the same, and just coordinates must be translated.
> 
> The patch forces to travel till the last lightweight parent and add its
> region as dirty, rather than adding as dirty the region of the current
> component. This noticeably increases the speed of resizing (that is more
> visible with the complex windows like JTable).
> 
> 2006-05-15  Audrius Meskauskas  <[EMAIL PROTECTED]>
> 
>    * javax/swing/RepaintManager.java (addDirtyRegion):
>    If there is a lightweight parent, recursively add the corresponding
>    region of the parent instead.
> 
> 
> ------------------------------------------------------------------------
> 
> Index: RepaintManager.java
> ===================================================================
> RCS file: /sources/classpath/classpath/javax/swing/RepaintManager.java,v
> retrieving revision 1.31
> diff -u -r1.31 RepaintManager.java
> --- RepaintManager.java       3 May 2006 14:29:45 -0000       1.31
> +++ RepaintManager.java       15 May 2006 09:42:22 -0000
> @@ -422,6 +422,16 @@
>    {
>      if (w <= 0 || h <= 0 || !component.isShowing())
>        return;
> +    
> +    Component parent = component.getParent();
> +    if (parent instanceof JComponent)
> +      {
> +        // If there is a delegateable parent, add the parent region instead.
> +        addDirtyRegion((JComponent) parent, x + component.getX(),
> +                       y + component.getY(), w, h);
> +        return;
> +      }
> +    
>      component.computeVisibleRect(rectCache);
>      SwingUtilities.computeIntersection(x, y, w, h, rectCache);
>  

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to