diff options
Diffstat (limited to 'tests/manual/examples/qpa/qrasterwindow')
-rw-r--r-- | tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt | 35 | ||||
-rw-r--r-- | tests/manual/examples/qpa/qrasterwindow/main.cpp | 91 | ||||
-rw-r--r-- | tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro | 4 |
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 |