diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-11-18 13:27:04 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-11-19 17:50:52 +0000 |
commit | 1c1134fe90e9f185ab4b052a829dd8bf5ff0e0e8 (patch) | |
tree | 48ba09d8e1058bee1467e49d3ec7d089e8fa480c | |
parent | ac3a289ad1f8cec6e2ad8b0a266df8d1de6d3fa5 (diff) |
PySide6: Add a sequence protocol for QRegion
Fixes: PYSIDE-1714
Change-Id: I581e8088e25ab31afdfc6cd5a15c55a5b418ffdc
Reviewed-by: Christian Tismer <tismer@stackless.com>
(cherry picked from commit 943aa9ef6fef7533a3566f230aaf878efe46725e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml | 6 | ||||
-rw-r--r-- | sources/pyside6/PySide6/glue/qtgui.cpp | 14 | ||||
-rw-r--r-- | sources/pyside6/tests/QtGui/qregion_test.py | 10 |
3 files changed, 29 insertions, 1 deletions
diff --git a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml index 82098e01a..caecca7bf 100644 --- a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml +++ b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml @@ -444,6 +444,12 @@ </value-type> <value-type name="QRegion" > <enum-type name="RegionType"/> + <add-function signature="__len__"> + <inject-code class="target" position="beginning" file="../glue/qtgui.cpp" snippet="qregion-len"/> + </add-function> + <add-function signature="__getitem__"> + <inject-code class="target" position="beginning" file="../glue/qtgui.cpp" snippet="qregion-getitem"/> + </add-function> <!-- ### This operator does not make sense in Python. --> <modify-function signature="operator&=(QRegion)" remove="all"/> <modify-function signature="operator&=(QRect)" remove="all"/> diff --git a/sources/pyside6/PySide6/glue/qtgui.cpp b/sources/pyside6/PySide6/glue/qtgui.cpp index 39d5bf0ae..5630406a4 100644 --- a/sources/pyside6/PySide6/glue/qtgui.cpp +++ b/sources/pyside6/PySide6/glue/qtgui.cpp @@ -718,6 +718,20 @@ else %PYARG_0 = %CONVERTTOPYTHON[int](cppResult); // @snippet qdrag-exec-arg2 +// @snippet qregion-len +return %CPPSELF.rectCount(); +// @snippet qregion-len + +// @snippet qregion-getitem +if (_i < 0 || _i >= %CPPSELF.rectCount()) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return nullptr; +} + +const QRect cppResult = *(%CPPSELF.cbegin() + _i); +return %CONVERTTOPYTHON[QRect](cppResult); +// @snippet qregion-getitem + /********************************************************************* * CONVERSIONS ********************************************************************/ diff --git a/sources/pyside6/tests/QtGui/qregion_test.py b/sources/pyside6/tests/QtGui/qregion_test.py index e5b6a1d56..fddd04a89 100644 --- a/sources/pyside6/tests/QtGui/qregion_test.py +++ b/sources/pyside6/tests/QtGui/qregion_test.py @@ -36,7 +36,7 @@ from init_paths import init_test_paths init_test_paths(False) from PySide6.QtGui import QRegion -from PySide6.QtCore import QPoint +from PySide6.QtCore import QPoint, QRect, QSize from helper.usesqapplication import UsesQApplication @@ -52,6 +52,14 @@ class QRegionTest(UsesQApplication): self.assertTrue(ru.contains(QPoint(10, 10))) self.assertTrue(ru.contains(QPoint(14, 14))) + def testSequence(self): + region = QRegion() + region += QRect(QPoint(0, 0), QSize(10, 10)) + region += QRect(QPoint(10, 0), QSize(20, 20)) + self.assertEqual(len(region), 2) + for r in region: + pass + if __name__ == '__main__': unittest.main() |