summaryrefslogtreecommitdiffstats
path: root/tests/manual/examples/qpa/qrasterwindow
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/examples/qpa/qrasterwindow')
-rw-r--r--tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt35
-rw-r--r--tests/manual/examples/qpa/qrasterwindow/main.cpp91
-rw-r--r--tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro4
3 files changed, 130 insertions, 0 deletions
diff --git a/tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt b/tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt
new file mode 100644
index 0000000000..3770400268
--- /dev/null
+++ b/tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qrasterwindow LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qpa/qrasterwindow")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui)
+
+qt_standard_project_setup()
+
+qt_add_executable(qrasterwindow
+ main.cpp
+)
+
+set_target_properties(qrasterwindow PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(qrasterwindow PRIVATE
+ Qt6::Core
+ Qt6::Gui
+)
+
+install(TARGETS qrasterwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/qpa/qrasterwindow/main.cpp b/tests/manual/examples/qpa/qrasterwindow/main.cpp
new file mode 100644
index 0000000000..9c245bf8a1
--- /dev/null
+++ b/tests/manual/examples/qpa/qrasterwindow/main.cpp
@@ -0,0 +1,91 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QRasterWindow>
+#include <QPainter>
+#include <QPainterPath>
+#include <QGuiApplication>
+#include <QMatrix4x4>
+#include <QTimer>
+
+static QPainterPath painterPathForTriangle()
+{
+ static const QPointF bottomLeft(-1.0, -1.0);
+ static const QPointF top(0.0, 1.0);
+ static const QPointF bottomRight(1.0, -1.0);
+
+ QPainterPath path(bottomLeft);
+ path.lineTo(top);
+ path.lineTo(bottomRight);
+ path.closeSubpath();
+ return path;
+}
+
+class PaintedWindow : public QRasterWindow
+{
+ Q_OBJECT
+
+public:
+ PaintedWindow()
+ {
+ m_view.lookAt(QVector3D(3,1,1),
+ QVector3D(0,0,0),
+ QVector3D(0,1,0));
+ m_timer.setInterval(16);
+ connect(&m_timer, &QTimer::timeout, this, qOverload<>(&PaintedWindow::update));
+ m_timer.start();
+ }
+
+protected:
+ void paintEvent(QPaintEvent *)
+ {
+ QPainter p(this);
+ p.fillRect(QRect(0,0,width(),height()),Qt::gray);
+
+ p.setWorldTransform(m_window_matrix.toTransform());
+
+ QMatrix4x4 mvp = m_projection * m_view * m_model;
+ p.setTransform(mvp.toTransform(), true);
+
+ p.fillPath(painterPathForTriangle(), m_brush);
+
+ m_model.rotate(1, 0, 1, 0);
+ }
+
+ void resizeEvent(QResizeEvent *)
+ {
+ m_window_matrix = QTransform();
+ m_window_matrix.translate(width() / 2.0, height() / 2.0);
+ m_window_matrix.scale(width() / 2.0, -height() / 2.0);
+
+ m_projection.setToIdentity();
+ m_projection.perspective(45.f, qreal(width()) / qreal(height()), 0.1f, 100.f);
+
+ QLinearGradient gradient(QPointF(-1,-1), QPointF(1,1));
+ gradient.setColorAt(0, Qt::red);
+ gradient.setColorAt(1, Qt::green);
+
+ m_brush = QBrush(gradient);
+ }
+
+private:
+ QMatrix4x4 m_window_matrix;
+ QMatrix4x4 m_projection;
+ QMatrix4x4 m_view;
+ QMatrix4x4 m_model;
+ QBrush m_brush;
+ QTimer m_timer;
+};
+
+int main (int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ PaintedWindow window;
+ window.create();
+ window.show();
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro b/tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro
new file mode 100644
index 0000000000..e5bf34f25c
--- /dev/null
+++ b/tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro
@@ -0,0 +1,4 @@
+SOURCES += main.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/qpa/qrasterwindow
+INSTALLS += target