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;