This is an automated email from the ASF dual-hosted git repository.

carlosrovira pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new b9364f3  Improve ComboBox positioning so it's always inside screen 
limits but avoid hide input box too
b9364f3 is described below

commit b9364f35df8deb11c630d9186d94d812abf290fe
Author: Carlos Rovira <[email protected]>
AuthorDate: Wed Feb 13 23:54:59 2019 +0100

    Improve ComboBox positioning so it's always inside screen limits but avoid 
hide input box too
---
 .../royale/jewel/beads/views/ComboBoxView.as       | 38 ++++++++++++++++++----
 .../util/positionInsideBoundingClientRect.as       |  2 +-
 2 files changed, 33 insertions(+), 7 deletions(-)

diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
index 6221296..0cf7354 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
@@ -18,9 +18,7 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.views
 {
-import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
-
-COMPILE::SWF
+       COMPILE::SWF
        {
                import flash.utils.setTimeout;
     }
@@ -35,6 +33,7 @@ COMPILE::SWF
        import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.geom.Point;
        import org.apache.royale.jewel.beads.controls.combobox.IComboBoxView;
+       import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
        import org.apache.royale.jewel.Button;
        import org.apache.royale.jewel.List;
        import org.apache.royale.jewel.TextInput;
@@ -42,8 +41,9 @@ COMPILE::SWF
        import org.apache.royale.jewel.supportClasses.combobox.ComboBoxPopUp;
        import org.apache.royale.jewel.supportClasses.ResponsiveSizes;
        import 
org.apache.royale.jewel.supportClasses.util.positionInsideBoundingClientRect;
-       import org.apache.royale.utils.UIUtils;
        import org.apache.royale.utils.BrowserInfo;
+       import org.apache.royale.utils.PointUtils;
+       import org.apache.royale.utils.UIUtils;
 
        /**
         *  The ComboBoxView class creates the visual elements of the 
org.apache.royale.jewel.ComboBox
@@ -320,8 +320,34 @@ COMPILE::SWF
 
                                        var origin:Point = new Point(0, 
button.y + button.height - top);
                                        var relocated:Point = 
positionInsideBoundingClientRect(_strand, _list, origin);
-                                       _list.x = relocated.x;
-                                       _list.y = relocated.y;
+                                       var point:Point = 
PointUtils.localToGlobal(origin, _strand);
+                                       
+                                       // by default list appear below 
textinput
+
+                                       // if there's no enough space below, 
reposition above input
+                                       if(relocated.y < point.y)
+                                       {
+                                               var origin2:Point = new 
Point(0, button.y - _list.height - top);
+                                               var relocated2:Point = 
positionInsideBoundingClientRect(_strand, _list, origin2);
+                                               _list.y = relocated2.y;
+                                       
+                                               //if start to cover input...
+                                               if(_list.y == 0)
+                                               {
+                                                       // ... reposition to 
the left or to right side (so we still can see the input)
+                                                       _list.x = (relocated.x 
+ _list.width + 1 >= outerWidth) ? relocated.x - _list.width : _list.x = 
relocated.x + _list.width;
+                                               }
+                                               else
+                                               {
+                                                       // otherwise left in 
the same vertical as input
+                                                       _list.x = relocated.x;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               _list.y = relocated.y;
+                                               _list.x = relocated.x;
+                                       }
                                }
                                else
                                {
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/util/positionInsideBoundingClientRect.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/util/positionInsideBoundingClientRect.as
index ec907bf..3bceacc 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/util/positionInsideBoundingClientRect.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/util/positionInsideBoundingClientRect.as
@@ -18,10 +18,10 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.supportClasses.util
 {
+    import org.apache.royale.core.IStrand;
     import org.apache.royale.core.IUIBase;
     import org.apache.royale.geom.Point;
     import org.apache.royale.utils.PointUtils;
-    import org.apache.royale.core.IStrand;
 
     /**
      *  Determines the position of the popUp related to a point to avoid

Reply via email to