Repository: flex-asjs Updated Branches: refs/heads/refactor-sprite dd28a9648 -> f469e1896
More refactoring - image view commonalities moved to core. Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c15d36ca Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c15d36ca Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c15d36ca Branch: refs/heads/refactor-sprite Commit: c15d36ca0f8fab36c464e6cdb7426d7b7819b769 Parents: dd28a96 Author: yishayw <[email protected]> Authored: Thu Oct 6 17:24:37 2016 +0300 Committer: yishayw <[email protected]> Committed: Thu Oct 6 17:24:37 2016 +0300 ---------------------------------------------------------------------- .../projects/Core/src/main/flex/CoreClasses.as | 1 + .../flex/org/apache/flex/core/ImageViewBase.as | 241 +++++++++++++++++++ .../src/main/config/compile-as-config.xml | 5 + .../Graphics/src/main/flex/GraphicsClasses.as | 1 + .../flex/org/apache/flex/svg/beads/ImageView.as | 4 +- .../Graphics/src/main/resources/defaults.css | 1 - .../projects/HTML/src/main/flex/HTMLClasses.as | 1 + .../org/apache/flex/html/beads/ImageView.as | 200 +-------------- .../HTML/src/main/resources/defaults.css | 4 +- 9 files changed, 256 insertions(+), 202 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/Core/src/main/flex/CoreClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/CoreClasses.as b/frameworks/projects/Core/src/main/flex/CoreClasses.as index e2b4197..76ee014 100644 --- a/frameworks/projects/Core/src/main/flex/CoreClasses.as +++ b/frameworks/projects/Core/src/main/flex/CoreClasses.as @@ -104,6 +104,7 @@ internal class CoreClasses import org.apache.flex.core.DataBindingBase; DataBindingBase; import org.apache.flex.core.UIBase; UIBase; import org.apache.flex.core.ImageBase; ImageBase; + import org.apache.flex.core.ImageViewBase; ImageViewBase; COMPILE::SWF { import org.apache.flex.core.UIButtonBase; UIButtonBase; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ImageViewBase.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ImageViewBase.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ImageViewBase.as new file mode 100644 index 0000000..8973abe --- /dev/null +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ImageViewBase.as @@ -0,0 +1,241 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.flex.core +{ + COMPILE::SWF + { + import flash.display.Bitmap; + import flash.display.Loader; + import flash.display.LoaderInfo; + import flash.events.IOErrorEvent; + import flash.net.URLRequest; + } + COMPILE::JS + { + import goog.events; + import org.apache.flex.utils.URLUtils; + } + + import org.apache.flex.core.BeadViewBase; + import org.apache.flex.core.IImageModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.UIBase; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.core.IImageView; + + /** + * The ImageView class creates the visual elements of the org.apache.flex.html.Image component. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class ImageViewBase extends BeadViewBase implements IImageView + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function ImageViewBase() + { + } + + COMPILE::SWF + protected var bitmap:Bitmap; + COMPILE::SWF + private var _loader:Loader; + + protected var _model:IImageModel; + + COMPILE::SWF + public function get loader():Loader + { + return _loader; + } + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + override public function set strand(value:IStrand):void + { + super.strand = value; + + COMPILE::SWF + { + IEventDispatcher(_strand).addEventListener("widthChanged",handleSizeChange); + IEventDispatcher(_strand).addEventListener("heightChanged",handleSizeChange); + } + + _model = value.getBeadByType(IImageModel) as IImageModel; + _model.addEventListener("urlChanged",handleUrlChange); + handleUrlChange(null); + } + + /** + * @private + * @flexjsignorecoercion HTMLImageELement + */ + protected function handleUrlChange(event:Event):void + { + COMPILE::SWF + { + if (_model.url) { + setupLoader(); + loader.load(new URLRequest(_model.url)); + } + } + COMPILE::JS + { + if (_model.url) { + setupLoader(); + (host.element as HTMLImageElement).src = _model.url; + } + } + } + + COMPILE::SWF + public function setupLoader():void + { + _loader = new Loader(); + loader.contentLoaderInfo.addEventListener("complete",onComplete); + loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void { + trace(e); + e.preventDefault(); + }); + } + + COMPILE::JS + public function setupLoader():void + { + var host:IUIBase = _strand as IUIBase; + (host.element as HTMLImageElement).addEventListener('load', + loadHandler, false); + host.addEventListener('sizeChanged', + sizeChangedHandler); + } + + /** + * @private + */ + COMPILE::SWF + private function onComplete(event:Object):void + { + var host:UIBase = UIBase(_strand); + if (bitmap) { + host.$sprite.removeChild(bitmap); + } + + bitmap = Bitmap(LoaderInfo(event.target).content); + + host.$sprite.addChild(bitmap); + + if (host.isWidthSizedToContent()) + { + host.dispatchEvent(new Event("widthChanged")); + if (host.parent is IEventDispatcher) + IEventDispatcher(host.parent).dispatchEvent(new Event("layoutNeeded")); + } + else + bitmap.width = host.width; + + if (host.isHeightSizedToContent()) + { + host.dispatchEvent(new Event("heightChanged")); + if (host.parent is IEventDispatcher) + IEventDispatcher(host.parent).dispatchEvent(new Event("layoutNeeded")); + } + else + bitmap.height = host.height; + + } + + /** + * @private + */ + COMPILE::SWF + private function handleSizeChange(event:Object):void + { + var host:UIBase = UIBase(_strand); + if (bitmap) { + if (!isNaN(host.explicitWidth) || !isNaN(host.percentWidth)) + bitmap.width = UIBase(_strand).width; + if (!isNaN(host.explicitHeight) || !isNaN(host.percentHeight)) + bitmap.height = UIBase(_strand).height; + } + } + + COMPILE::JS + private function loadHandler(event:Object):void + { + var host:UIBase = UIBase(_strand); + IEventDispatcher(host.parent).dispatchEvent(new Event("layoutNeeded")); + } + + /** + * @flexjsignorecoercion HTMLElement + */ + COMPILE::JS + private function sizeChangedHandler(event:Object):void + { + var host:UIBase = _strand as UIBase; + var s:Object = host.positioner.style; + var l:Number = NaN; + var ls:String = s.left; + if (typeof(ls) === 'string' && ls.length > 0) + l = parseFloat(ls.substring(0, ls.length - 2)); + var r:Number = NaN; + var rs:String = s.right; + if (typeof(rs) === 'string' && rs.length > 0) + r = parseFloat(rs.substring(0, rs.length - 2)); + if (!isNaN(l) && + !isNaN(r)) { + // if just using size constraints and image will not shrink or grow + var computedWidth:Number = (host.positioner.offsetParent as HTMLElement).offsetWidth - + l - r; + s.width = computedWidth.toString() + 'px'; + } + var t:Number = NaN; + var ts:String = s.top; + if (typeof(ts) === 'string' && ts.length > 0) + t = parseFloat(ts.substring(0, ts.length - 2)); + var b:Number = NaN; + var bs:String = s.right; + if (typeof(bs) === 'string' && bs.length > 0) + b = parseFloat(bs.substring(0, bs.length - 2)); + if (!isNaN(t) && + !isNaN(b)) { + // if just using size constraints and image will not shrink or grow + var computedHeight:Number = (host.positioner.offsetParent as HTMLElement).offsetHeight - + t - b; + s.height = computedHeight.toString() + 'px'; + } + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/Graphics/src/main/config/compile-as-config.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/Graphics/src/main/config/compile-as-config.xml b/frameworks/projects/Graphics/src/main/config/compile-as-config.xml index 5f63b82..75adafe 100644 --- a/frameworks/projects/Graphics/src/main/config/compile-as-config.xml +++ b/frameworks/projects/Graphics/src/main/config/compile-as-config.xml @@ -63,6 +63,11 @@ <warn-no-constructor>false</warn-no-constructor> </compiler> + <include-file> + <name>defaults.css</name> + <path>../resources/defaults.css</path> + </include-file> + <include-classes> <class>GraphicsClasses</class> </include-classes> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as b/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as index 0ab84c2..b93e577 100644 --- a/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as +++ b/frameworks/projects/Graphics/src/main/flex/GraphicsClasses.as @@ -50,6 +50,7 @@ internal class GraphicsClasses import org.apache.flex.graphics.PathBuilder; PathBuilder; import org.apache.flex.graphics.QuadraticCurve; QuadraticCurve; import org.apache.flex.svg.DOMWrapper; DOMWrapper; + import org.apache.flex.svg.beads.ImageView; ImageView; } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/Graphics/src/main/flex/org/apache/flex/svg/beads/ImageView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/svg/beads/ImageView.as b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/svg/beads/ImageView.as index bc82691..0f40093 100644 --- a/frameworks/projects/Graphics/src/main/flex/org/apache/flex/svg/beads/ImageView.as +++ b/frameworks/projects/Graphics/src/main/flex/org/apache/flex/svg/beads/ImageView.as @@ -19,7 +19,7 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.svg.beads { - import org.apache.flex.html.beads.ImageView; + import org.apache.flex.core.ImageViewBase; /** * The ImageView class creates the visual elements of the org.apache.flex.svg.Image component. @@ -29,7 +29,7 @@ package org.apache.flex.svg.beads * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class ImageView extends org.apache.flex.html.beads.ImageView + public class ImageView extends ImageViewBase { /** * constructor. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/Graphics/src/main/resources/defaults.css ---------------------------------------------------------------------- diff --git a/frameworks/projects/Graphics/src/main/resources/defaults.css b/frameworks/projects/Graphics/src/main/resources/defaults.css index c693333..ca30ffa 100644 --- a/frameworks/projects/Graphics/src/main/resources/defaults.css +++ b/frameworks/projects/Graphics/src/main/resources/defaults.css @@ -26,7 +26,6 @@ svg|Image vertical-align: top; IBeadModel: ClassReference("org.apache.flex.html.beads.models.ImageModel"); IBeadView: ClassReference("org.apache.flex.svg.beads.ImageView"); - IBinaryImageLoader: ClassReference("org.apache.flex.html.beads.BinaryImageLoader"); } svg|BinaryImage http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/HTML/src/main/flex/HTMLClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/HTMLClasses.as b/frameworks/projects/HTML/src/main/flex/HTMLClasses.as index ee385ef..d4cb4d2 100644 --- a/frameworks/projects/HTML/src/main/flex/HTMLClasses.as +++ b/frameworks/projects/HTML/src/main/flex/HTMLClasses.as @@ -56,6 +56,7 @@ internal class HTMLClasses import org.apache.flex.html.beads.ImageAndTextButtonView; ImageAndTextButtonView; import org.apache.flex.html.beads.ImageView; ImageView; import org.apache.flex.html.beads.BinaryImageLoader; BinaryImageLoader; + import org.apache.flex.html.beads.models.BinaryImageModel; BinaryImageModel; } import org.apache.flex.html.beads.ImageButtonView; ImageButtonView; import org.apache.flex.html.beads.ListView; ListView; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ImageView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ImageView.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ImageView.as index 747ada1..8c20686 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ImageView.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ImageView.as @@ -18,28 +18,7 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.html.beads { - COMPILE::SWF - { - import flash.display.Bitmap; - import flash.display.Loader; - import flash.display.LoaderInfo; - import flash.events.IOErrorEvent; - import flash.net.URLRequest; - } - COMPILE::JS - { - import goog.events; - import org.apache.flex.utils.URLUtils; - } - - import org.apache.flex.core.BeadViewBase; - import org.apache.flex.core.IImageModel; - import org.apache.flex.core.IStrand; - import org.apache.flex.core.UIBase; - import org.apache.flex.core.IUIBase; - import org.apache.flex.events.Event; - import org.apache.flex.events.IEventDispatcher; - import org.apache.flex.core.IImageView; + import org.apache.flex.core.ImageViewBase; /** * The ImageView class creates the visual elements of the org.apache.flex.html.Image component. @@ -49,7 +28,7 @@ package org.apache.flex.html.beads * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class ImageView extends BeadViewBase implements IImageView + public class ImageView extends ImageViewBase { /** * constructor. @@ -63,180 +42,5 @@ package org.apache.flex.html.beads { } - COMPILE::SWF - protected var bitmap:Bitmap; - COMPILE::SWF - private var _loader:Loader; - - protected var _model:IImageModel; - - COMPILE::SWF - public function get loader():Loader - { - return _loader; - } - - /** - * @copy org.apache.flex.core.IBead#strand - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion FlexJS 0.0 - */ - override public function set strand(value:IStrand):void - { - super.strand = value; - - COMPILE::SWF - { - IEventDispatcher(_strand).addEventListener("widthChanged",handleSizeChange); - IEventDispatcher(_strand).addEventListener("heightChanged",handleSizeChange); - } - - _model = value.getBeadByType(IImageModel) as IImageModel; - _model.addEventListener("urlChanged",handleUrlChange); - handleUrlChange(null); - } - - /** - * @private - * @flexjsignorecoercion HTMLImageELement - */ - protected function handleUrlChange(event:Event):void - { - COMPILE::SWF - { - if (_model.url) { - setupLoader(); - loader.load(new URLRequest(_model.url)); - } - } - COMPILE::JS - { - if (_model.url) { - setupLoader(); - (host.element as HTMLImageElement).src = _model.url; - } - } - } - - COMPILE::SWF - public function setupLoader():void - { - _loader = new Loader(); - loader.contentLoaderInfo.addEventListener("complete",onComplete); - loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void { - trace(e); - e.preventDefault(); - }); - } - - COMPILE::JS - public function setupLoader():void - { - var host:IUIBase = _strand as IUIBase; - (host.element as HTMLImageElement).addEventListener('load', - loadHandler, false); - host.addEventListener('sizeChanged', - sizeChangedHandler); - } - - /** - * @private - */ - COMPILE::SWF - private function onComplete(event:Object):void - { - var host:UIBase = UIBase(_strand); - if (bitmap) { - host.$sprite.removeChild(bitmap); - } - - bitmap = Bitmap(LoaderInfo(event.target).content); - - host.$sprite.addChild(bitmap); - - if (host.isWidthSizedToContent()) - { - host.dispatchEvent(new Event("widthChanged")); - if (host.parent is IEventDispatcher) - IEventDispatcher(host.parent).dispatchEvent(new Event("layoutNeeded")); - } - else - bitmap.width = host.width; - - if (host.isHeightSizedToContent()) - { - host.dispatchEvent(new Event("heightChanged")); - if (host.parent is IEventDispatcher) - IEventDispatcher(host.parent).dispatchEvent(new Event("layoutNeeded")); - } - else - bitmap.height = host.height; - - } - - /** - * @private - */ - COMPILE::SWF - private function handleSizeChange(event:Object):void - { - var host:UIBase = UIBase(_strand); - if (bitmap) { - if (!isNaN(host.explicitWidth) || !isNaN(host.percentWidth)) - bitmap.width = UIBase(_strand).width; - if (!isNaN(host.explicitHeight) || !isNaN(host.percentHeight)) - bitmap.height = UIBase(_strand).height; - } - } - - COMPILE::JS - private function loadHandler(event:Object):void - { - var host:UIBase = UIBase(_strand); - IEventDispatcher(host.parent).dispatchEvent(new Event("layoutNeeded")); - } - - /** - * @flexjsignorecoercion HTMLElement - */ - COMPILE::JS - private function sizeChangedHandler(event:Object):void - { - var host:UIBase = _strand as UIBase; - var s:Object = host.positioner.style; - var l:Number = NaN; - var ls:String = s.left; - if (typeof(ls) === 'string' && ls.length > 0) - l = parseFloat(ls.substring(0, ls.length - 2)); - var r:Number = NaN; - var rs:String = s.right; - if (typeof(rs) === 'string' && rs.length > 0) - r = parseFloat(rs.substring(0, rs.length - 2)); - if (!isNaN(l) && - !isNaN(r)) { - // if just using size constraints and image will not shrink or grow - var computedWidth:Number = (host.positioner.offsetParent as HTMLElement).offsetWidth - - l - r; - s.width = computedWidth.toString() + 'px'; - } - var t:Number = NaN; - var ts:String = s.top; - if (typeof(ts) === 'string' && ts.length > 0) - t = parseFloat(ts.substring(0, ts.length - 2)); - var b:Number = NaN; - var bs:String = s.right; - if (typeof(bs) === 'string' && bs.length > 0) - b = parseFloat(bs.substring(0, bs.length - 2)); - if (!isNaN(t) && - !isNaN(b)) { - // if just using size constraints and image will not shrink or grow - var computedHeight:Number = (host.positioner.offsetParent as HTMLElement).offsetHeight - - t - b; - s.height = computedHeight.toString() + 'px'; - } - } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c15d36ca/frameworks/projects/HTML/src/main/resources/defaults.css ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/resources/defaults.css b/frameworks/projects/HTML/src/main/resources/defaults.css index 81d7922..c7e0ba2 100644 --- a/frameworks/projects/HTML/src/main/resources/defaults.css +++ b/frameworks/projects/HTML/src/main/resources/defaults.css @@ -185,10 +185,12 @@ Image IBeadModel: ClassReference("org.apache.flex.html.beads.models.ImageModel"); IBeadView: ClassReference("org.apache.flex.html.beads.ImageView"); } + BinaryImage { IBeadModel: ClassReference("org.apache.flex.html.beads.models.BinaryImageModel"); - IBeadView: ClassReference("org.apache.flex.html.beads.BinaryImageView"); + IBeadView: ClassReference("org.apache.flex.html.beads.ImageView"); + IBinaryImageLoader: ClassReference("org.apache.flex.html.beads.BinaryImageLoader"); } ImageAndTextButton
