You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2021/07/29 13:10:52 UTC
[royale-asjs] branch develop updated: Fixes #1139
This is an automated email from the ASF dual-hosted git repository.
yishayw 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 ece6775 Fixes #1139
new 78c45ec Merge branch 'develop' of https://github.com/apache/royale-asjs into develop
ece6775 is described below
commit ece67751297db0b1c6877b353ef14419637cbf3b
Author: Yishay Weiss <yi...@hotmail.com>
AuthorDate: Thu Jul 29 16:09:12 2021 +0300
Fixes #1139
---
.../Basic/src/main/resources/basic-manifest.xml | 2 +-
.../org/apache/royale/html/beads/DragBead.as | 138 +++++++++++++++++++++
.../main/royale/mx/containers/beads/PanelView.as | 15 ++-
3 files changed, 149 insertions(+), 6 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index 75b1021..e85b84d 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -115,7 +115,7 @@
<component id="ListView" class="org.apache.royale.html.beads.ListView"/>
<component id="AccordionView" class="org.apache.royale.html.beads.AccordionView"/>
<component id="CenterElement" class="org.apache.royale.html.beads.CenterElement"/>
- <component id="StyleInheritanceBead" class="org.apache.royale.html.beads.StyleInheritanceBead"/>
+ <component id="DragBead" class="org.apache.royale.html.beads.DragBead"/>
<component id="HideComboPopupOnMouseDownBead" class="org.apache.royale.html.beads.HideComboPopupOnMouseDownBead"/>
<component id="KeepComboPopupWithinParentBounds" class="org.apache.royale.html.beads.KeepComboPopupWithinParentBounds"/>
<component id="StyleInheritanceWithObserverBead" class="org.apache.royale.html.beads.StyleInheritanceWithObserverBead"/>
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DragBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DragBead.as
new file mode 100644
index 0000000..1b40131
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DragBead.as
@@ -0,0 +1,138 @@
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.beads
+{
+ import org.apache.royale.core.IStrand;
+ import org.apache.royale.events.IEventDispatcher;
+ import org.apache.royale.events.MouseEvent;
+ import org.apache.royale.core.IBead;
+ import org.apache.royale.core.IUIBase;
+ import org.apache.royale.core.IChild;
+ import org.apache.royale.geom.Point;
+ import org.apache.royale.geom.Rectangle;
+
+ /**
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.8
+ */
+ public class DragBead implements IBead
+ {
+ protected var _host:IUIBase;
+ protected var startingPoint:Point;
+ private var _hitArea:IEventDispatcher;
+ private var _moveArea:Rectangle;
+ /**
+ * @copy org.apache.royale.core.IBead#strand
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.8
+ */
+ public function set strand(value:IStrand):void
+ {
+ _host = value as IUIBase;
+ if (!_hitArea)
+ {
+ _hitArea = value as IEventDispatcher;
+ }
+ if (!_moveArea)
+ {
+ var hostParent:IUIBase = (_host as IChild).parent as IUIBase;
+ _moveArea = new Rectangle(hostParent.x, hostParent.y, hostParent.width, hostParent.height);
+ }
+ _hitArea.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
+ }
+
+ /**
+ * Area on which user presses mouse down to drag strand. Typically this is the title bar of a panel.
+ * If nothing is specified then the hit area is assumed to be the whole strand.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.8
+ */
+ public function get hitArea():IEventDispatcher
+ {
+ return _hitArea;
+ }
+
+ public function set hitArea(value:IEventDispatcher):void
+ {
+ _hitArea = value;
+ }
+
+ /**
+ * Area to which dragging is constrained. By default it is the width and height of the strand's parent
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.8
+ */
+ public function get moveArea():Rectangle
+ {
+ return _moveArea;
+ }
+
+ public function set moveArea(value:Rectangle):void
+ {
+ _moveArea = value;
+ }
+
+ protected function mouseDownHandler(event:MouseEvent):void
+ {
+ startingPoint = new Point(event.clientX, event.clientY);
+ _host.topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
+ _host.topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
+ }
+
+ protected function mouseMoveHandler(event:MouseEvent):void
+ {
+
+ var xDelta:Number = event.clientX - startingPoint.x;
+ var yDelta:Number = event.clientY - startingPoint.y;
+ var potentialX:Number = _host.x + xDelta;
+ var potentialY:Number = _host.y + yDelta;
+ if (potentialX < 0 || potentialX > _moveArea.x + _moveArea.width - _host.width)
+ {
+ xDelta = 0;
+ }
+ if (potentialY < 0 || potentialY > _moveArea.y + _moveArea.height - _host.height)
+ {
+ yDelta = 0;
+ }
+ _host.x = _host.x + xDelta;
+ _host.y = _host.y + yDelta;
+ startingPoint.x += xDelta;
+ startingPoint.y += yDelta;
+ }
+
+ protected function mouseUpHandler(event:MouseEvent):void
+ {
+ _host.topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
+ _host.topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
+ }
+
+ }
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/PanelView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/PanelView.as
index 280c656..f34da21 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/PanelView.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/PanelView.as
@@ -30,6 +30,7 @@ import mx.core.Container;
import mx.core.ContainerLayout;
import mx.core.UIComponent;
+import org.apache.royale.html.beads.DragBead;
import org.apache.royale.core.IBead;
import org.apache.royale.core.ILayoutChild;
import org.apache.royale.core.IStrand;
@@ -70,12 +71,16 @@ public class PanelView extends org.apache.royale.html.beads.PanelView
override public function set strand(value:IStrand):void
{
titleBar = new PanelTitleBar();
- var panel:IEventDispatcher = value as IEventDispatcher;
- panel.addEventListener("widthChanged", handleSizeChanged);
- panel.addEventListener("heightChanged", handleSizeChanged);
- panel.addEventListener("sizeChanged", handleSizeChanged);
+ var dragBead:DragBead = new DragBead();
+ dragBead.hitArea = titleBar;
+ dragBead.moveArea = (titleBar as UIComponent).screen;
+ value.addBead(dragBead);
+ var panel:IEventDispatcher = value as IEventDispatcher;
+ panel.addEventListener("widthChanged", handleSizeChanged);
+ panel.addEventListener("heightChanged", handleSizeChanged);
+ panel.addEventListener("sizeChanged", handleSizeChanged);
super.strand = value;
- }
+ }
private var sawSizeChanged:Boolean;