Redesign of the property-system.
authorAnton Kreuzkamp <akreuzkamp@web.de>
Sun, 23 Dec 2012 15:30:48 +0000 (16:30 +0100)
committerAnton Kreuzkamp <akreuzkamp@web.de>
Sun, 23 Dec 2012 15:30:48 +0000 (16:30 +0100)
commit96971a5661db479f061dcc087394967a2dc4114f
tree0a146100d265d10bd30ad2ebe2b603c16955e4c2
parent8c147c9dda153bd3793128c686f14e4002b3490e
Redesign of the property-system.

This commit changes the way properties get calculated from a pull-system, where
the value got calculated everytime it was accessed and thus all properties got
recalculated on draw, to a push-like-system, where each property knows which
other properties are dependant on it and notifies those as soon as it changes.

The new system works like that:
All propertis do not only have a setter and a getter, but also an update-
function to recalculate the value.
If a property (e.g. x) gets assigned a property-binding as value
(e.g. parent.y), the setter will put a reference to the updater in a global
stack 'evaluatingProperties' before the property-binding gets evaluated using
evalBinding(). Now the binding will get evaluated and thus all properties our
property x will get accessed for their value, which means their getters will be
called (for our example that would be the getter of parent.y). That getter will
lookup the evaluatingProperties-registry for the property that called it and put
it in a list of dependant properties. As soon as this property (parent.y)
changes it will notify it's dependant properties (x) that it has changed by
calling their respective update-function.

This change is needed especially for the coming html-backend, which won't have
a painting-routine anymore and thus requires properties to be updated on change.

This change also removes the QMLItemF-Element as the applying of the property-
values now happens in a separate init-method, ensuring that all objects are
completely built before applying values. Thus QMLItemF is finally obsolete.
src/qtcore.js
test/testpad/repeater.qml