This fixes some smaller issues in JComponent. The visibleRect check from repaint() is now moved to the RepaintManager.addDirtyRegion (just in case, somebody calls this method directly instead of repaint()). Also, I changed the getVisibleRect() method back to creating a new Rectangle object instead of using rectCache. This has led to strange interferences with classes that change the returned Rectangle.
2006-02-27 Roman Kennke <[EMAIL PROTECTED]> * javax/swing/JComponent.java (rectCache): Made field static to save memory. (getVisibleRect): Don't use rectCache and create new Rectangle instance instead. (repaint(Rectangle)): Directly call RepaintManager.addDirtyRegion(). (repaint(long,int,int,int,int)): Directly call RepaintManager.addDirtyRegion(). The visibleRect check is now performed in the RepaintManager. /Roman
Index: javax/swing/JComponent.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JComponent.java,v retrieving revision 1.104 diff -u -r1.104 JComponent.java --- javax/swing/JComponent.java 16 Feb 2006 10:56:30 -0000 1.104 +++ javax/swing/JComponent.java 27 Feb 2006 12:49:59 -0000 @@ -554,7 +554,7 @@ * so that it doesn't get modified in another context within the same * method call chain. */ - private transient Rectangle rectCache; + private static transient Rectangle rectCache; /** * The default locale of the component. @@ -1389,16 +1389,15 @@ * Return the component's visible rectangle in a new [EMAIL PROTECTED] Rectangle}, * rather than via a return slot. * - * @return The component's visible rectangle + * @return the component's visible rectangle * * @see #computeVisibleRect(Rectangle) */ public Rectangle getVisibleRect() { - if (rectCache == null) - rectCache = new Rectangle(); - computeVisibleRect(rectCache); - return rectCache; + Rectangle r = new Rectangle(); + computeVisibleRect(r); + return r; } /** @@ -2204,12 +2203,8 @@ */ public void repaint(long tm, int x, int y, int width, int height) { - // TODO: Maybe add this visibleRect stuff to RepaintManager. - Rectangle r = getVisibleRect(); - Rectangle dirty = SwingUtilities.computeIntersection(x, y, width, height, r); - RepaintManager.currentManager(this).addDirtyRegion(this, dirty.x, dirty.y, - dirty.width, - dirty.height); + RepaintManager.currentManager(this).addDirtyRegion(this, x, y, width, + height); } /** @@ -2221,7 +2216,8 @@ */ public void repaint(Rectangle r) { - repaint(0, r.x, r.y, r.width, r.height); + RepaintManager.currentManager(this).addDirtyRegion(this, r.x, r.y, r.width, + r.height); } /**