diff options
Diffstat (limited to 'sources/pyside6/PySide6/QtQuick')
4 files changed, 460 insertions, 0 deletions
diff --git a/sources/pyside6/PySide6/QtQuick/CMakeLists.txt b/sources/pyside6/PySide6/QtQuick/CMakeLists.txt new file mode 100644 index 000000000..775230242 --- /dev/null +++ b/sources/pyside6/PySide6/QtQuick/CMakeLists.txt @@ -0,0 +1,119 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +project(QtQuick) + +set(QtQuick_DROPPED_ENTRIES) + +set(QtQuick_registerType "${QtQuick_SOURCE_DIR}/pysidequickregistertype.cpp") + +# Exclude sources that have clashing static helper functions named "renderstate_..." +set(QtQuick_SRC_UNITY_EXCLUDED_SRC + ${QtQuick_GEN_DIR}/qsgrendernode_renderstate_wrapper.cpp + ${QtQuick_GEN_DIR}/qsgmaterialshader_renderstate_wrapper.cpp +) + +set_property(SOURCE ${QtQuick_SRC_UNITY_EXCLUDED_SRC} + PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) + +set(QtQuick_SRC +${QtQuick_SRC_UNITY_EXCLUDED_SRC} +${QtQuick_GEN_DIR}/qquickasyncimageprovider_wrapper.cpp +${QtQuick_GEN_DIR}/qquickgraphicsconfiguration_wrapper.cpp +${QtQuick_GEN_DIR}/qquickgraphicsdevice_wrapper.cpp +${QtQuick_GEN_DIR}/qquicktexturefactory_wrapper.cpp +${QtQuick_GEN_DIR}/qquickimageprovider_wrapper.cpp +${QtQuick_GEN_DIR}/qquickimageresponse_wrapper.cpp +${QtQuick_GEN_DIR}/qquicktransform_wrapper.cpp +${QtQuick_GEN_DIR}/qquickitem_wrapper.cpp +${QtQuick_GEN_DIR}/qquickitem_updatepaintnodedata_wrapper.cpp +${QtQuick_GEN_DIR}/qquickitemgrabresult_wrapper.cpp +${QtQuick_GEN_DIR}/qsharedpointer_qquickitemgrabresult_wrapper.cpp +${QtQuick_GEN_DIR}/qquickpainteditem_wrapper.cpp +${QtQuick_GEN_DIR}/qquickrendercontrol_wrapper.cpp +${QtQuick_GEN_DIR}/qquickrendertarget_wrapper.cpp +${QtQuick_GEN_DIR}/qquickrhiitemrenderer_wrapper.cpp +${QtQuick_GEN_DIR}/qquickrhiitem_wrapper.cpp +${QtQuick_GEN_DIR}/qquicktextdocument_wrapper.cpp +${QtQuick_GEN_DIR}/qquickview_wrapper.cpp +${QtQuick_GEN_DIR}/qquickwindow_wrapper.cpp +${QtQuick_GEN_DIR}/qquickwindow_graphicsstateinfo_wrapper.cpp +${QtQuick_GEN_DIR}/qsgbasicgeometrynode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgclipnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgdynamictexture_wrapper.cpp +${QtQuick_GEN_DIR}/qsgflatcolormaterial_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_attribute_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_attributeset_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_coloredpoint2d_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_point2d_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_texturedpoint2d_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometrynode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgimagenode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgmaterial_wrapper.cpp +${QtQuick_GEN_DIR}/qsgmaterialshader_wrapper.cpp +${QtQuick_GEN_DIR}/qsgmaterialshader_graphicspipelinestate_wrapper.cpp +${QtQuick_GEN_DIR}/qsgmaterialtype_wrapper.cpp +${QtQuick_GEN_DIR}/qsgninepatchnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgnodevisitor_wrapper.cpp +${QtQuick_GEN_DIR}/qsgopacitynode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgopaquetexturematerial_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgsimplematerial_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgsimplematerialshader_wrapper.cpp +${QtQuick_GEN_DIR}/qsgrectanglenode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgrendernode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgrootnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgsimplerectnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgsimpletexturenode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgrendererinterface_wrapper.cpp +${QtQuick_GEN_DIR}/qsgtextnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgtexture_wrapper.cpp +${QtQuick_GEN_DIR}/qsgtexturematerial_wrapper.cpp +${QtQuick_GEN_DIR}/qsgtextureprovider_wrapper.cpp +${QtQuick_GEN_DIR}/qsgtransformnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgvertexcolormaterial_wrapper.cpp +# module is always needed +${QtQuick_GEN_DIR}/qtquick_module_wrapper.cpp +) + +set(QtQuick_include_dirs ${QtQuick_SOURCE_DIR} + ${QtQml_SOURCE_DIR} + ${Qt${QT_MAJOR_VERSION}Core_INCLUDE_DIRS} + ${Qt${QT_MAJOR_VERSION}Core_PRIVATE_INCLUDE_DIRS} + ${Qt${QT_MAJOR_VERSION}Gui_INCLUDE_DIRS} + ${Qt${QT_MAJOR_VERSION}Network_INCLUDE_DIRS} + ${Qt${QT_MAJOR_VERSION}Qml_INCLUDE_DIRS} + ${Qt${QT_MAJOR_VERSION}Qml_PRIVATE_INCLUDE_DIRS} + ${Qt${QT_MAJOR_VERSION}Quick_INCLUDE_DIRS} + ${libpyside_SOURCE_DIR} + ${QtGui_GEN_DIR} + ${QtCore_GEN_DIR} + ${QtNetwork_GEN_DIR} + ${QtQml_GEN_DIR} + ${QtQuick_GEN_DIR}) + +set(QtQuick_libraries pyside6 pyside6qml + ${Qt${QT_MAJOR_VERSION}Quick_LIBRARIES}) + +set(QtQuick_deps QtGui QtNetwork QtQml) + +check_qt_opengl("Quick" QtQuick_include_dirs QtQuick_deps + QtQuick_DROPPED_ENTRIES) + +if (Qt${QT_MAJOR_VERSION}OpenGL_FOUND) + list(APPEND QtQuick_SRC + ${QtQuick_GEN_DIR}/qquickframebufferobject_wrapper.cpp + ${QtQuick_GEN_DIR}/qquickframebufferobject_renderer_wrapper.cpp) +else() + list(APPEND QtQuick_DROPPED_ENTRIES QQuickFramebufferObject) +endif() + +create_pyside_module(NAME QtQuick + INCLUDE_DIRS QtQuick_include_dirs + LIBRARIES QtQuick_libraries + DEPS QtQuick_deps + TYPESYSTEM_PATH QtQuick_SOURCE_DIR + SOURCES QtQuick_SRC + STATIC_SOURCES QtQuick_registerType + DROPPED_ENTRIES QtQuick_DROPPED_ENTRIES) diff --git a/sources/pyside6/PySide6/QtQuick/pysidequickregistertype.cpp b/sources/pyside6/PySide6/QtQuick/pysidequickregistertype.cpp new file mode 100644 index 000000000..f7749b4e7 --- /dev/null +++ b/sources/pyside6/PySide6/QtQuick/pysidequickregistertype.cpp @@ -0,0 +1,76 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "pysidequickregistertype.h" + +#include <pyside.h> +#include <pysideqmlregistertype.h> +#include <pyside_p.h> +#include <shiboken.h> + +#include <QtQuick/QQuickPaintedItem> + +#if QT_CONFIG(opengl) || QT_CONFIG(opengles2) || QT_CONFIG(opengles3) +# include <QtQuick/QQuickFramebufferObject> +#endif + +bool pyTypeObjectInheritsFromClass(PyTypeObject *pyObjType, const char *classPtrName) +{ + PyTypeObject *classPyType = Shiboken::Conversions::getPythonTypeObject(classPtrName); + bool isDerived = PySequence_Contains(pyObjType->tp_mro, + reinterpret_cast<PyObject *>(classPyType)); + return isDerived; +} + +template <class WrappedClass> +bool registerTypeIfInheritsFromClass(const char *classPtrName, + PyTypeObject *typeToRegister, + QQmlPrivate::RegisterTypeAndRevisions *type) +{ + if (!pyTypeObjectInheritsFromClass(typeToRegister, classPtrName)) + return false; + type->parserStatusCast = + QQmlPrivate::StaticCastSelector<WrappedClass, QQmlParserStatus>::cast(); + type->valueSourceCast = + QQmlPrivate::StaticCastSelector<WrappedClass, QQmlPropertyValueSource>::cast(); + type->valueInterceptorCast = + QQmlPrivate::StaticCastSelector<WrappedClass, QQmlPropertyValueInterceptor>::cast(); + return true; +} + +bool quickRegisterType(PyObject *pyObj, QQmlPrivate::RegisterTypeAndRevisions *type) +{ + using namespace Shiboken; + + PyTypeObject *pyObjType = reinterpret_cast<PyTypeObject *>(pyObj); + PyTypeObject *qQuickItemPyType = + Shiboken::Conversions::getPythonTypeObject("QQuickItem*"); + bool isQuickItem = PySequence_Contains(pyObjType->tp_mro, + reinterpret_cast<PyObject *>(qQuickItemPyType)); + + // Register only classes that inherit QQuickItem or its children. + if (!isQuickItem) + return false; + + return registerTypeIfInheritsFromClass<QQuickPaintedItem>("QQuickPaintedItem*", + pyObjType, type) +#if QT_CONFIG(opengl) || QT_CONFIG(opengles2) || QT_CONFIG(opengles3) + || registerTypeIfInheritsFromClass<QQuickFramebufferObject>("QQuickFramebufferObject*", + pyObjType, type) +#endif + || registerTypeIfInheritsFromClass<QQuickItem>("QQuickItem*", + pyObjType, type); +} + +void PySide::initQuickSupport(PyObject *module) +{ + Q_UNUSED(module); + // We need to manually register a pointer version of these types in order for them to be used as property types. + qRegisterMetaType<QQuickPaintedItem*>("QQuickPaintedItem*"); +#if QT_CONFIG(opengl) || QT_CONFIG(opengles2) || QT_CONFIG(opengles3) + qRegisterMetaType<QQuickFramebufferObject*>("QQuickFramebufferObject*"); +#endif + qRegisterMetaType<QQuickItem*>("QQuickItem*"); + + Qml::setQuickRegisterItemFunction(quickRegisterType); +} diff --git a/sources/pyside6/PySide6/QtQuick/pysidequickregistertype.h b/sources/pyside6/PySide6/QtQuick/pysidequickregistertype.h new file mode 100644 index 000000000..89e0ced67 --- /dev/null +++ b/sources/pyside6/PySide6/QtQuick/pysidequickregistertype.h @@ -0,0 +1,14 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef PYSIDE_QUICK_REGISTER_TYPE_H +#define PYSIDE_QUICK_REGISTER_TYPE_H + +#include <sbkpython.h> + +namespace PySide +{ +void initQuickSupport(PyObject *module); +} + +#endif // PYSIDE_QUICK_REGISTER_TYPE_H diff --git a/sources/pyside6/PySide6/QtQuick/typesystem_quick.xml b/sources/pyside6/PySide6/QtQuick/typesystem_quick.xml new file mode 100644 index 000000000..61aed6005 --- /dev/null +++ b/sources/pyside6/PySide6/QtQuick/typesystem_quick.xml @@ -0,0 +1,251 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +--> +<typesystem package="PySide6.QtQuick" + namespace-begin="QT_BEGIN_NAMESPACE" namespace-end="QT_END_NAMESPACE"> + <load-typesystem name="QtCore/typesystem_core.xml" generate="no"/> + <load-typesystem name="QtNetwork/typesystem_network.xml" generate="no"/> + <load-typesystem name="QtGui/typesystem_gui.xml" generate="no"/> + <!-- QQuickFramebufferObject::Renderer needs QOpenGLFramebufferObject --> + <?if !no_QtOpenGL?> + <load-typesystem name="QtOpenGL/typesystem_opengl.xml" generate="no"/> + <?endif?> + <load-typesystem name="QtQml/typesystem_qml.xml" generate="no"/> + + <smart-pointer-type name="QSharedPointer" type="shared" getter="data" + reset-method="reset"/> + + <extra-includes> + <include file-name="pysidequickregistertype.h" location="local"/> + </extra-includes> + + <inject-code class="target" position="end" file="../glue/qtquick.cpp" snippet="qtquick"/> + + <object-type name="QQuickAsyncImageProvider"> + <modify-function signature="requestImageResponse(const QString&,const QSize&)"> + <modify-argument index="return"> + <define-ownership class="native" owner="c++"/> + </modify-argument> + </modify-function> + </object-type> + + <object-type name="QQuickFramebufferObject"> + <object-type name="Renderer"/> + <modify-function signature="createRenderer()const"> + <modify-argument index="return"> + <define-ownership class="native" owner="c++"/> + </modify-argument> + </modify-function> + </object-type> + + <value-type name="QQuickGraphicsConfiguration"/> + <value-type name="QQuickGraphicsDevice"> + <!-- PYSIDE-1726, after qtbase/696d94b132b2f352b5e6b889ad91c2437417fae8, + the functions are defined with dummy types when Vulkan is not present. --> + <modify-function signature="^fromPhysicalDevice\(.*$" remove="all"/> + <modify-function signature="^fromDeviceObjects\(.*$" remove="all"/> + </value-type> + + <object-type name="QQuickTextureFactory"/> + <object-type name="QQuickImageProvider"/> + <object-type name="QQuickImageResponse"/> + + <object-type name="QQuickTransform"/> + <object-type name="QQuickItem" delete-in-main-thread="true" polymorphic-base="true"> + <value-type name="UpdatePaintNodeData"/> + <enum-type name="Flag" flags="Flags"/> + <enum-type name="ItemChange"/> + <enum-type name="TransformOrigin"/> + <modify-function signature="itemTransform(QQuickItem*,bool*)const" allow-thread="yes"> + <modify-argument index="2"> + <remove-argument /> + </modify-argument> + <modify-argument index="return" pyi-type="Tuple[bool, PySide6.QtGui.QTransform]"> + <replace-type modified-type="PyTuple"/> + </modify-argument> + <inject-code class="target" position="beginning"> + <insert-template name="fix_args,bool*"/> + </inject-code> + </modify-function> + <modify-function signature="updatePaintNode(QSGNode*,QQuickItem::UpdatePaintNodeData*)"> + <modify-argument index="return"> + <define-ownership class="native" owner="c++"/> + <define-ownership class="target" owner="default"/> + </modify-argument> + </modify-function> + + <!-- TODO: Find a way to wrap `union ItemChangeData {}` --> + </object-type> + + <object-type name="QQuickRhiItemRenderer" since="6.7"/> + <object-type name="QQuickRhiItem" since="6.7"> + <enum-type name="TextureFormat"/> + </object-type> + + <object-type name="QQuickItemGrabResult"/> + + <object-type name="QQuickPaintedItem"> + <enum-type name="RenderTarget"/> + <enum-type name="PerformanceHint" flags="PerformanceHints"/> + </object-type> + + <object-type name="QQuickRenderControl"/> + <value-type name="QQuickRenderTarget"> + <!-- PYSIDE-1726, after qtbase/696d94b132b2f352b5e6b889ad91c2437417fae8, + the function is defined with dummy types when Vulkan is not present. --> + <modify-function signature="^fromVulkanImage\(.*$" remove="all"/> + </value-type> + + <object-type name="QQuickTextDocument"> + <enum-type name="Status" since="6.7"/> + </object-type> + + <object-type name="QQuickView"> + <enum-type name="ResizeMode"/> + <enum-type name="Status"/> + </object-type> + + <object-type name="QQuickWindow"> + <enum-type name="CreateTextureOption" flags="CreateTextureOptions"/> + <enum-type name="RenderStage"/> + <enum-type name="SceneGraphError"/> + <enum-type name="TextRenderType"/> + <value-type name="GraphicsStateInfo"/> + </object-type> + + <object-type name="QSGBasicGeometryNode"> + <modify-function signature="setGeometry(QSGGeometry*)"> + <modify-argument index="1"> + <define-ownership class="target" owner="c++"/> + </modify-argument> + </modify-function> + </object-type> + + <object-type name="QSGClipNode"/> + <object-type name="QSGDynamicTexture"/> + <object-type name="QSGFlatColorMaterial"/> + <object-type name="QSGGeometry"> + <extra-includes> + <include file-name="algorithm" location="global"/> + </extra-includes> + <enum-type name="DataPattern"/> + <enum-type name="AttributeType"/> + <enum-type name="DrawingMode" python-type="IntEnum"/> + <enum-type name="Type"/> + <value-type name="Attribute"/> + <value-type name="AttributeSet"/> + <value-type name="ColoredPoint2D"/> + <value-type name="Point2D"/> + <value-type name="TexturedPoint2D"/> + <modify-function signature="vertexDataAsPoint2D()"> + <modify-argument index="return"> + <replace-type modified-type="PyObject*"/> + </modify-argument> + <inject-code class="target" file="../glue/qtquick.cpp" snippet="qsgeometry-vertexdataaspoint2d"/> + </modify-function> + <add-function signature="setVertexDataAsPoint2D(const QList<QSGGeometry::Point2D>&@points@)"> + <inject-code class="target" file="../glue/qtquick.cpp" snippet="qsgeometry-setvertexdataaspoint2d"/> + <inject-documentation format="target" mode="append"> + Sets the vertex data from a list of QSGGeometry.Point2D. + The list size must match the allocated number of vertexes + as returned by QSGGeometry.vertexCount(). + </inject-documentation> + </add-function> + + </object-type> + <object-type name="QSGGeometryNode"> + <modify-function signature="setMaterial(QSGMaterial*)"> + <modify-argument index="1"> + <define-ownership class="target" owner="c++"/> + </modify-argument> + </modify-function> + <modify-function signature="setOpaqueMaterial(QSGMaterial*)"> + <modify-argument index="1"> + <define-ownership class="target" owner="c++"/> + </modify-argument> + </modify-function> + </object-type> + + <object-type name="QSGImageNode"> + <enum-type name="TextureCoordinatesTransformFlag" flags="TextureCoordinatesTransformMode"/> + </object-type> + + <object-type name="QSGMaterial"> + <enum-type name="Flag" flags="Flags"/> + </object-type> + <object-type name="QSGMaterialShader"> + <enum-type name="Stage"/> + <enum-type name="Flag" flags="Flags"/> + <value-type name="RenderState"> + <enum-type name="DirtyState" flags="DirtyStates"/> + </value-type> + <value-type name="GraphicsPipelineState"> + <enum-type name="BlendFactor"/> + <enum-type name="ColorMaskComponent" flags="ColorMask"/> + <enum-type name="CullMode"/> + <enum-type name="PolygonMode"/> + </value-type> + <modify-function signature="updateSampledImage(QSGMaterialShader::RenderState&,int,QSGTexture**,QSGMaterial*,QSGMaterial*)" remove="all"/> + <!-- Private QRhi class --> + <modify-function signature="setShader(QSGMaterialShader::Stage,QShader)" remove="all"/> + </object-type> + <object-type name="QSGMaterialType"/> + <object-type name="QSGNinePatchNode"/> + <object-type name="QSGNode"> + <enum-type name="DirtyStateBit" flags="DirtyState"/> + <enum-type name="Flag" flags="Flags"/> + <enum-type name="NodeType"/> + </object-type> + <object-type name="QSGNodeVisitor"/> + + <object-type name="QSGOpacityNode"/> + <object-type name="QSGOpaqueTextureMaterial"/> + <object-type name="QSGSimpleRectNode"/> + <object-type name="QSGSimpleTextureNode"> + <enum-type name="TextureCoordinatesTransformFlag" flags="TextureCoordinatesTransformMode"/> + </object-type> + <object-type name="QSGTextNode" since="6.7"> + <enum-type name="TextStyle"/> + <enum-type name="RenderType"/> + </object-type> + <object-type name="QSGRectangleNode"/> + <object-type name="QSGRendererInterface"> + <enum-type name="GraphicsApi"/> + <enum-type name="Resource"/> + <enum-type name="ShaderType"/> + <enum-type name="ShaderCompilationType" flags="ShaderCompilationTypes"/> + <enum-type name="ShaderSourceType" flags="ShaderSourceTypes"/> + <enum-type name="RenderMode"/> + </object-type> + <object-type name="QSGRenderNode"> + <enum-type name="StateFlag" flags="StateFlags"/> + <enum-type name="RenderingFlag" flags="RenderingFlags"/> + <object-type name="RenderState"/> + </object-type> + <object-type name="QSGRootNode"/> + <object-type name="QSGTexture"> + <enum-type name="AnisotropyLevel"/> + <enum-type name="Filtering"/> + <enum-type name="WrapMode"/> + </object-type> + <object-type name="QSGTextureMaterial"/> + <object-type name="QSGTextureProvider"/> + <object-type name="QSGTransformNode"/> + <object-type name="QSGVertexColorMaterial"/> + + <!-- These currently don't work because they are template classes, and the generator chokes on + them. Making these work properly would require fixing the parsing of template classes, + allowing creation of State structures and passing them to the template classes, as well as + implementing some mechanism of registration of the custom template classes, kind of how + it's done for qt quick items. + <object-type name="QSGSimpleMaterial"/> + <object-type name="QSGSimpleMaterialShader"/> + --> + + <suppress-warning text="^signature.*fromVulkanImage.*not found.*$"/> + <suppress-warning text="^signature.*fromPhysicalDevice.*not found.*$"/> + <suppress-warning text="^signature.*fromDeviceObjects.*not found.*$"/> + +</typesystem> |