You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2020/08/26 16:29:48 UTC
[royale-asjs] branch develop updated: jewel-popup: content must
wait for the popup to be prepareForPopUp to get right width/height values
This is an automated email from the ASF dual-hosted git repository.
carlosrovira 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 d88b721 jewel-popup: content must wait for the popup to be prepareForPopUp to get right width/height values
d88b721 is described below
commit d88b721ee06569f2d04dd34d1157b6ed09c8e422
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Wed Aug 26 18:29:34 2020 +0200
jewel-popup: content must wait for the popup to be prepareForPopUp to get right width/height values
---
.../main/royale/org/apache/royale/jewel/PopUp.as | 20 --------
.../beads/controllers/PopUpMouseController.as | 19 ++++++--
.../apache/royale/jewel/beads/views/PopUpView.as | 56 ++++++++++++++--------
3 files changed, 52 insertions(+), 43 deletions(-)
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/PopUp.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/PopUp.as
index f816478..78fc896 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/PopUp.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/PopUp.as
@@ -26,7 +26,6 @@ package org.apache.royale.jewel
import org.apache.royale.core.StyledUIBase;
import org.apache.royale.core.UIBase;
import org.apache.royale.events.Event;
- import org.apache.royale.utils.loadBeadFromValuesManager;
/**
* The openPopUp event is dispatched when the we want to open the popup
@@ -121,25 +120,6 @@ package org.apache.royale.jewel
_content.className="jewel popupcontent";
}
}
-
- /**
- * The method called when added to a parent. The PopUp class uses
- * this opportunity to install the content
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.9.6
- */
- override public function addedToParent():void
- {
- super.addedToParent();
-
- if(!_content)
- {
- content = loadBeadFromValuesManager(UIBase, "iPopUpContent", this) as UIBase;
- }
- }
/**
* @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/PopUpMouseController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/PopUpMouseController.as
index 886960c..747617b 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/PopUpMouseController.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/PopUpMouseController.as
@@ -21,6 +21,7 @@ package org.apache.royale.jewel.beads.controllers
import org.apache.royale.core.IBeadController;
import org.apache.royale.core.IStrand;
import org.apache.royale.core.IUIBase;
+ import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.events.MouseEvent;
import org.apache.royale.jewel.PopUp;
@@ -69,30 +70,40 @@ package org.apache.royale.jewel.beads.controllers
viewBead = _strand.getBeadByType(PopUpView) as PopUpView;
IEventDispatcher(_strand).addEventListener("openPopUp", openPopUpHandler);
IEventDispatcher(_strand).addEventListener("closePopUp", closePopUpHandler);
+ IEventDispatcher(_strand).addEventListener("showingPopUp", addContentListeners);
}
/**
* @private
*/
- private function openPopUpHandler(event:MouseEvent):void
+ private function openPopUpHandler(event:Event):void
{
PopUp(_strand).open = true;
viewBead.popUpVisible = true;
if(!PopUp(_strand).modal)
{
- IEventDispatcher(viewBead.content).addEventListener(MouseEvent.MOUSE_DOWN, handleControlMouseDown);
IUIBase(viewBead.popUp).addEventListener(MouseEvent.MOUSE_DOWN, closePopUpHandler);
}
- viewBead.content.addEventListener("closePopUp", closePopUpHandler);
}
+ /**
+ * @private
+ */
+ public function addContentListeners(event:Event):void
+ {
+ if(!PopUp(_strand).modal)
+ {
+ IEventDispatcher(viewBead.content).addEventListener(MouseEvent.MOUSE_DOWN, handleControlMouseDown);
+ }
+ viewBead.content.addEventListener("closePopUp", closePopUpHandler);
+ }
protected function handleControlMouseDown(event:MouseEvent):void
{
event.stopImmediatePropagation();
}
- protected function closePopUpHandler(event:MouseEvent = null):void
+ protected function closePopUpHandler(event:Event = null):void
{
viewBead.content.removeEventListener("closePopUp", closePopUpHandler);
if(!PopUp(_strand).modal)
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/PopUpView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/PopUpView.as
index 6930cd2..b763711 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/PopUpView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/PopUpView.as
@@ -30,6 +30,8 @@ package org.apache.royale.jewel.beads.views
import org.apache.royale.jewel.PopUp;
import org.apache.royale.jewel.supportClasses.popup.PopUpContent;
import org.apache.royale.utils.UIUtils;
+ import org.apache.royale.utils.loadBeadFromValuesManager;
+ import org.apache.royale.utils.sendStrandEvent;
/**
* The PopUpView class is a bead for PopUp that creates the dialog
@@ -67,6 +69,10 @@ package org.apache.royale.jewel.beads.views
{
return getHost().content;
}
+ public function set content(value:UIBase):void
+ {
+ getHost().content = value;
+ }
/**
* @royaleignorecoercion org.apache.royale.core.UIBase
@@ -125,7 +131,6 @@ package org.apache.royale.jewel.beads.views
// There might be a better way to resolve this problem, but this works for now...
if(_showingPopup)
return;
-
if (value != _popUpVisible)
{
_showingPopup = true;
@@ -134,40 +139,53 @@ package org.apache.royale.jewel.beads.views
{
//create the backdrop
_popUp = new PopUpContent();
- _popUp.addElement(content as IChild);
- UIUtils.addPopUp(_popUp, getHost());
- // viewBead.popUp is StyledUIBase that fills 100% of browser window, then we display the "iPopUp content" inside
-
- // rq = requestAnimationFrame(prepareForPopUp); // not work in Chrome/Firefox, while works in Safari, IE11, setInterval/Timer as well doesn't work right in Firefox
- setTimeout(prepareForPopUp, 300);
- // COMPILE::JS
- // {
- // window.addEventListener('resize', autoResizeHandler, false);
- // }
-
- // autoResizeHandler();
+ showPopUp();
}
else
{
- UIUtils.removePopUp(_popUp);
- COMPILE::JS
- {
- document.body.classList.remove("viewport");
- // window.removeEventListener('resize', autoResizeHandler, false);
- }
+ hidePopUp();
_popUp = null;
}
}
_showingPopup = false;
}
+ private function showPopUp():void
+ {
+ UIUtils.addPopUp(_popUp, getHost());
+ // viewBead.popUp is StyledUIBase that fills 100% of browser window, then we display the "iPopUp content" inside
+
+ // rq = requestAnimationFrame(prepareForPopUp); // not work in Chrome/Firefox, while works in Safari, IE11, setInterval/Timer as well doesn't work right in Firefox
+ setTimeout(prepareForPopUp, 300);
+ }
+
+ private function hidePopUp():void
+ {
+ UIUtils.removePopUp(_popUp);
+ COMPILE::JS
+ {
+ document.body.classList.remove("viewport");
+ // window.removeEventListener('resize', autoResizeHandler, false);
+ }
+ }
+
// COMPILE::JS
// private var rq:int;
private function prepareForPopUp():void
{
if(_popUp) {
+ if(!content)
+ {
+ content = loadBeadFromValuesManager(UIBase, "iPopUpContent", _strand) as UIBase;
+ }
+
+ // this internal event is used in PopUpMouseController to attach listeners to content
+ sendStrandEvent(_strand, "showingPopUp");
+
+ _popUp.addElement(content as IChild);
_popUp.addClass("open");
+
COMPILE::JS
{
//avoid scroll in html