Hi Harbs,

I think the name of the event "urlChanged" - do not say anymore what
actually has changed.
What do you think to have more general name? "imageSourceChanged" or
"imageDataChanged". Second idea is to have separate events for changed
source binary and url.

Piotr

On Mon, Aug 8, 2016, 16:48 <ha...@apache.org> wrote:

> 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;
>                 }
>
>

Reply via email to