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.