You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by tv...@apache.org on 2009/11/12 00:34:31 UTC

svn commit: r835160 - in /incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk: SplitPane.java skin/terra/TerraMeterSkin.java skin/terra/TerraSplitPaneSkin.java

Author: tvolkert
Date: Wed Nov 11 23:34:31 2009
New Revision: 835160

URL: http://svn.apache.org/viewvc?rev=835160&view=rev
Log:
Fixed issues in split pane's resize weight handling in TerraSplitPaneSkin (PIVOT-236); minor code touch-ups in TerraMeterSkin and SplitPane

Modified:
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPane.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSplitPaneSkin.java

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPane.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPane.java?rev=835160&r1=835159&r2=835160&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPane.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPane.java Wed Nov 11 23:34:31 2009
@@ -46,10 +46,14 @@
      * Enumeration defining split pane resizing modes.
      */
     public enum ResizeMode {
-        /** When resizing, maintains the ratio between the regions. */
+        /**
+         * When resizing, maintain the ratio between the regions.
+         */
         SPLIT_RATIO,
 
-        /** When resizing, preserves the size of the primary region. */
+        /**
+         * When resizing, preserve the size of the primary region.
+         */
         PRIMARY_REGION
     }
 
@@ -308,7 +312,7 @@
 
         ResizeMode previousResizeMode = this.resizeMode;
 
-        if (this.resizeMode != resizeMode) {
+        if (previousResizeMode != resizeMode) {
             this.resizeMode = resizeMode;
             splitPaneListeners.resizeModeChanged(this, previousResizeMode);
         }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java?rev=835160&r1=835159&r2=835160&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java Wed Nov 11 23:34:31 2009
@@ -24,7 +24,6 @@
 import java.awt.Shape;
 import java.awt.font.FontRenderContext;
 import java.awt.font.LineMetrics;
-import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 
 import org.apache.pivot.collections.Dictionary;
@@ -84,7 +83,7 @@
 
         int preferredWidth;
 
-        if (meter.getOrientation()==Orientation.HORIZONTAL) {
+        if (meter.getOrientation() == Orientation.HORIZONTAL) {
             String text = meter.getText();
 
             if (text != null
@@ -98,7 +97,6 @@
             // If the meter has no content, its preferred width is hard-coded by the
             // class and is not affected by the height constraint
             preferredWidth = Math.max(preferredWidth, DEFAULT_WIDTH);
-
         } else {
             preferredWidth = getPreferredHeight(-1);
         }
@@ -112,7 +110,7 @@
 
         int preferredHeight;
 
-        if (meter.getOrientation()==Orientation.HORIZONTAL) {
+        if (meter.getOrientation() == Orientation.HORIZONTAL) {
             preferredHeight = getPreferredWidth(width);
         } else {
             String text = meter.getText();
@@ -154,7 +152,7 @@
         preferredHeight = Math.max(preferredHeight, DEFAULT_HEIGHT);
 
         Dimensions preferredSize;
-        if (meter.getOrientation()==Orientation.HORIZONTAL) {
+        if (meter.getOrientation() == Orientation.HORIZONTAL) {
             preferredSize = new Dimensions(preferredWidth, preferredHeight);
         } else {
             preferredSize = new Dimensions(preferredHeight, preferredWidth);
@@ -213,16 +211,15 @@
         if (meter.getOrientation() == Orientation.HORIZONTAL) {
             drawMeter(meter, graphics, width, height);
         } else {
-            AffineTransform oldTransform = graphics.getTransform();
             graphics.rotate(Math.PI / 2d);
             graphics.translate(0, -width);
             drawMeter(meter, graphics, height, width);
-            graphics.setTransform(oldTransform);
         }
     }
 
     private void drawMeter(Meter meter, Graphics2D graphics, int width, int height) {
         int meterStop = (int)(meter.getPercentage() * width);
+
         // Paint the interior fill
         graphics.setPaint(new GradientPaint(0, 0, TerraTheme.brighten(fillColor),
             0, height, TerraTheme.darken(fillColor)));

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSplitPaneSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSplitPaneSkin.java?rev=835160&r1=835159&r2=835160&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSplitPaneSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSplitPaneSkin.java Wed Nov 11 23:34:31 2009
@@ -29,7 +29,6 @@
 import org.apache.pivot.wtk.SplitPane;
 import org.apache.pivot.wtk.SplitPaneListener;
 import org.apache.pivot.wtk.Theme;
-import org.apache.pivot.wtk.SplitPane.ResizeMode;
 import org.apache.pivot.wtk.skin.ComponentSkin;
 import org.apache.pivot.wtk.skin.ContainerSkin;
 
@@ -157,11 +156,6 @@
                 if (shadow == null) {
                     // Update the split location immediately
                     splitPane.setSplitRatio(splitRatio);
-                    if (orientation == Orientation.HORIZONTAL) {
-                        splitter.setLocation(splitLocation, 0);
-                    } else {
-                        splitter.setLocation(0, splitLocation);
-                    }
                 } else {
                     // Move the shadow to the split location
                     if (orientation == Orientation.HORIZONTAL) {
@@ -215,7 +209,6 @@
                 && Mouse.getCapturer() == component) {
                 if (shadow != null) {
                     SplitPane splitPane = (SplitPane)TerraSplitPaneSkin.this.getComponent();
-                    Orientation orientation = splitPane.getOrientation();
 
                     // Update the split location and remove the shadow
                     int splitLocation;
@@ -229,11 +222,7 @@
                     }
 
                     splitPane.setSplitRatio(splitRatio);
-                    if (orientation == Orientation.HORIZONTAL) {
-                        splitter.setLocation(splitLocation, 0);
-                    } else {
-                        splitter.setLocation(0, splitLocation);
-                    }
+
                     splitPane.remove(shadow);
                     shadow = null;
                 }
@@ -306,12 +295,51 @@
         SplitPane splitPane = (SplitPane)component;
         splitPane.getSplitPaneListeners().add(this);
 
-        splitter.setLocation(-1, -1);
         splitPane.add(splitter);
         updateSplitterCursor();
     }
 
     @Override
+    public void setSize(int width, int height) {
+        int previousWidth = getWidth();
+        int previousHeight = getHeight();
+
+        super.setSize(width, height);
+
+        SplitPane splitPane = (SplitPane)getComponent();
+        Orientation orientation = splitPane.getOrientation();
+
+        if (splitPane.getResizeMode() == SplitPane.ResizeMode.PRIMARY_REGION
+            && ((previousWidth != width && orientation == Orientation.HORIZONTAL)
+            || (previousHeight != height && orientation == Orientation.VERTICAL))) {
+            SplitPane.Region primaryRegion = splitPane.getPrimaryRegion();
+            float splitRatio = splitPane.getSplitRatio();
+
+            if (orientation == Orientation.HORIZONTAL) {
+                int splitLocation = (int)(splitRatio * previousWidth);
+
+                if (primaryRegion == SplitPane.Region.BOTTOM_RIGHT) {
+                    // Move the split location to maintain size on the right
+                    splitLocation += (width - previousWidth);
+                }
+
+                splitRatio = (float)limitSplitLocation(splitLocation) / width;
+            } else {
+                int splitLocation = (int)(splitRatio * previousHeight);
+
+                if (primaryRegion == SplitPane.Region.BOTTOM_RIGHT) {
+                    // Move the split location to maintain size on the bottom
+                    splitLocation += (height - previousHeight);
+                }
+
+                splitRatio = (float)limitSplitLocation(splitLocation) / height;
+            }
+
+            splitPane.setSplitRatio(splitRatio);
+        }
+    }
+
+    @Override
     public int getPreferredWidth(int height) {
         return 0;
     }
@@ -334,17 +362,11 @@
         SplitPane splitPane = (SplitPane)getComponent();
 
         float splitRatio = splitPane.getSplitRatio();
-        SplitPane.ResizeMode resizeMode = splitPane.getResizeMode();
         Component topLeft = splitPane.getTopLeft();
         Component bottomRight = splitPane.getBottomRight();
 
         if (splitPane.getOrientation() == Orientation.HORIZONTAL) {
-            int splitLocation;
-            if (resizeMode == SplitPane.ResizeMode.SPLIT_RATIO || splitter.getX()==-1) {
-                splitLocation = limitSplitLocation((int)(splitRatio * width));
-            } else {
-                splitLocation = limitSplitLocation(splitter.getX());
-            }
+            int splitLocation = limitSplitLocation((int)(splitRatio * width));
             int rightStart = splitLocation + splitterThickness;
             splitter.setLocation(splitLocation, 0);
             splitter.setSize(splitterThickness, height);
@@ -359,12 +381,7 @@
                 bottomRight.setSize(Math.max(width - rightStart, 0), height);
             }
         } else {
-            int splitLocation;
-            if (resizeMode == SplitPane.ResizeMode.SPLIT_RATIO || splitter.getY()==-1) {
-                splitLocation = limitSplitLocation((int)(splitRatio * height));
-            } else {
-                splitLocation = limitSplitLocation(splitter.getY());
-            }
+            int splitLocation = limitSplitLocation((int)(splitRatio * height));
             int bottomStart = splitLocation + splitterThickness;
             splitter.setLocation(0, splitLocation);
             splitter.setSize(width, splitterThickness);
@@ -489,7 +506,8 @@
     }
 
     @Override
-    public void resizeModeChanged(SplitPane splitPane, ResizeMode previousResizeMode) {
+    public void resizeModeChanged(SplitPane splitPane, SplitPane.ResizeMode previousResizeMode) {
+        // No-op
     }
 
     private void updateSplitterCursor() {