aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2017-03-01 17:27:50 +0100
committerAlexandru Croitor <alexandru.croitor@qt.io>2017-05-19 12:33:03 +0000
commitbc8b02c1844a3362321aa19951fd826ece37251c (patch)
tree787a99a09b465fcb89e4633d7f1e65e0d9c703db
parent8465adf2f908f8ef2630e78d840e07a13660253b (diff)
Add QSharedPointer<QQuickItemGrabResult> to the type system
Also add test to check that calling QQuickItem::grabToImage() works correctly. The QSharedPointer type is added in the QtQuick typesystem file and not in QtCore to minimize the surface of issues that might come up, as well as because that's the only reasonable use case of QSharedPointer in the public API so far. Task-number: PYSIDE-454 Change-Id: Ibb7775117ffb22ab91d2ac798ae13cc9e4856587 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
-rw-r--r--PySide2/QtQuick/CMakeLists.txt1
-rw-r--r--PySide2/QtQuick/typesystem_quick.xml1
-rwxr-xr-xtests/QtQml/CMakeLists.txt1
-rw-r--r--tests/QtQml/qquickitem_grabToImage.py79
-rw-r--r--tests/QtQml/qquickitem_grabToImage.qml69
5 files changed, 151 insertions, 0 deletions
diff --git a/PySide2/QtQuick/CMakeLists.txt b/PySide2/QtQuick/CMakeLists.txt
index 11cbdf75..491fc9d9 100644
--- a/PySide2/QtQuick/CMakeLists.txt
+++ b/PySide2/QtQuick/CMakeLists.txt
@@ -11,6 +11,7 @@ ${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}/qquicktextdocument_wrapper.cpp
diff --git a/PySide2/QtQuick/typesystem_quick.xml b/PySide2/QtQuick/typesystem_quick.xml
index 0bee346b..4cee02ee 100644
--- a/PySide2/QtQuick/typesystem_quick.xml
+++ b/PySide2/QtQuick/typesystem_quick.xml
@@ -46,6 +46,7 @@
<load-typesystem name="typesystem_qml.xml" generate="no"/>
<primitive-type name="GLuint"/>
+ <smart-pointer-type name="QSharedPointer" type="shared" getter="data" />
<extra-includes>
<include file-name="pysidequickregistertype.h" location="local"/>
diff --git a/tests/QtQml/CMakeLists.txt b/tests/QtQml/CMakeLists.txt
index 78aa3345..8460a8f0 100755
--- a/tests/QtQml/CMakeLists.txt
+++ b/tests/QtQml/CMakeLists.txt
@@ -17,3 +17,4 @@ PYSIDE_TEST(connect_python_qml.py)
PYSIDE_TEST(registertype.py)
PYSIDE_TEST(javascript_exceptions.py)
PYSIDE_TEST(qqmlincubator_incubateWhile.py)
+PYSIDE_TEST(qquickitem_grabToImage.py)
diff --git a/tests/QtQml/qquickitem_grabToImage.py b/tests/QtQml/qquickitem_grabToImage.py
new file mode 100644
index 00000000..91835e68
--- /dev/null
+++ b/tests/QtQml/qquickitem_grabToImage.py
@@ -0,0 +1,79 @@
+#############################################################################
+##
+## Copyright (C) 2017 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the test suite of PySide2.
+##
+## $QT_BEGIN_LICENSE:GPL-EXCEPT$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 as published by the Free Software
+## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+import unittest
+from helper import adjust_filename, TimedQApplication
+from PySide2 import QtCore, QtGui, QtQuick
+
+class TestGrabToSharedPointerImage(TimedQApplication):
+ def setUp(self):
+ TimedQApplication.setUp(self, 1000)
+
+ def testQQuickItemGrabToImageSharedPointer(self):
+ view = QtQuick.QQuickView()
+ view.setSource(QtCore.QUrl.fromLocalFile(
+ adjust_filename('qquickitem_grabToImage.qml', __file__)))
+ view.show()
+
+ # Get the QQuickItem objects for the blue Rectangle and the Image item.
+ root = view.rootObject()
+ blueRectangle = root.findChild(QtQuick.QQuickItem, "blueRectangle")
+ imageContainer = root.findChild(QtQuick.QQuickItem, "imageContainer")
+
+ # Start the image grabbing.
+ grabResultSharedPtr = blueRectangle.grabToImage()
+
+ # Implicit call of operator bool() of the smart pointer, to check that it holds
+ # a valid pointer.
+ self.assertTrue(grabResultSharedPtr)
+
+ self.grabbedColor = None
+ def onGrabReady():
+ # Signal early exit.
+ QtCore.QTimer.singleShot(0, self.app.quit)
+
+ # Show the grabbed image in the QML Image item.
+ imageContainer.setProperty("source", grabResultSharedPtr.url())
+
+ # Wait for signal when grabbing is complete.
+ grabResultSharedPtr.ready.connect(onGrabReady)
+ self.app.exec_()
+
+ # Get the first pixel color of the grabbed image.
+ self.image = grabResultSharedPtr.image()
+ self.assertTrue(self.image)
+ self.grabbedColor = self.image.pixelColor(0,0)
+ self.assertTrue(self.grabbedColor.isValid())
+
+ # Compare the grabbed color with the one we set in the rectangle.
+ blueColor = QtGui.QColor("blue")
+ self.assertEqual(self.grabbedColor, blueColor)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/QtQml/qquickitem_grabToImage.qml b/tests/QtQml/qquickitem_grabToImage.qml
new file mode 100644
index 00000000..d103cf07
--- /dev/null
+++ b/tests/QtQml/qquickitem_grabToImage.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of PySide2.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ id: root
+ width: 600
+ height: 600
+
+ Rectangle {
+ id: blue
+ objectName: "blueRectangle"
+ width: 200
+ height: 200
+ anchors.top: root.top
+ anchors.horizontalCenter: root.horizontalCenter
+ color: "blue"
+ }
+
+ Text {
+ text: qsTr("Original blue rectangle")
+ anchors.left: blue.right
+ anchors.verticalCenter: blue.verticalCenter
+ }
+
+ Image {
+ id: imageContainer
+ objectName: "imageContainer"
+ width: 200
+ height: 200
+ anchors.bottom: root.bottom
+ anchors.horizontalCenter: root.horizontalCenter
+ }
+
+ Text {
+ text: qsTr("Image with the source URL set to the result of calling QQuickItem::grabToImage on the rectangle. If you see a second blue rectangle, that means it works.")
+ anchors.left: imageContainer.right
+ anchors.verticalCenter: imageContainer.verticalCenter
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ width: 200
+ }
+
+}