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";
 		}