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() {