Repository: flex-asjs Updated Branches: refs/heads/refactor-sprite a1b8ce133 -> c5a470bf8
Added Binary to Images Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c5a470bf Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c5a470bf Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c5a470bf Branch: refs/heads/refactor-sprite Commit: c5a470bf88377d5e68a9cbd5c429ad430afe0a03 Parents: a1b8ce1 Author: Harbs <ha...@in-tools.com> Authored: Mon Aug 8 17:48:01 2016 +0300 Committer: Harbs <ha...@in-tools.com> Committed: Mon Aug 8 17:48:01 2016 +0300 ---------------------------------------------------------------------- .../src/products/ProductItemRenderer.as | 2 +- .../projects/Core/src/main/flex/CoreClasses.as | 1 + .../flex/org/apache/flex/core/IImageModel.as | 17 +++++- .../main/flex/org/apache/flex/utils/URLUtils.as | 59 ++++++++++++++++++++ .../src/main/flex/org/apache/flex/html/Image.as | 29 ++++++++-- .../org/apache/flex/html/beads/ImageView.as | 26 +++++++-- .../apache/flex/html/beads/models/ImageModel.as | 46 ++++++++++++--- .../src/products/ProductItemRenderer.as | 2 +- .../src/products/ProductItemRenderer.as | 2 +- 9 files changed, 162 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/examples/flexjs/DataGridExample/src/products/ProductItemRenderer.as ---------------------------------------------------------------------- diff --git a/examples/flexjs/DataGridExample/src/products/ProductItemRenderer.as b/examples/flexjs/DataGridExample/src/products/ProductItemRenderer.as index 4edc5b7..0a954b0 100644 --- a/examples/flexjs/DataGridExample/src/products/ProductItemRenderer.as +++ b/examples/flexjs/DataGridExample/src/products/ProductItemRenderer.as @@ -48,7 +48,7 @@ package products { super.data = value; - image.source = value.image; + image.url = value.image; } override public function adjustSize():void http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/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 11061f5..1e8622b 100644 --- a/frameworks/projects/Core/src/main/flex/CoreClasses.as +++ b/frameworks/projects/Core/src/main/flex/CoreClasses.as @@ -141,6 +141,7 @@ internal class CoreClasses import org.apache.flex.utils.Timer; Timer; import org.apache.flex.utils.UIDUtil; UIDUtil; import org.apache.flex.utils.UIUtils; UIUtils; + import org.apache.flex.utils.URLUtils; URLUtils; import org.apache.flex.core.ClassFactory; ClassFactory; import org.apache.flex.states.AddItems; AddItems; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IImageModel.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IImageModel.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IImageModel.as index 1551d0f..a810d71 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IImageModel.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IImageModel.as @@ -19,6 +19,7 @@ package org.apache.flex.core { import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.utils.BinaryData; /** * The IImageModel interface describes the minimum set of properties @@ -42,7 +43,19 @@ package org.apache.flex.core * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - function get source():String; - function set source(value:String):void; + function get url():String; + function set url(value:String):void; + + /** + * The BinaryData of the image. + * This is used to set the image using binary content retrieved using HTTP requests or File APIs. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.7 + */ + function get binary():BinaryData; + function set binary(value:BinaryData):void; } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/URLUtils.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/URLUtils.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/URLUtils.as new file mode 100644 index 0000000..d7ac18a --- /dev/null +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/URLUtils.as @@ -0,0 +1,59 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.utils +{ + /** + * The URLUtils class is a collection of static functions that wrap dealing with object URLs in the browser. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.7 + */ + COMPILE::JS + public class URLUtils + { + /** + * Creates an object URL for of a blob or a file + * @param blobOrFile:* The blob of file + * @param win:*=null The active window can be optionally specified + * @return The object URL + */ + public static function createObjectURL(blobOrFile:*,win:*=null):String + { + win = win || window; + if(win["URL"]) + return win["URL"].createObjectURL(blobOrFile); + if(win.webkitURL) + return win.webkitURL.createObjectURL(blobOrFile); + + return ""; + } + public static function revokeObjectURL(objectURL:String,win:*=null):void + { + win = win || window; + if(win["URL"]) + win["URL"].revokeObjectURL(objectURL); + if(win.webkitURL) + win.webkitURL.revokeObjectURL(objectURL); + } + } + +} + http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as index ae81c18..07a9a27 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as @@ -20,6 +20,7 @@ package org.apache.flex.html { import org.apache.flex.core.IImageModel; import org.apache.flex.core.UIBase; + import org.apache.flex.utils.BinaryData; COMPILE::JS { import org.apache.flex.core.WrappedHTMLElement; @@ -31,7 +32,7 @@ package org.apache.flex.html * The Image class is a component that displays a bitmap. The Image uses * the following beads: * - * org.apache.flex.core.IBeadModel: the data model for the Image, including the source property. + * org.apache.flex.core.IBeadModel: the data model for the Image, including the url/binary property. * org.apache.flex.core.IBeadView: constructs the visual elements of the component. * * @langversion 3.0 @@ -63,13 +64,31 @@ package org.apache.flex.html * @productversion FlexJS 0.0 * @flexjsignorecoercion org.apache.flex.core.IImageModel */ - public function get source():String + public function get url():String { - return (model as IImageModel).source; + return (model as IImageModel).url; } - public function set source(value:String):void + public function set url(value:String):void { - (model as IImageModel).source = value; + (model as IImageModel).url = value; + } + + /** + * The binary bitmap data. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + * @flexjsignorecoercion org.apache.flex.core.IImageModel + */ + public function get binary():BinaryData + { + return (model as IImageModel).binary; + } + public function set binary(value:BinaryData):void + { + (model as IImageModel).binary = value; } /** http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/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 77c970a..8533d02 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 @@ -29,6 +29,7 @@ package org.apache.flex.html.beads COMPILE::JS { import goog.events; + import org.apache.flex.utils.URLUtils; } import org.apache.flex.core.BeadViewBase; @@ -39,6 +40,7 @@ package org.apache.flex.html.beads import org.apache.flex.core.UIBase; import org.apache.flex.events.Event; import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.utils.BinaryData; /** * The ImageView class creates the visual elements of the org.apache.flex.html.Image component. @@ -68,6 +70,7 @@ package org.apache.flex.html.beads private var loader:Loader; private var _model:IImageModel; + private var _objectURL:String; /** * @copy org.apache.flex.core.IBead#strand @@ -101,25 +104,40 @@ package org.apache.flex.html.beads { COMPILE::SWF { - if (_model.source) { + if (_model.url || model.binary) { loader = new Loader(); loader.contentLoaderInfo.addEventListener("complete",onComplete); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void { trace(e); e.preventDefault(); }); - loader.load(new URLRequest(_model.source)); + if(model.url) + loader.load(new URLRequest(_model.url)); + else + loader.loadBytes(_model.binary.array); } } COMPILE::JS { - if (_model.source) { + if (_model.url || model.binary) { var host:IUIBase = _strand as IUIBase; (host.element as HTMLImageElement).addEventListener('load', loadHandler, false); host.addEventListener('sizeChanged', sizeChangedHandler); - (host.element as HTMLImageElement).src = _model.source; + var urlStr:String = _model.url; + + if(_model.binary) + { + if(_objectURL) + URLUtils.revokeObjectURL(_objectURL); + var blob:Blob = new Blob([_model.binary.array]); +// I don't think we need to specify the type. +// var blob = new Blob([response], {type: "image/png"}); + _objectURL = URLUtils.createObjectURL(blob); + urlStr = _objectURL + } + (host.element as HTMLImageElement).src = urlStr; } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/models/ImageModel.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/models/ImageModel.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/models/ImageModel.as index 7742c2b..91155d9 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/models/ImageModel.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/models/ImageModel.as @@ -22,6 +22,7 @@ package org.apache.flex.html.beads.models import org.apache.flex.core.IStrand; import org.apache.flex.events.Event; import org.apache.flex.events.EventDispatcher; + import org.apache.flex.utils.BinaryData; /** * The ImageModel class bead defines the data associated with an org.apache.flex.html.Image @@ -62,26 +63,55 @@ package org.apache.flex.html.beads.models _strand = value; } - private var _source:String; + private var _url:String; /** - * The source of the image. + * The url of the image. * - * @copy org.apache.flex.core.IImageModel#source + * @copy org.apache.flex.core.IImageModel#url * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public function get source():String + public function get url():String { - return _source; + return _url; } - public function set source(value:String):void + public function set url(value:String):void { - if (value != _source) { - _source = value; + if (value != _url) { + _url = value; + if(value) + _binary = null; + dispatchEvent( new Event("urlChanged") ); + } + } + + private var _binary:BinaryData; + + /** + * The BinaryData of the image. + * This is used to set the image using binary content retrieved using HTTP requests or File APIs. + * + * @copy org.apache.flex.core.IImageModel#binary + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get binary():BinaryData + { + return _binary; + } + public function set binary(value:BinaryData):void + { + if (value != _binary) { + _binary = value; + if(value) + _url = ""; dispatchEvent( new Event("urlChanged") ); } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/manualtests/ContainerTest/src/products/ProductItemRenderer.as ---------------------------------------------------------------------- diff --git a/manualtests/ContainerTest/src/products/ProductItemRenderer.as b/manualtests/ContainerTest/src/products/ProductItemRenderer.as index f7ca68b..5cb47c9 100644 --- a/manualtests/ContainerTest/src/products/ProductItemRenderer.as +++ b/manualtests/ContainerTest/src/products/ProductItemRenderer.as @@ -57,7 +57,7 @@ package products { super.data = value; - image.source = data.image; + image.url = data.image; title.text = data.title; detail.text = data.detail; } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c5a470bf/manualtests/ListsTest/src/products/ProductItemRenderer.as ---------------------------------------------------------------------- diff --git a/manualtests/ListsTest/src/products/ProductItemRenderer.as b/manualtests/ListsTest/src/products/ProductItemRenderer.as index c1bab26..2983149 100644 --- a/manualtests/ListsTest/src/products/ProductItemRenderer.as +++ b/manualtests/ListsTest/src/products/ProductItemRenderer.as @@ -57,7 +57,7 @@ package products { super.data = value; - image.source = data.image; + image.url = data.image; title.text = data.title; detail.text = data.detail; }