Hi,
This fixes some issues with JViewport.
2005-10-18 Roman Kennke <[EMAIL PROTECTED]>
* javax/swing/JViewport.java
(setView): Added repaint() call.
(revalidate): Removed unnecessary and unspecified method.
(reshape): Fire stateChanged if only the size changes. Do not fire
stateChanged if only the location changes.
(scrollRectToVisible): Reworked most of this method to correctly
determine the scroll offsets. Added validation of view as
specified.
/Roman
Index: javax/swing/JViewport.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/JViewport.java,v
retrieving revision 1.32
diff -u -r1.32 JViewport.java
--- javax/swing/JViewport.java 17 Oct 2005 19:08:22 -0000 1.32
+++ javax/swing/JViewport.java 18 Oct 2005 10:02:28 -0000
@@ -411,35 +411,24 @@
fireStateChanged();
}
revalidate();
- }
-
- public void revalidate()
- {
- damaged = true;
- fireStateChanged();
- super.revalidate();
+ repaint();
}
public void reshape(int x, int y, int w, int h)
{
- boolean changed =
- (x != getX())
- || (y != getY())
- || (w != getWidth())
- || (h != getHeight());
if (w != getWidth() || h != getHeight())
sizeChanged = true;
super.reshape(x, y, w, h);
- if (changed)
+ if (sizeChanged)
{
damaged = true;
fireStateChanged();
}
}
-
- public final Insets getInsets()
+
+ public final Insets getInsets()
{
- return new Insets(0,0,0,0);
+ return new Insets(0, 0, 0, 0);
}
public final Insets getInsets(Insets insets)
@@ -574,36 +563,26 @@
Rectangle viewBounds = getView().getBounds();
Rectangle portBounds = getBounds();
- // FIXME: should validate the view if it is not valid, however
- // this may cause excessive validation when the containment
- // hierarchy is being created.
-
- // Y-DIRECTION
-
- // if contentRect is larger than the portBounds, center the view
- if (contentRect.height > portBounds.height)
- setViewPosition(new Point(pos.x, contentRect.y));
-
- if (contentRect.y < -viewBounds.y)
- setViewPosition(new Point(pos.x, contentRect.y));
- else if (contentRect.y + contentRect.height >
- -viewBounds.y + portBounds.height)
- setViewPosition (new Point(pos.x, contentRect.y -
- (portBounds.height - contentRect.height)));
-
- // X-DIRECTION
- pos = getViewPosition();
-
- // if contentRect is larger than the portBounds, center the view
- if (contentRect.width> portBounds.width)
- setViewPosition(new Point(contentRect.x, pos.y));
-
- if (contentRect.x < -viewBounds.x)
- setViewPosition(new Point(contentRect.x, pos.y));
- else if (contentRect.x + contentRect.width >
- -viewBounds.x + portBounds.width)
- setViewPosition (new Point(contentRect.x -
- (portBounds.width - contentRect.width), pos.y));
+ if (isShowing())
+ getView().validate();
+
+ // If the bottom boundary of contentRect is below the port
+ // boundaries, scroll up as necessary.
+ if (contentRect.y + contentRect.height + viewBounds.y > portBounds.height)
+ pos.y = contentRect.y + contentRect.height - viewBounds.height;
+ // If contentRect.y is above the port boundaries, scroll down to
+ // contentRect.y.
+ if (contentRect.y + viewBounds.y < 0)
+ pos.y = contentRect.y;
+ // If the right boundary of contentRect is right from the port
+ // boundaries, scroll left as necessary.
+ if (contentRect.x + contentRect.width + viewBounds.x > portBounds.width)
+ pos.x = contentRect.x + contentRect.width - viewBounds.width;
+ // If contentRect.x is left from the port boundaries, scroll right to
+ // contentRect.x.
+ if (contentRect.x + viewBounds.x < 0)
+ pos.x = contentRect.x;
+ setViewPosition(pos);
}
/**
@@ -617,6 +596,25 @@
if (accessibleContext == null)
accessibleContext = new AccessibleJViewport();
return accessibleContext;
+ }
+
+ /**
+ * Forward repaint to parent to make sure only one paint is performed by the
+ * RepaintManager.
+ *
+ * @param tm number of milliseconds to defer the repaint request
+ * @param x the X coordinate of the upper left corner of the dirty area
+ * @param y the Y coordinate of the upper left corner of the dirty area
+ * @param w the width of the dirty area
+ * @param h the height of the dirty area
+ */
+ public void repaint(long tm, int x, int y, int w, int h)
+ {
+ Component parent = getParent();
+ if (parent != null)
+ {
+ parent.repaint(tm, x + getX(), y + getY(), w, h);
+ }
}
protected void addImpl(Component comp, Object constraints, int index)
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches