1 // This is the implementation of the qml_register_type() helper.
2 //
3 // Copyright (c) 2021 Riverbank Computing Limited <info@riverbankcomputing.com>
4 //
5 // This file is part of PyQt5.
6 //
7 // This file may be used under the terms of the GNU General Public License
8 // version 3.0 as published by the Free Software Foundation and appearing in
9 // the file LICENSE included in the packaging of this file.  Please review the
10 // following information to ensure the GNU General Public License version 3.0
11 // requirements will be met: http://www.gnu.org/copyleft/gpl.html.
12 //
13 // If you do not wish to use this file under the terms of the GPL version 3.0
14 // then you may purchase a commercial license.  For more information contact
15 // info@riverbankcomputing.com.
16 //
17 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
18 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19 
20 
21 #include "qpyquick_register_type.h"
22 #include "qpyquickframebufferobject.h"
23 #include "qpyquickitem.h"
24 #include "qpyquickpainteditem.h"
25 #include "qpyquickview.h"
26 #include "qpyquickwindow.h"
27 
28 #include "sipAPIQtQuick.h"
29 
30 
qpyquick_register_type(PyTypeObject * py_type,const QMetaObject * mo,const QByteArray & ptr_name,const QByteArray & list_name,QQmlPrivate::RegisterType ** rtp)31 sipErrorState qpyquick_register_type(PyTypeObject *py_type,
32         const QMetaObject *mo, const QByteArray &ptr_name,
33         const QByteArray &list_name, QQmlPrivate::RegisterType **rtp)
34 {
35     // Make sure the types are tested in the right order (ie. more specific
36     // types first).
37 
38 #if QT_VERSION >= 0x050200
39     if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickFramebufferObject)))
40         return ((*rtp = QPyQuickFramebufferObject::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
41 #endif
42 
43     if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickPaintedItem)))
44         return ((*rtp = QPyQuickPaintedItem::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
45 
46     if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickItem)))
47         return ((*rtp = QPyQuickItem::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
48 
49     if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickView)))
50         return ((*rtp = QPyQuickView::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
51 
52     if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickWindow)))
53         return ((*rtp = QPyQuickWindow::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
54 
55     // We don't recognise the type.
56     return sipErrorContinue;
57 }
58