You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ha...@apache.org on 2019/05/26 21:22:27 UTC
[royale-asjs] 02/04: Fix viewports
This is an automated email from the ASF dual-hosted git repository.
harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit ece4ac898282d0a31d4d3d2eb9e6ef749ff4b7e0
Author: Harbs <ha...@in-tools.com>
AuthorDate: Mon May 27 00:21:31 2019 +0300
Fix viewports
Scrolling viewports should reference the correct divs
Viewport percentage sizes need to match those of the strand
---
.../royale/html/supportClasses/HScrollViewport.as | 19 ++-----
.../html/supportClasses/ScrollingViewport.as | 66 ++++++++++++++--------
.../apache/royale/html/supportClasses/Viewport.as | 9 ++-
3 files changed, 57 insertions(+), 37 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/HScrollViewport.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/HScrollViewport.as
index 0a96b42..28851cd 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/HScrollViewport.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/HScrollViewport.as
@@ -78,20 +78,13 @@ package org.apache.royale.html.supportClasses
// Do nothing
}
- /**
- * @royaleignorecoercion HTMLElement
- */
- override public function set strand(value:IStrand):void
+ override protected function setScrollStyle():void
{
- super.strand = value;
- if (contentView == null) {
- (value as UIBase).element.style.overflow = "hidden";
- (value as UIBase).element.style.overflowX = "auto";
- } else {
- (contentView as UIBase).element.style.overflow = "hidden";
- (contentView as UIBase).element.style.overflowX = "auto";
- }
- }
+ contentArea.element.style.overflow = "hidden";
+ contentArea.element.style.overflowX = "auto";
+ adaptContentArea();
+ }
+
}
COMPILE::SWF
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/ScrollingViewport.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/ScrollingViewport.as
index 807c1d6..03d896a 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/ScrollingViewport.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/ScrollingViewport.as
@@ -43,6 +43,8 @@ package org.apache.royale.html.supportClasses
import org.apache.royale.events.Event;
import org.apache.royale.geom.Size;
import org.apache.royale.geom.Rectangle;
+ import org.apache.royale.core.ILayoutChild;
+ import org.apache.royale.events.IEventDispatcher;
/**
* The ScrollingViewport extends the Viewport class by adding horizontal and
@@ -73,53 +75,71 @@ package org.apache.royale.html.supportClasses
public function get verticalScrollPosition():Number
{
- return this.contentView.positioner.scrollTop;
+ return contentArea.element.scrollTop;
}
public function set verticalScrollPosition(value:Number):void
{
- this.contentView.positioner.scrollTop = value;
+ contentArea.element.scrollTop = value;
}
public function get horizontalScrollPosition():Number
{
- return this.contentView.positioner.scrollLeft;
+ return contentArea.element.scrollLeft;
}
public function set horizontalScrollPosition(value:Number):void
{
- this.contentView.positioner.scrollLeft = value;
+ contentArea.element.scrollLeft = value;
}
/**
- * @royaleignorecoercion HTMLElement
- * @royaleignorecoercion org.apache.royale.core.UIBase
+ *
+ * @royaleignorecoercion org.apache.royale.core.ILayoutChild
*/
- override public function set strand(value:IStrand):void
+ override protected function setScrollStyle():void
{
- super.strand = value;
- var component:UIBase;
- if (contentView == null) {
- component = value as UIBase;
- } else {
- component = contentView as UIBase;
+ contentArea.element.style.overflow = "auto";
+ adaptContentArea();
+ }
+
+ /**
+ * If the contentArea is not the same as the strand,
+ * we need to sync the percentage sizes for scrolling to work correctly.
+ * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+ */
+ protected function adaptContentArea():void
+ {
+ if(_strand != contentArea)
+ {
+ var host:ILayoutChild = _strand as ILayoutChild;
+ var val:Number = host.percentHeight;
+ if(!isNaN(val)){
+ contentArea.percentHeight = val;
+ }
+ val = host.percentWidth;
+ if(!isNaN(val)){
+ contentArea.percentWidth = val;
+ }
+ (_strand as IEventDispatcher).addEventListener("percentWidthChanged",handleWidthChange);
+ (_strand as IEventDispatcher).addEventListener("percentHeightChanged",handleHeightChange);
}
- component.element.style.overflow = "auto";
+
}
-
/**
- * @copy org.apache.royale.core.IViewport
- */
- override public function layoutViewportBeforeContentLayout(width:Number, height:Number):void
+ * @royaleignorecoercion org.apache.royale.core.ILayoutChild
+ */
+ private function handleWidthChange(ev:Event):void
{
- // does nothing for the JS platform
+ contentArea.percentWidth = (_strand as ILayoutChild).percentWidth;
}
-
+
/**
- * @copy org.apache.royale.core.IViewport
+ * @royaleignorecoercion org.apache.royale.core.ILayoutChild
*/
- override public function layoutViewportAfterContentLayout(contentSize:Size):void
+ private function handleHeightChange(ev:Event):void
{
- // does nothing for the JS platform
+ contentArea.percentHeight = (_strand as ILayoutChild).percentHeight;
}
+
}
COMPILE::SWF
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/Viewport.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/Viewport.as
index 8fe96d6..b9bbbd0 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/Viewport.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/Viewport.as
@@ -99,7 +99,14 @@ package org.apache.royale.html.supportClasses
if (!contentArea)
contentArea = value as UIBase;
-
+ setScrollStyle();
+ }
+ /**
+ * Subclasses override this method to change scrolling behavior
+ */
+ COMPILE::JS
+ protected function setScrollStyle():void
+ {
contentArea.element.style.overflow = "hidden";
}