From 943aa9ef6fef7533a3566f230aaf878efe46725e Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 18 Nov 2021 13:27:04 +0100 Subject: PySide6: Add a sequence protocol for QRegion Pick-to: 6.2 Fixes: PYSIDE-1714 Change-Id: I581e8088e25ab31afdfc6cd5a15c55a5b418ffdc Reviewed-by: Christian Tismer --- sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml | 6 ++++++ sources/pyside6/PySide6/glue/qtgui.cpp | 14 ++++++++++++++ sources/pyside6/tests/QtGui/qregion_test.py | 10 +++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) 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 @@ + + + + + + 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() -- cgit v1.2.3