Hi Alex, I just get back to it. Ok you are right that this is definitely not a fix. I should bring that code back. However I believe I'm starting to understand what is actually happening. CheckBox and RadioButton has children which are being setup royale_wrapper = this. If I use measuredWidth property I end up at some point in following place [1]. TLC is being scan with it's children - when child exists we are taking getExplicitOrMeasuredWidth, which may end with using again measuredWidth cause getExplicitOrMeasuredWidth returns it. - Here is our "Maximum call stack size exceeded" issue.
The question is should we getExplicitOrMeasuredWidth from children which has royale_wrapper = this ? [1] https://github.com/apache/royale-asjs/blob/c8783287c3e37658ef942d81797eb5337025c127/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as#L2180 Thanks, Piotr wt., 22 paź 2019 o 18:02 Alex Harui <[email protected]> napisał(a): > Responses in-line > > On 10/22/19, 1:52 AM, "Piotr Zarzycki" <[email protected]> wrote: > > Comments inline. > > pon., 21 paź 2019 o 18:25 Alex Harui <[email protected]> > napisał(a): > > > Then you will need to explain why the event handling code that uses > > royale_wrapper is not going to be invoked. Maybe there is no way to > > actually click on the icon (as opposed to the label next to the > icon)? > > > > > I just checked CheckBox and nothing has changed. I can click on every > element in CheckBox and it's being selected. > > Did you step through it in the debugger to make sure the target when > clicking on the icon element was the icon? > > > If you look through the code, I believe we set royale_wrapper on just > > about every child element in every other component. Creating an > exception > > must be justified. The actual solution (some sort of stack > overflow) might > > be better prevented by detecting the 'loop' of calls. We do that in > > several places already, like the layouts. > > > > > Yes we are, but why in case o checkbox royale_wrapper is being set to > children component (Icon in this case), as "this" ? > > royale_wrapper is used on all kinds of child elements in other components > to point to the top-level component (TLC). There is code that tries to > determine that the "CheckBox" component is the dispatcher of some event > even though the browser is going to say it was some HTMLElement. It is > effectively the back-reference from HTMLElements to the TLC. In Flash, you > could use mouseChildren and mouseTransparent to affect the event.target. > In Royale, we have APIs like Event.isSameTarget(). I'm having trouble > believing that isSameTarget is going to work if you pass in the icon. > > I think I've said this before, but IMO, there is a difference between > application coding and framework coding. When developing an application, > it is often ok for something to "just work" because that code only has to > work in that one application. In framework development, it can't just work > for the one application you happen to be working on, it has to work for > everyone else's application as well, so decision have to be based on > fundamental logic and there has to be much less (although probably not > zero) code that "just works". > > When I saw your change, my first thought was: "(almost) all child elements > should have a royale_wrapper set to the TLC, so why is this an exception?" > Somehow, we need framework developers to learn the common patterns in the > framework or go searching for them because having an exception to the rules > is usually a sign that the code isn't right, even if it appears to work for > some scenario. It will be a lot easier to teach other folks to be > framework developers and for them to learn how to debug the framework if > there is a consistent set of rules like "all child elements have > royale_wrapper set". > > I also looked at RadioButton and saw that it had its icon.royale_wrapper > set to the TLC. Is it working correctly? I grep'd the code for > royale_wrapper and saw how it was being used in lots of places and who was > reading it. And that got me thinking it was a definite pattern and your > change was an exception and while it may look like it "just works" it may > not later if there is some event dispatched off the icon and no > royale_wrapper to use to determine the TLC. Maybe if someone calls > isSameTarget on the event it will fail. > > My 2 cents, > -Alex > > > -- Piotr Zarzycki Patreon: *https://www.patreon.com/piotrzarzycki <https://www.patreon.com/piotrzarzycki>*
