You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-commits@xmlgraphics.apache.org by de...@apache.org on 2005/11/28 18:27:58 UTC
svn commit: r349439 -
/xmlgraphics/batik/branches/svg11/sources/org/apache/batik/swing/JSVGScrollPane.java
Author: deweese
Date: Mon Nov 28 09:27:51 2005
New Revision: 349439
URL: http://svn.apache.org/viewcvs?rev=349439&view=rev
Log:
Fixed issues with showing scroll bars at startup (especially for
static content).
Modified:
xmlgraphics/batik/branches/svg11/sources/org/apache/batik/swing/JSVGScrollPane.java
Modified: xmlgraphics/batik/branches/svg11/sources/org/apache/batik/swing/JSVGScrollPane.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/batik/branches/svg11/sources/org/apache/batik/swing/JSVGScrollPane.java?rev=349439&r1=349438&r2=349439&view=diff
==============================================================================
--- xmlgraphics/batik/branches/svg11/sources/org/apache/batik/swing/JSVGScrollPane.java (original)
+++ xmlgraphics/batik/branches/svg11/sources/org/apache/batik/swing/JSVGScrollPane.java Mon Nov 28 09:27:51 2005
@@ -17,10 +17,11 @@
*/
package org.apache.batik.swing;
-import java.awt.Rectangle;
-import java.awt.Dimension;
import java.awt.Component;
import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
/*
@@ -49,6 +50,8 @@
import org.apache.batik.swing.JSVGCanvas;
import org.apache.batik.swing.gvt.JGVTComponentListener;
+import org.apache.batik.swing.gvt.GVTTreeRendererListener;
+import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter;
import org.apache.batik.swing.svg.SVGDocumentLoaderEvent;
import org.apache.batik.swing.svg.SVGDocumentLoaderListener;
@@ -104,7 +107,7 @@
// create components
vertical = new JScrollBar(JScrollBar.VERTICAL, 0, 0, 0, 0);
horizontal = new JScrollBar(JScrollBar.HORIZONTAL, 0, 0, 0, 0);
-
+
// create a spacer next to the horizontal bar
horizontalPanel = new JPanel(new BorderLayout());
horizontalPanel.add(horizontal, BorderLayout.CENTER);
@@ -122,7 +125,7 @@
// by default, scrollbars are not visible
horizontalPanel.setVisible(false);
- vertical.setVisible(false);
+ vertical .setVisible(false);
// addMouseWheelListener(new WheelListener());
@@ -138,9 +141,10 @@
// canvas listeners
ScrollListener xlistener = createScrollListener();
this.addComponentListener(xlistener);
- canvas.addJGVTComponentListener(xlistener);
- canvas.addGVTTreeBuilderListener(xlistener);
- canvas.addUpdateManagerListener(xlistener);
+ canvas.addGVTTreeRendererListener(xlistener);
+ canvas.addJGVTComponentListener (xlistener);
+ canvas.addGVTTreeBuilderListener (xlistener);
+ canvas.addUpdateManagerListener (xlistener);
}// JSVGScrollPane()
@@ -200,7 +204,7 @@
{
viewBox = null;
horizontalPanel.setVisible(false);
- vertical.setVisible(false);
+ vertical .setVisible(false);
revalidate();
}// reset()
@@ -339,7 +343,7 @@
/** Handle scroll, zoom, and resize events */
protected class ScrollListener extends ComponentAdapter
implements JGVTComponentListener, GVTTreeBuilderListener,
- UpdateManagerListener
+ GVTTreeRendererListener, UpdateManagerListener
{
protected boolean isReady = false;
@@ -370,6 +374,22 @@
viewBox = null; // new document forget old viewBox if any.
}// gvtRenderingCompleted()
+ public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
+ if (viewBox == null) {
+ resizeScrollBars();
+ return;
+ }
+
+ Rectangle2D newview = getViewBoxRect();
+ if ((newview.getX() != viewBox.getX()) ||
+ (newview.getY() != viewBox.getY()) ||
+ (newview.getWidth() != viewBox.getWidth()) ||
+ (newview.getHeight() != viewBox.getHeight())) {
+ viewBox = newview;
+ resizeScrollBars();
+ }
+ }
+
public void updateCompleted(UpdateManagerEvent e) {
if (viewBox == null) {
resizeScrollBars();
@@ -390,6 +410,11 @@
public void gvtBuildCancelled(GVTTreeBuilderEvent e) { }
public void gvtBuildFailed (GVTTreeBuilderEvent e) { }
+ public void gvtRenderingPrepare (GVTTreeRendererEvent e) { }
+ public void gvtRenderingStarted (GVTTreeRendererEvent e) { }
+ public void gvtRenderingCancelled(GVTTreeRendererEvent e) { }
+ public void gvtRenderingFailed (GVTTreeRendererEvent e) { }
+
public void managerStarted (UpdateManagerEvent e) { }
public void managerSuspended(UpdateManagerEvent e) { }
public void managerResumed (UpdateManagerEvent e) { }
@@ -418,7 +443,7 @@
if (vbt == null) vbt = new AffineTransform();
Rectangle r2d = vbt.createTransformedShape(viewBox).getBounds();
- // System.out.println("VB: " + r2d);
+ // System.err.println("VB: " + r2d);
// compute translation
int maxW = r2d.width;
@@ -431,13 +456,10 @@
// System.err.println(" maxW = "+maxW+"; maxH = "+maxH +
// " tx = "+tx+"; ty = "+ty);
- vertical.setValue(ty);
- horizontal.setValue(tx);
// Changing scrollbar visibility may change the
// canvas's dimensions so get the end result.
- Dimension vpSize = updateScrollbarVisibility
- (tx, ty, maxW, maxH);
+ Dimension vpSize = updateScrollbarVisibility(tx, ty, maxW, maxH);
// set scroll params
vertical. setValues(ty, vpSize.height, 0, maxH);
@@ -454,6 +476,11 @@
vertical. setUnitIncrement( (int) (0.2f * vpSize.height) );
horizontal.setUnitIncrement( (int) (0.2f * vpSize.width) );
+ doLayout();
+ horizontalPanel.doLayout();
+ horizontal.doLayout();
+ vertical.doLayout();
+
ignoreScrollChange = false;
//System.out.println(" -- end resizeScrollBars()");
}// resizeScrollBars()
@@ -487,57 +514,25 @@
// System.err.println("MAX: [" + maxW + "," + maxH + "]");
// Fist check if we need either scrollbar (given maxVPW/H).
- boolean vVis = (maxH > maxVPH) || (vertical.getValue() != 0);
- boolean hVis = (maxW > maxVPW) || (horizontal.getValue() != 0);
- Dimension ret = new Dimension();
+ boolean hVis = (maxW > maxVPW) || (tx != 0);
+ boolean vVis = (maxH > maxVPH) || (ty != 0);
+ // System.err.println("Vis flags: " + hVis +", " + vVis);
// This makes sure that if one scrollbar is visible
// we 'recheck' the other scroll bar with the minVPW/H
// since making one visible makes the room for displaying content
// in the other dimension smaller. (This also makes the
// 'corner box' visible if both scroll bars are visible).
- if (vVis) {
- if (hVis) {
- horizontalPanel.setVisible(true);
- vertical.setVisible(true);
- cornerBox.setVisible(true);
+ if (vVis && !hVis) hVis = (maxW > minVPW);
+ else if (hVis && !vVis) vVis = (maxH > minVPH);
- ret.width = minVPW;
- ret.height = minVPH;
- } else {
- vertical.setVisible(true);
- ret.width = minVPW;
- if (maxW > minVPW) {
- horizontalPanel.setVisible(true);
- cornerBox.setVisible(true);
- ret.height = minVPH;
- } else {
- horizontalPanel.setVisible(false);
- cornerBox.setVisible(false);
- ret.height = maxVPH;
- }
- }
- } else {
- if (hVis) {
- horizontalPanel.setVisible(true);
- ret.height = minVPH;
- if (maxH > minVPH) {
- vertical.setVisible(true);
- cornerBox.setVisible(true);
- ret.width = minVPW;
- } else {
- vertical.setVisible(false);
- cornerBox.setVisible(false);
- ret.width = maxVPW;
- }
- } else {
- vertical .setVisible(false);
- horizontalPanel.setVisible(false);
- cornerBox .setVisible(false);
- ret.width = maxVPW;
- ret.height = maxVPH;
- }
- }
+ Dimension ret = new Dimension();
+ ret.width = (hVis)?minVPW:maxVPW;
+ ret.height = (vVis)?minVPH:maxVPH;
+
+ vertical .setVisible(vVis);
+ horizontalPanel.setVisible(hVis);
+ cornerBox .setVisible(vVis && hVis);
// Return the new size of the canvas.
return ret;