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 <[email protected]>
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
[email protected].