You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2010/10/01 21:25:31 UTC

svn commit: r1003625 - in /pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra: TerraCalendarButtonSkin.java TerraColorChooserButtonSkin.java TerraListButtonSkin.java TerraMenuButtonSkin.java

Author: gbrown
Date: Fri Oct  1 19:25:30 2010
New Revision: 1003625

URL: http://svn.apache.org/viewvc?rev=1003625&view=rev
Log:
Ensure that button popups stay within display bounds.

Modified:
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarButtonSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraColorChooserButtonSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListButtonSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuButtonSkin.java

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarButtonSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarButtonSkin.java?rev=1003625&r1=1003624&r2=1003625&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarButtonSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarButtonSkin.java Fri Oct  1 19:25:30 2010
@@ -57,15 +57,26 @@ public class TerraCalendarButtonSkin ext
             CalendarButton calendarButton = (CalendarButton)getComponent();
 
             // Size and position the popup
-            int width = getWidth();
-            int height = getHeight();
-
             Display display = calendarButton.getDisplay();
+            Dimensions displaySize = display.getSize();
+            
             Point buttonLocation = calendarButton.mapPointToAncestor(display, 0, 0);
-            window.setLocation(buttonLocation.x, buttonLocation.y + height - 1);
+            window.setLocation(buttonLocation.x, buttonLocation.y + getHeight() - 1);
+
+            int width = getWidth();
+            window.setMinimumWidth(width - TRIGGER_WIDTH - 1);            
+            
+            int popupWidth = window.getPreferredWidth();            
+            if (buttonLocation.x + popupWidth > displaySize.width) {
+                window.setX(buttonLocation.x + width - popupWidth);
+            }
 
-            window.setMinimumWidth(width - TRIGGER_WIDTH - 1);
-            window.setMaximumHeight(display.getHeight() - window.getY());
+            int popupHeight = window.getPreferredHeight();
+            int maximumHeight = displaySize.height - window.getY();
+            if (popupHeight > maximumHeight 
+                && buttonLocation.y > maximumHeight) {
+                window.setY(buttonLocation.y - window.getPreferredHeight() + 1);
+            }
 
             repaintComponent();
         }

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraColorChooserButtonSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraColorChooserButtonSkin.java?rev=1003625&r1=1003624&r2=1003625&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraColorChooserButtonSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraColorChooserButtonSkin.java Fri Oct  1 19:25:30 2010
@@ -55,15 +55,26 @@ public class TerraColorChooserButtonSkin
             colorChooser.setSelectedColor(colorChooserButton.getSelectedColor());
 
             // Size and position the popup
-            int width = getWidth();
-            int height = getHeight();
-
             Display display = colorChooserButton.getDisplay();
+            Dimensions displaySize = display.getSize();
+            
             Point buttonLocation = colorChooserButton.mapPointToAncestor(display, 0, 0);
-            window.setLocation(buttonLocation.x, buttonLocation.y + height - 1);
+            window.setLocation(buttonLocation.x, buttonLocation.y + getHeight() - 1);
+
+            int width = getWidth();
+            window.setMinimumWidth(width - TRIGGER_WIDTH - 1);            
+            
+            int popupWidth = window.getPreferredWidth();            
+            if (buttonLocation.x + popupWidth > displaySize.width) {
+                window.setX(buttonLocation.x + width - popupWidth);
+            }
 
-            window.setMinimumWidth(width - TRIGGER_WIDTH - 1);
-            window.setMaximumHeight(display.getHeight() - window.getY());
+            int popupHeight = window.getPreferredHeight();
+            int maximumHeight = displaySize.height - window.getY();
+            if (popupHeight > maximumHeight 
+                && buttonLocation.y > maximumHeight) {
+                window.setY(buttonLocation.y - window.getPreferredHeight() + 1);
+            }
 
             repaintComponent();
         }

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListButtonSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListButtonSkin.java?rev=1003625&r1=1003624&r2=1003625&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListButtonSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListButtonSkin.java Fri Oct  1 19:25:30 2010
@@ -77,16 +77,31 @@ public class TerraListButtonSkin extends
             }
 
             // Size and position the popup
-            int width = getWidth();
-            int height = getHeight();
-
             Display display = listButton.getDisplay();
+            Dimensions displaySize = display.getSize();
+            
             Point buttonLocation = listButton.mapPointToAncestor(display, 0, 0);
-            window.setLocation(buttonLocation.x, buttonLocation.y + height - 1);
+            window.setLocation(buttonLocation.x, buttonLocation.y + getHeight() - 1);
 
+            int width = getWidth();
             window.setMinimumWidth(width - TRIGGER_WIDTH - 1);
-            window.setMaximumHeight(display.getHeight() - window.getY());
-
+            
+            int popupWidth = window.getPreferredWidth();            
+            if (buttonLocation.x + popupWidth > displaySize.width) {
+                window.setX(buttonLocation.x + width - popupWidth);
+            }
+            
+            window.setMaximumHeight(Integer.MAX_VALUE);            
+            int popupHeight = window.getPreferredHeight();
+            int maximumHeight = displaySize.height - window.getY();
+            if (popupHeight > maximumHeight 
+                && buttonLocation.y > maximumHeight) {
+                window.setMaximumHeight(buttonLocation.y);
+                window.setY(buttonLocation.y - window.getPreferredHeight() + 1);
+            } else {
+                window.setMaximumHeight(maximumHeight); 
+            }
+            
             repaintComponent();
 
             ApplicationContext.queueCallback(new Runnable() {

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuButtonSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuButtonSkin.java?rev=1003625&r1=1003624&r2=1003625&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuButtonSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuButtonSkin.java Fri Oct  1 19:25:30 2010
@@ -70,16 +70,31 @@ public class TerraMenuButtonSkin extends
             MenuButton menuButton = (MenuButton)getComponent();
 
             // Size and position the popup
-            int width = getWidth();
-            int height = getHeight();
-
             Display display = menuButton.getDisplay();
+            Dimensions displaySize = display.getSize();
+            
             Point buttonLocation = menuButton.mapPointToAncestor(display, 0, 0);
-            window.setLocation(buttonLocation.x, buttonLocation.y + height - 1);
+            window.setLocation(buttonLocation.x, buttonLocation.y + getHeight() - 1);
 
+            int width = getWidth();
             window.setMinimumWidth(width - TRIGGER_WIDTH - 1);
-            window.setMaximumHeight(display.getHeight() - window.getY());
-
+            
+            int popupWidth = window.getPreferredWidth();            
+            if (buttonLocation.x + popupWidth > displaySize.width) {
+                window.setX(buttonLocation.x + width - popupWidth);
+            }
+            
+            window.setMaximumHeight(Integer.MAX_VALUE);            
+            int popupHeight = window.getPreferredHeight();
+            int maximumHeight = displaySize.height - window.getY();
+            if (popupHeight > maximumHeight 
+                && buttonLocation.y > maximumHeight) {
+                window.setMaximumHeight(buttonLocation.y);
+                window.setY(buttonLocation.y - window.getPreferredHeight() + 1);
+            } else {
+                window.setMaximumHeight(maximumHeight); 
+            }
+            
             repaintComponent();
         }