On 06/22/2009 06:38 AM, Artem Ananiev wrote:
I'd be personally fine with another approach: don't traverse up all the parents of the components and check if they all are valid as it's done now. Instead, we can find the top-most valid container and perform the mixing for all its children only.
Could you elaborate on this proposal?

1. Have an invalid flag and an invalidForHwMixing flag. A call to
invalidate() would set both up the hierarchy until a validate root is
reach, then only the invalid flag would be set up until the root
window. A call to validate would of course clear both. The clip
algorithm would consider this invalidForHwMixing flag instead of the
invalid flag.

HW/LW components mixing is considered to be completely transparent for the developers. That's why I think we shouldn't introduce any new (public) API to support it. And introducing a new flag would make our code even harder to understand.
Whilst I agree that adding a new flag is a bad idea from the code readability point of view, I want to mention that the flag must not be public at all. If we choose to implement this solution, the flag might be private/AWTAccessor-accessible.

2. Make it so that revalidate does not mark the ancestors of the
validate root invalid. I wonder if this is a sensible approach though.

This is roughly what is described in 6852592.
This solution seems to be compatible with how Swing developers used to write their code: calling revalidate() after layout-related information changes is a known requirement. So modifying the method as suggested in the RFE description would make all existing Swing applications mixing-friendly - should they ever embed a hw component. But if they do not embed anything hw, their behavior and performance should not be greatly affected.

3. Do not take the invalid flag into consideration for the Lw/Hw clip,
but defer and aggregate (coalesce) shape calculations requests. This
Well, actually watching the 'valid' flag is a kind of deferring implemented right now. But obviously it needs a better trigger. <top-level>.validate() works, but is not convenient. Hence the discussion.

--
best regards,
Anthony

Reply via email to