From 547a61a433e2e035d8386c6534c1f86381e57cc7 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Wed, 1 Mar 2017 17:27:50 +0100 Subject: [Reland] Add QSharedPointer 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. The commit was missing in 5.9 branch after repo merge. Task-number: PYSIDE-454 Change-Id: Ibb7775117ffb22ab91d2ac798ae13cc9e4856587 Reviewed-by: Friedemann Kleint --- tests/QtQml/qquickitem_grabToImage.py | 79 ++++++++++++++++++++++++++++++++++ tests/QtQml/qquickitem_grabToImage.qml | 69 +++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 tests/QtQml/qquickitem_grabToImage.py create mode 100644 tests/QtQml/qquickitem_grabToImage.qml (limited to 'tests') diff --git a/tests/QtQml/qquickitem_grabToImage.py b/tests/QtQml/qquickitem_grabToImage.py new file mode 100644 index 000000000..91835e689 --- /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 000000000..d103cf076 --- /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 + } + +} -- cgit v1.2.3