Here’s a good article on transforms (and differences with different methods)
https://css-tricks.com/transforms-on-svg-elements/

On Jul 12, 2016, at 11:29 AM, Harbs <harbs.li...@gmail.com> wrote:

> I did not think about Application. That does put  a spanner in the works, but 
> composition might make sense anyway and proxy everything. It’ll probably be a 
> lot of work, and there’s probably other things to worry about first.
> 
> HTML needs to be broken down into 3 categories: Normal DOM elements, SVG, and 
> Canvas.
> 
> Transformations on DOM elements need to be done using CSS, and that should 
> probably be delegated to a IValuesImpl. It’s supported in IE10 and later and 
> in IE9 with a prefix.[1]
> I think SVG can use CSS as well, but for transforms, they can be specified 
> directly.
> Canvas has a transform method which takes a matrix as well. EaselJS has a 
> Matrix2D object to simplify matrix transforms.
> 
> Personally, I don’t think I want to use a Spark port for my app because it’s 
> so heavy. I’m currently doing inventory on exactly which features of Spark 
> and MX we’re currently using. It will probably make more sense to add support 
> (as Beads) to regular FlexJS rather than pull in the entire Spark dependency 
> tree. We’ve been going back and forth between SVG and Canvas, and I think 
> we’re going to go with a canvas implementation for object manipulation. I’m 
> probably going to use regular FlexJS components for UI elements.
> 
> That said, it might be interesting to see what happens when I try the Spark 
> port.
> 
> For Canvas, I’m probably going to expand the CreateJS package to have more 
> complete coverage and the ability to use EaselJS Stage objects inside a 
> normal application. I’m also thinking about adding SWF support to the 
> package. The other way to go about it would be to create a new canvas API set 
> instead of using EaselJS. That would be a lot more work in the short term. I 
> don’t know if there would be long-term gains going that route. One thing I 
> noticed when using EaselJS Matrix2Ds is that the behavior did not seem 
> identical to the Flash behavior. I don’t know why that was and how easy it 
> will be to work around the issue.
> 
> As far as architecture goes, I think it would be great if different 
> implementations could be swapped out with as little pain as possible. If each 
> rendering path uses the same interfaces, that would be a good thing.
> 
> [1]http://caniuse.com/#feat=transforms2d
> On Jul 11, 2016, at 11:16 PM, Alex Harui <aha...@adobe.com> wrote:
> 
>> 
>> 
>> On 7/11/16, 12:23 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>> 
>>> It could be that instead of subclassing Flash objects, we should be using
>>> composition instead…
>> 
>> Maybe.  I started out subclassing because it would be lower overhead, and
>> so the main class could be the initial class in the SWF.  I think the
>> initial entry point has to subclass Sprite/MovieClip.
>> 
>> I know that properties like "transform" are exposed by some underlying
>> flash class right now, but IMO, FlexJS hasn't "exposed" an API unless
>> there is an org.apache.flex.* for it that cross-compiles to JS.
>> 
>> Remember that in FlexJS, there is no one way to do something.  We are
>> designing the Basic set to thinly wrap what the Browser provides, but with
>> a bit of the Flex "flavor".  I wish I'd had more time to spend on the
>> MX/Spark port because it would probably have exposed a lot of these issues
>> as well, but that component set is designed to be much more like regular
>> Flex.  IMO, we don't want to blindly implement Flash implementations in
>> the Basic set.  We want to understand how the browser implements various
>> features and Flex-ify them by giving the AS and MXML APIs.
>> 
>> So, before "transform" becomes the API for rotating things in the Basic
>> set, we want to understand how it is implemented in the browser.  Since I
>> think you are working with an existing code base from one of your apps,
>> you might want to stop and consider whether you want to invest in making
>> the MX/Spark port work better.  In those component sets we will have a
>> "transform" property.
>> 
>> We want FlexJS to be pay-as-you-go, so whatever we do to support rotation
>> must be opt-in and not baked into the base APIs for the Basic set like
>> IUIBase.  It should be possible to build a UI that doesn't need rotation
>> and not link in the rotation classes.  For the MX/Spark, we are trying to
>> implement as many existing Flex APIs as possible, so the support for
>> rotation could be baked in.
>> 
>> In the MX/Spark port, I am planning to pull off one compile trick where
>> imports of flash.*.* automatically get re-interpreted as flex.*.*.  You
>> can look at the code in the branch to see that there is a
>> flex.display.DisplayObject that doesn't yet support every
>> flash.display.DisplayObject API.  That's how I think we will incrementally
>> implement this port.
>> 
>> In a quick look, it looks like in the browser there is a CSS Transform
>> property.  And there is 2D and 3D support.  So, IMO, in the Basic set, the
>> transforms would be specified in CSS and not as properties so the base
>> classes don't have to carry around the potential for rotation.  It could
>> also be a bead of properties that gets plugged in, or even alternate views
>> like TextInputViewWithRotation.
>> 
>> At least, that's the way I think about it.  We want folks who are coding
>> from scratch to have the smallest fastest product.  Incremental baking in
>> of functionality "just-in-case" is why UIComponent is 13,000 lines long
>> and attempts to optimized failed because no one sub-feature was big enough
>> to move the needle, but the sum was just too large and unwieldy.
>> Pay-as-you-go, opt-in, just-in-time are the mantras I would like to see
>> applied to most FlexJS work.  In the MX/Spark port, the opposite is true:
>> that component set's job is to minimize migration effort at the cost of
>> size and performance since the Flex app was already bigger and slower than
>> you probably wanted.
>> 
>> Thoughts?
>> -Alex
>> 
>>> 
>>> On Jul 11, 2016, at 10:21 AM, Harbs <harbs.li...@gmail.com> wrote:
>>> 
>>>> Sure they are.
>>>> 
>>>> Try this:
>>>> var myRect:org.apache.flex.core.graphics.Rect = new
>>>> org.apache.flex.core.graphics.Rect();
>>>> var transform:Matrix = myRect.transform;
>>>> 
>>>> On Jul 11, 2016, at 10:16 AM, Alex Harui <aha...@adobe.com> wrote:
>>>> 
>>>>> 
>>>>> 
>>>>> On 7/11/16, 12:06 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>>> 
>>>>>> I believe Bitmaps use Rectangles.
>>>>> 
>>>>> OK but flash.display.Bitmap should not be exposed to the SWC's API
>>>>> surface.  Bitmap should be wrapped and rectangles in its API should be
>>>>> wrapped as well.
>>>>> 
>>>>>> 
>>>>>> FlexJS subclasses DisplayObject which returns a Flash Matrix for the
>>>>>> transform. IF you try to use transformPoint() on that, it’ll return
>>>>>> (and
>>>>>> expects) a Flash Point.
>>>>> 
>>>>> Again, the transform and flash.geom.Matrix should not be exposed to the
>>>>> SWC's API surface.
>>>>> 
>>>>> -Alex
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to