Initial work on gadget support
authorSimon Hausmann <simon.hausmann@theqtcompany.com>
Mon, 10 Nov 2014 10:39:03 +0000 (11:39 +0100)
committerSimon Hausmann <simon.hausmann@digia.com>
Mon, 22 Dec 2014 20:48:11 +0000 (21:48 +0100)
commitfa3cf15e0577fe382ac577456422ad78325a3977
tree3323ab526433f73fb644b1692c10629f01093d62
parentee771dda2e9e304edea88e6d5f6e6d540a0bab97
Initial work on gadget support

Changed built-in QtQml value types to use gadgets. This is in preparation for
supporting external gadgets.

This replaces the mostly direct inheritance of the concrete value types with
gadgets and "dynamic" inheritance through QQmlValueType being generic. Over
time as some of the value types may become gadgets, we can remove the ones
here. It's important that these "separate" gadgets have the same memory layout
as the actual types (QPointF, etc.).

Also while QQmlValueType remains practically a singleton, it's not required
anymore to be one. Consequently the JS wrappers for value types keep their own
instance of QQmlValueType. This allows eliminating the qobject_cast in various
places that dealt with the singleton nature. This comes at a cost, making the
JS wrappers slightly heavier. However that is meant to be a temporary situation
and finally the value type wrapper should merely store the meta-object in
addition to the data and the type.

Change-Id: I15071ded0a1e54203f29ec1ecf7a9ab646d1168e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
16 files changed:
src/qml/compiler/qqmlirbuilder.cpp
src/qml/compiler/qqmltypecompiler.cpp
src/qml/jsruntime/qv4qobjectwrapper.cpp
src/qml/qml/qqmlglobal.cpp
src/qml/qml/qqmlglobal_p.h
src/qml/qml/qqmlproperty.cpp
src/qml/qml/qqmlvaluetype.cpp
src/qml/qml/qqmlvaluetype_p.h
src/qml/qml/qqmlvaluetypewrapper.cpp
src/qml/qml/qqmlvaluetypewrapper_p.h
src/qml/qml/v8/qv8engine.cpp
src/quick/util/qquickglobal.cpp
src/quick/util/qquickvaluetypes.cpp
src/quick/util/qquickvaluetypes_p.h
tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp