From 31f9c57bc50ae053cfaf039a1dfdb128e2494458 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 20 Oct 2015 13:18:59 +0300 Subject: Fix issues with COIN builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -Fix miscellaneous compile errors -Move manual tests to manual folder and enable export of autotests -Added widgets requirement -Fixed autotests -Fixed renderer and controller synchronization in QML case -Treat fallback Mesa as ES2 similar to setting AA_UseSoftwareOpenGL Change-Id: If6619733725d079e339bef16262e5ea1450ab20f Reviewed-by: Tomi Korpipää --- tests/manual/qmldynamicdata/main.cpp | 51 ++++ .../qml/qmldynamicdata/NewButton.qml | 46 ++++ .../qmldynamicdata/qml/qmldynamicdata/main.qml | 263 +++++++++++++++++++++ tests/manual/qmldynamicdata/qmldynamicdata.pro | 9 + tests/manual/qmldynamicdata/qmldynamicdata.qrc | 6 + 5 files changed, 375 insertions(+) create mode 100644 tests/manual/qmldynamicdata/main.cpp create mode 100644 tests/manual/qmldynamicdata/qml/qmldynamicdata/NewButton.qml create mode 100644 tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml create mode 100644 tests/manual/qmldynamicdata/qmldynamicdata.pro create mode 100644 tests/manual/qmldynamicdata/qmldynamicdata.qrc (limited to 'tests/manual/qmldynamicdata') diff --git a/tests/manual/qmldynamicdata/main.cpp b/tests/manual/qmldynamicdata/main.cpp new file mode 100644 index 00000000..b2f98108 --- /dev/null +++ b/tests/manual/qmldynamicdata/main.cpp @@ -0,0 +1,51 @@ +/****************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Data Visualization module. +** +** $QT_BEGIN_LICENSE:COMM$ +** +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** $QT_END_LICENSE$ +** +******************************************************************************/ + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QQuickView viewer; + + // The following are needed to make examples run without having to install the module + // in desktop environments. +#ifdef Q_OS_WIN + QString extraImportPath(QStringLiteral("%1/../../../%2")); +#else + QString extraImportPath(QStringLiteral("%1/../../%2")); +#endif + viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(), + QString::fromLatin1("qml"))); + QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close); + + viewer.setTitle(QStringLiteral("QML Dynamic Data Test")); + + viewer.setSource(QUrl("qrc:/qml/qmldynamicdata/main.qml")); + viewer.setResizeMode(QQuickView::SizeRootObjectToView); + viewer.show(); + + return app.exec(); +} diff --git a/tests/manual/qmldynamicdata/qml/qmldynamicdata/NewButton.qml b/tests/manual/qmldynamicdata/qml/qmldynamicdata/NewButton.qml new file mode 100644 index 00000000..ff191e77 --- /dev/null +++ b/tests/manual/qmldynamicdata/qml/qmldynamicdata/NewButton.qml @@ -0,0 +1,46 @@ +/****************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Data Visualization module. +** +** $QT_BEGIN_LICENSE:COMM$ +** +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** $QT_END_LICENSE$ +** +******************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Controls 1.0 + +Item { + id: newbutton + + property alias text: buttonText.text + + signal clicked + + height: 80 + + Button { + width: parent.width + height: parent.height + Text { + id: buttonText + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + anchors.fill: parent + } + onClicked: newbutton.clicked() + } +} diff --git a/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml b/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml new file mode 100644 index 00000000..00cc2271 --- /dev/null +++ b/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml @@ -0,0 +1,263 @@ +/****************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Data Visualization module. +** +** $QT_BEGIN_LICENSE:COMM$ +** +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** $QT_END_LICENSE$ +** +******************************************************************************/ + +import QtQuick 2.1 +import QtDataVisualization 1.0 +import "." + +Rectangle { + id: mainView + width: 1280 + height: 720 + visible: true + + ListModel { + id: graphModel + ListElement{ xPos: 0.0; yPos: 0.0; zPos: 0.0; rotation: "0.92388, 0.220942, 0.220942, 0.220942"} + ListElement{ xPos: 1.0; yPos: 1.0; zPos: 1.0; rotation: "@45,1.0,1.0,1.0" } + } + + Timer { + id: dataTimer + interval: 1 + running: true + repeat: true + property bool isIncreasing: true + property real rotationAngle: 0 + + function generateQuaternion() { + return "@" + Math.random() * 360 + "," + Math.random() + "," + Math.random() + "," + Math.random() + } + + function appendRow() { + graphModel.append({"xPos": Math.random(), + "yPos": Math.random(), + "zPos": Math.random(), + "rotation": generateQuaternion() + }); + } + + onTriggered: { + rotationAngle = rotationAngle + 1 + scatterSeries.setMeshAxisAndAngle(Qt.vector3d(1,1,1), rotationAngle) + if (isIncreasing) { + appendRow() + appendRow() + appendRow() + appendRow() + appendRow() + appendRow() + appendRow() + appendRow() + appendRow() + appendRow() + if (graphModel.count > 5000) { + scatterGraph.theme.type = Theme3D.ThemeIsabelle; + isIncreasing = false; + } + } else { + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + graphModel.remove(Math.random() * (graphModel.count - 1)); + if (graphModel.count == 2) { + scatterGraph.theme.type = Theme3D.ThemeDigia; + isIncreasing = true; + } + } + } + } + + ThemeColor { + id: dynamicColor + ColorAnimation on color { + from: "red" + to: "yellow" + duration: 5000 + loops: Animation.Infinite + } + } + + Item { + id: dataView + anchors.bottom: parent.bottom + width: parent.width + height: parent.height - shadowToggle.height + + Scatter3D { + id: scatterGraph + width: dataView.width + height: dataView.height + theme: Theme3D { + type: Theme3D.ThemeQt + baseColors: [dynamicColor] + } + shadowQuality: AbstractGraph3D.ShadowQualitySoftMedium + scene.activeCamera.yRotation: 30.0 + inputHandler: null + axisX.min: 0 + axisY.min: 0 + axisZ.min: 0 + axisX.max: 1 + axisY.max: 1 + axisZ.max: 1 + + Scatter3DSeries { + id: scatterSeries + itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel" + mesh: Abstract3DSeries.MeshCube + + ItemModelScatterDataProxy { + itemModel: graphModel + xPosRole: "xPos" + yPosRole: "yPos" + zPosRole: "zPos" + rotationRole: "rotation" + } + } + } + + MouseArea { + id: inputArea + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton + property int mouseX: -1 + property int mouseY: -1 + + onPositionChanged: { + mouseX = mouse.x; + mouseY = mouse.y; + } + + onWheel: { + // Adjust zoom level based on what zoom range we're in. + var zoomLevel = scatterGraph.scene.activeCamera.zoomLevel; + if (zoomLevel > 100) + zoomLevel += wheel.angleDelta.y / 12.0; + else if (zoomLevel > 50) + zoomLevel += wheel.angleDelta.y / 60.0; + else + zoomLevel += wheel.angleDelta.y / 120.0; + if (zoomLevel > 500) + zoomLevel = 500; + else if (zoomLevel < 10) + zoomLevel = 10; + + scatterGraph.scene.activeCamera.zoomLevel = zoomLevel; + } + } + + Timer { + id: reselectTimer + interval: 10 + running: true + repeat: true + onTriggered: { + scatterGraph.scene.selectionQueryPosition = Qt.point(inputArea.mouseX, inputArea.mouseY); + } + } + } + + NumberAnimation { + id: cameraAnimationX + loops: Animation.Infinite + running: true + target: scatterGraph.scene.activeCamera + property:"xRotation" + from: 0.0 + to: 360.0 + duration: 20000 + } + + + SequentialAnimation { + id: cameraAnimationY + loops: Animation.Infinite + running: true + + NumberAnimation { + target: scatterGraph.scene.activeCamera + property:"yRotation" + from: 5.0 + to: 45.0 + duration: 9000 + easing.type: Easing.InOutSine + } + + NumberAnimation { + target: scatterGraph.scene.activeCamera + property:"yRotation" + from: 45.0 + to: 5.0 + duration: 9000 + easing.type: Easing.InOutSine + } + } + + NewButton { + id: shadowToggle + width: parent.width / 3 // We're adding 3 buttons and want to divide them equally + text: "Hide Shadows" + anchors.left: parent.left + + onClicked: { + if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) { + scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualitySoftMedium; + text = "Hide Shadows"; + } else { + scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone; + text = "Show Shadows"; + } + } + } + + NewButton { + id: cameraToggle + width: parent.width / 3 + text: "Pause Camera" + anchors.left: shadowToggle.right + + onClicked: { + cameraAnimationX.paused = !cameraAnimationX.paused; + cameraAnimationY.paused = cameraAnimationX.paused; + if (cameraAnimationX.paused) { + text = "Animate Camera"; + } else { + text = "Pause Camera"; + } + } + } + + NewButton { + id: exitButton + width: parent.width / 3 + text: "Quit" + anchors.left: cameraToggle.right + onClicked: Qt.quit(0); + } +} diff --git a/tests/manual/qmldynamicdata/qmldynamicdata.pro b/tests/manual/qmldynamicdata/qmldynamicdata.pro new file mode 100644 index 00000000..a6ffeb3d --- /dev/null +++ b/tests/manual/qmldynamicdata/qmldynamicdata.pro @@ -0,0 +1,9 @@ +!include( ../tests.pri ) { + error( "Couldn't find the tests.pri file!" ) +} + +SOURCES += main.cpp + +RESOURCES += qmldynamicdata.qrc + +OTHER_FILES += qml/qmldynamicdata/* diff --git a/tests/manual/qmldynamicdata/qmldynamicdata.qrc b/tests/manual/qmldynamicdata/qmldynamicdata.qrc new file mode 100644 index 00000000..76641cf9 --- /dev/null +++ b/tests/manual/qmldynamicdata/qmldynamicdata.qrc @@ -0,0 +1,6 @@ + + + qml/qmldynamicdata/main.qml + qml/qmldynamicdata/NewButton.qml + + -- cgit v1.2.3