I just added an implementation of this. I added a “DefaultRelativePosition” 
bead to the “simplify-position” feature branch. The bead sets the default 
positioning using a global selector. The bead is extremely light-weight. I 
think it’s a good solution.

Below is an app which has the default set globally to relative and behaves as 
you’d expect in Flex. Both the logical and visible position of child is 30,30, 
and the left and top values retain a value of 20 instead of 30. It might make 
sense to make the defaults in Express and Emulation to use this bead.

FWIW, The size of parent is the size of the child plus the padding and not the 
size of the child including the top and left values. (i.e. it’s 55.55x38 
instead of 75.55x58) This is due to how relative works in HTML where the drawn 
object is “ghosted” out of the natural position. I’m pretty sure that the size 
was different in Flex.

<?xml version="1.0" encoding="utf-8"?>
<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009";
                xmlns:js="library://ns.apache.org/royale/basic" xmlns:ns1="*" 
applicationComplete="onComplete()" >
    <fx:Script>
        <![CDATA[
            import org.apache.royale.utils.PointUtils;
            import org.apache.royale.geom.Point;
            private function onComplete():void{
                var point:Point = PointUtils.localToGlobal(new 
Point(0,0),child);
                trace(point);
            }
        ]]>
    </fx:Script>
    <js:valuesImpl>
        <js:SimpleCSSValuesImpl />
    </js:valuesImpl>
    <js:beads>
        <js:DefaultRelativePosition/>
    </js:beads>
    <js:initialView>
        <js:View>
            <js:Group id="theparent" style="padding:10px" >
                <js:Group id="child" x="20" y="20" >
                    <js:Label text="Hello"/>
                </js:Group>
            </js:Group>
        </js:View>
    </js:initialView>
</js:Application>

(Traces org.apache.royale.geom.Point {x: 30, y: 30})

Harbs

> On Jun 8, 2018, at 10:40 AM, Harbs <harbs.li...@gmail.com> wrote:
> 
>> 
>> I'm still wondering if BasicLayout and/or the x,y setters should set 
>> parentNode.style.positon!=static.  Then I think we could drop the 
>> offsetParent check.
> 
> We can drop the offsetParent check either way, but maybe non-static should be 
> set. I really would not want that code to be in the x and y setters though 
> unless it could be made *really* cheap. I suppose we could have a “position” 
> property on UIBase which could be used to determine whether non-static needs 
> to be set. The position setter could be overridden in component sets to allow 
> for inline styles vs css selectors.
> 
> The most PAYG way to handle this is probably with a bead which adds the 
> global position: relative selector. That approach should work fine as long as 
> the app is the body. If we ever add support to inserting a Royale app into a 
> div on a page, the global selector might cause unexpected effects on the rest 
> of the page which might rely on the default position: static setting.

Reply via email to