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


The following commit(s) were added to refs/heads/develop by this push:
     new f7af3ad  Added VScrollViewport
f7af3ad is described below

commit f7af3ad38061bdb282d4148382b44db8f9d1a63a
Author: Harbs <ha...@in-tools.com>
AuthorDate: Mon Feb 12 12:15:20 2018 +0200

    Added VScrollViewport
    
    (tested in JS but not SWF.)
    We need an HScrollViewport as well.
---
 .../Basic/src/main/resources/basic-manifest.xml    |   1 +
 .../royale/html/supportClasses/VScrollViewport.as  | 340 +++++++++++++++++++++
 2 files changed, 341 insertions(+)

diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml 
b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index 18d8c81..0ba6ba8 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -133,6 +133,7 @@
      <component id="ImageAndTextButtonView" 
class="org.apache.royale.html.beads.ImageAndTextButtonView" />
      -->
     <component id="ScrollingViewport" 
class="org.apache.royale.html.supportClasses.ScrollingViewport" />
+    <component id="VScrollViewport" 
class="org.apache.royale.html.supportClasses.VScrollViewport" />
     <component id="ClippingViewport" 
class="org.apache.royale.html.supportClasses.Viewport" lookupOnly="true" />
     <component id="Viewport" 
class="org.apache.royale.html.supportClasses.Viewport" />
     <component id="OverflowViewport" 
class="org.apache.royale.html.supportClasses.OverflowViewport" />
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/VScrollViewport.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/VScrollViewport.as
new file mode 100644
index 0000000..140c0b6
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/VScrollViewport.as
@@ -0,0 +1,340 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.html.supportClasses
+{
+       import org.apache.royale.core.IBead;
+       import org.apache.royale.core.IBeadLayout;
+       import org.apache.royale.core.IContainer;
+       import org.apache.royale.core.IContentViewHost;
+       import org.apache.royale.core.IParentIUIBase;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.core.IUIBase;
+       import org.apache.royale.core.IViewport;
+       import org.apache.royale.core.IViewportModel;
+    COMPILE::SWF
+    {
+        import org.apache.royale.core.IViewportScroller;
+               import org.apache.royale.html.beads.ScrollBarView;
+               import org.apache.royale.html.beads.models.ScrollBarModel;
+               import org.apache.royale.utils.CSSContainerUtils;
+               import flash.geom.Rectangle;
+               import org.apache.royale.geom.Rectangle;
+    }
+       import org.apache.royale.core.UIBase;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.geom.Size;
+       import org.apache.royale.geom.Rectangle;
+
+       /**
+        * The VScrollViewport extends the Viewport class by adding horizontal 
and
+        * vertical scroll bars, if needed, to the content area of a Container. 
In
+        * addition, the content of the Container is clipped so that items 
extending
+        * outside the Container are hidden and reachable only by scrolling.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.0
+        */
+       COMPILE::JS
+       public class VScrollViewport extends ScrollingViewport
+       {
+               /**
+                * Constructor
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.0
+                */
+               public function VScrollViewport()
+               {
+                       super();
+               }
+               
+               // These shuould be disabled for VScroll
+               // public function get horizontalScrollPosition():Number
+               // {
+               //      return this.contentView.positioner.scrollLeft;
+               // }
+               // public function set 
horizontalScrollPosition(value:Number):void
+               // {
+               //      this.contentView.positioner.scrollLeft = value;
+               // }
+               
+               /**
+                * @royaleignorecoercion HTMLElement 
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       super.strand = value;
+                       if (contentView == null) {
+                               (value as UIBase).element.style.overflow = 
"hidden";
+                               (value as UIBase).element.style.overflowY = 
"auto";
+                       } else {
+                               (contentView as UIBase).element.style.overflow 
= "hidden";
+                               (contentView as UIBase).element.style.overflowY 
= "auto";
+                       }
+               }
+               
+               /**
+               * @copy org.apache.royale.core.IViewport
+               */
+               override public function 
layoutViewportBeforeContentLayout(width:Number, height:Number):void
+               {
+                       // does nothing for the JS platform
+               }
+               
+               /**
+                * @copy org.apache.royale.core.IViewport
+                */
+               override public function 
layoutViewportAfterContentLayout(contentSize:Size):void
+               {
+                       // does nothing for the JS platform
+               }
+       }
+       
+       COMPILE::SWF
+       public class VScrollViewport extends ScrollingViewport
+       {
+               /**
+                * Constructor
+            *
+            *  @langversion 3.0
+            *  @playerversion Flash 10.2
+            *  @playerversion AIR 2.6
+            *  @productversion Royale 0.0
+                */
+               public function VScrollViewport()
+               {
+                       super();
+               }
+
+               private var _verticalScroller:ScrollBar;
+
+               override public function get 
verticalScroller():IViewportScroller
+               {
+                       return _verticalScroller;
+               }
+
+               private var _horizontalScroller:ScrollBar
+
+               override public function get 
horizontalScroller():IViewportScroller
+               {
+                       return _horizontalScroller;
+               }
+
+        private var _verticalScrollPosition:Number = 0;
+
+        override public function get verticalScrollPosition():Number
+        {
+                       return _verticalScrollPosition;
+        }
+        override public function set verticalScrollPosition(value:Number):void
+        {
+                       _verticalScrollPosition = value;
+                       handleVerticalScrollChange();
+        }
+
+        private var _horizontalScrollPosition:Number = 0;
+
+        override public function get horizontalScrollPosition():Number
+        {
+                       return _horizontalScrollPosition;
+        }
+        override public function set 
horizontalScrollPosition(value:Number):void
+        {
+                       // Do nothing
+                       // _horizontalScrollPosition = value;
+                       // handleHorizontalScrollChange();
+        }
+
+        private var viewportWidth:Number;
+        private var viewportHeight:Number;
+
+        /**
+         * @copy org.apache.royale.core.IViewport
+         */
+        override public function 
layoutViewportBeforeContentLayout(width:Number, height:Number):void
+        {
+               super.layoutViewportBeforeContentLayout(width, height);
+               viewportWidth = width;
+               viewportHeight = height;
+        }
+
+        /**
+         * @copy org.apache.royale.core.IViewport
+         */
+               override public function 
layoutViewportAfterContentLayout(contentSize:Size):void
+               {
+                       var host:UIBase = UIBase(_strand);
+                       
+                       var hadV:Boolean = _verticalScroller != null && 
_verticalScroller.visible;
+                       // var hadH:Boolean = _horizontalScroller != null && 
_horizontalScroller.visible;
+                       
+                       var hostWidth:Number = host.width;
+                       var hostHeight:Number = host.height;
+                       
+                       var borderMetrics:org.apache.royale.geom.Rectangle = 
CSSContainerUtils.getBorderMetrics(_strand);
+                       
+                       hostWidth -= borderMetrics.left + borderMetrics.right;
+                       hostHeight -= borderMetrics.top + borderMetrics.bottom;
+                       
+                       var needV:Boolean = contentSize.height > viewportHeight;
+                       // var needH:Boolean = contentSize.width > 
viewportWidth;
+                       
+                       // if sized to content, the container should stretch to 
fit, making the original
+                       // viewport dimensions obsolete and scrollbars 
unnecessary.
+                       // This might not work for the flexible child.
+                       // if (host.isWidthSizedToContent())
+                       //      needH = false;
+                       if (host.isHeightSizedToContent())
+                               needV = false;
+
+                       if (needV)
+                       {
+                               if (_verticalScroller == null) {
+                                       _verticalScroller = 
createVerticalScrollBar();
+                                       (_strand as 
IContainer).strandChildren.addElement(_verticalScroller);
+                               }
+                       }
+                       // if (needH)
+                       // {
+                       //      if (_horizontalScroller == null) {
+                       //              _horizontalScroller = 
createHorizontalScrollBar();
+                       //              (_strand as 
IContainer).strandChildren.addElement(_horizontalScroller);
+                       //      }
+                       // }
+                       
+                       if (needV)
+                       {
+                               _verticalScroller.visible = true;
+                               _verticalScroller.x = UIBase(_strand).width - 
borderMetrics.right - _verticalScroller.width;
+                               _verticalScroller.y = borderMetrics.top;
+                               _verticalScroller.setHeight(hostHeight, false);
+                               
+                               ScrollBarModel(_verticalScroller.model).maximum 
= contentSize.height;
+                               
ScrollBarModel(_verticalScroller.model).pageSize = contentArea.height;
+                               
ScrollBarModel(_verticalScroller.model).pageStepSize = contentArea.height;
+                               
+                               if (contentSize.height > contentArea.height &&
+                                       (contentSize.height - 
contentArea.height) < _verticalScrollPosition)
+                                       _verticalScrollPosition = 
contentSize.height - contentArea.height;
+                       }
+                       else if (_verticalScroller) {
+                               _verticalScroller.visible = false;
+                       }
+                       
+                       // if (needH)
+                       // {
+                       //      _horizontalScroller.visible = true;
+                       //      _horizontalScroller.x = 0;
+                       //      _horizontalScroller.y = UIBase(_strand).height 
- borderMetrics.bottom - _horizontalScroller.height;
+                       //      _horizontalScroller.setWidth(hostWidth - (needV 
? _verticalScroller.width : 0), false);
+                               
+                       //      
ScrollBarModel(_horizontalScroller.model).maximum = contentSize.width;
+                       //      
ScrollBarModel(_horizontalScroller.model).pageSize = contentArea.width;
+                       //      
ScrollBarModel(_horizontalScroller.model).pageStepSize = contentArea.width;
+                               
+                       //      if (contentSize.width > contentArea.width &&
+                       //              (contentSize.width - contentArea.width) 
< _horizontalScrollPosition)
+                       //              _horizontalScrollPosition = 
contentSize.width - contentArea.width;
+                       // } 
+                       // else if (_horizontalScroller) {
+                       //      _horizontalScroller.visible = false;
+                       // }
+                       
+                       var rect:flash.geom.Rectangle = new 
flash.geom.Rectangle(_horizontalScrollPosition, _verticalScrollPosition,
+                               (_verticalScroller != null && 
_verticalScroller.visible) ? _verticalScroller.x : hostWidth,
+                               hostHeight);
+                       
+                       contentArea.scrollRect = rect;
+               }
+
+               private function createVerticalScrollBar():ScrollBar
+               {
+                       var vsbm:ScrollBarModel = new ScrollBarModel();
+                       vsbm.minimum = 0;
+                       vsbm.snapInterval = 1;
+                       vsbm.stepSize = 1;
+                       vsbm.value = 0;
+
+                       var vsb:VScrollBar;
+                       vsb = new VScrollBar();
+                       vsb.model = vsbm;
+                       vsb.visible = false;
+
+                       vsb.addEventListener("scroll",handleVerticalScroll);
+                       return vsb;
+               }
+
+               // private function createHorizontalScrollBar():ScrollBar
+               // {
+               //      var hsbm:ScrollBarModel = new ScrollBarModel();
+               //      hsbm.minimum = 0;
+               //      hsbm.snapInterval = 1;
+               //      hsbm.stepSize = 1;
+               //      hsbm.value = 0;
+
+               //      var hsb:HScrollBar;
+               //      hsb = new HScrollBar();
+               //      hsb.model = hsbm;
+               //      hsb.visible = false;
+
+               //      hsb.addEventListener("scroll",handleHorizontalScroll);
+               //      return hsb;
+               // }
+
+               private function handleVerticalScroll(event:Event):void
+               {
+                       var host:UIBase = UIBase(_strand);
+                       var vpos:Number = 
ScrollBarModel(_verticalScroller.model).value;
+                       var rect:flash.geom.Rectangle = contentArea.scrollRect;
+                       rect.y = vpos;
+                       contentArea.scrollRect = rect;
+
+                       _verticalScrollPosition = vpos;
+               }
+
+               // private function handleHorizontalScroll(event:Event):void
+               // {
+               //      var host:UIBase = UIBase(_strand);
+               //      var hpos:Number = 
ScrollBarModel(_horizontalScroller.model).value;
+               //      var rect:flash.geom.Rectangle = contentArea.scrollRect;
+               //      rect.x = hpos;
+               //      contentArea.scrollRect = rect;
+
+               //      _horizontalScrollPosition = hpos;
+               // }
+
+               private function handleVerticalScrollChange():void
+               {
+                       if (_verticalScroller) {
+                               ScrollBarModel(_verticalScroller.model).value = 
verticalScrollPosition;
+                       }
+               }
+
+               // private function handleHorizontalScrollChange():void
+               // {
+               //      if (_horizontalScroller) {
+               //              ScrollBarModel(_horizontalScroller.model).value 
= horizontalScrollPosition;
+               //      }
+               // }
+       }
+}

-- 
To stop receiving notification emails like this one, please contact
ha...@apache.org.

Reply via email to