We had actually talked about performing caching in the container skins that required it. This would have put the responsibility for caching in the "right" place, but would have produced a lot of code duplication. The current approach is just the centralization of that logic.

This issue is an edge case that we hadn't considered, but I think it can be addressed pretty easily by providing a small amount of additional information to Component.


On Aug 11, 2009, at 12:14 PM, Niclas Hedhman wrote:

Another option is to not centralize caching in the component inheritance hierarchy and instead provide external caching strategy concerns that the components can engage.... oops, this is not Qi4j... seriously, I think that caching responsibility should not be generic... and there are a couple of
ways to provide it.

Also, if you have components with real quick siye calculation, you have just
wasted memory ;-)

-- Niclas

On Aug 11, 2009 10:44 PM, "Greg Brown (JIRA)" <[email protected]> wrote:

Cached preferred size values cause layout problems in BoxPane
-------------------------------------------------------------

               Key: PIVOT-226
               URL: https://issues.apache.org/jira/browse/PIVOT-226
           Project: Pivot
        Issue Type: Bug
  Affects Versions: 1.3
          Reporter: Greg Brown
          Assignee: Greg Brown
          Priority: Minor
           Fix For: 1.3


We currently cache the values of the preferred size calculations for
performance reasons. As a result, when a vertical BoxPane is set to fill the available space, the widest component doesn't get scaled up (nor do any
other components that report the same preferred width).

One possible fix is to call invalidate() on the component in
BoxPane#layout() before asking it for its constrained preferred height. That ensures that we get the correct value, and it doesn't impose a significant
performance penalty most of the time.

However, this may not be the "right" place to put this logic. Since this is a side effect of caching logic in Component, the logic for invalidating the
cache probably also belongs in Component. Ideally, containers such as
BoxPane shouldn't need to know that they must call invalidate() in order to
clear the cache.

A better solution may be to add a method to Skin that will allow Component
to ask it how to handle cases like this. The exact nature/name of this
method is TBD. Some ideas:

isFixedAspectRatio():boolean
isVariableAspectRatio():boolean
getPreferredAspectRatio():float (if Float.NaN, aspect ratio is not fixed)

If any of these return true/non-NaN, Component would know that it shouldn't
use the cached value.



--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to