diff options
Diffstat (limited to 'tests/manual/windowembedding/main.cpp')
-rw-r--r-- | tests/manual/windowembedding/main.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/tests/manual/windowembedding/main.cpp b/tests/manual/windowembedding/main.cpp new file mode 100644 index 0000000000..f94affbb5c --- /dev/null +++ b/tests/manual/windowembedding/main.cpp @@ -0,0 +1,111 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QtGui> +#include <QtWidgets> +#include <QQmlEngine> +#include <QQuickView> +#include <QQmlContext> + +class TestWindow : public QRasterWindow +{ +public: + using QRasterWindow::QRasterWindow; + TestWindow(const QBrush &brush) : m_brush(brush) {} + +protected: + void mousePressEvent(QMouseEvent *) override + { + m_pressed = true; + update(); + } + + void mouseReleaseEvent(QMouseEvent *) override + { + m_pressed = false; + update(); + } + + void paintEvent(QPaintEvent *event) override + { + QPainter painter(this); + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.fillRect(event->rect(), m_pressed ? QGradient(QGradient::JuicyPeach) : m_brush); + } + +private: + QBrush m_brush = QGradient(QGradient::DustyGrass); + bool m_pressed = false; +}; + +#ifdef Q_OS_APPLE +#include <WebKit/WebKit.h> +#include <MapKit/MapKit.h> +#include <AVKit/AVKit.h> +#endif + +int main(int argc, char* argv[]) +{ + QApplication app(argc,argv); + app.setOrganizationName("QtProject"); + app.setOrganizationDomain("qt-project.org"); + app.setApplicationName(QFileInfo(app.applicationFilePath()).baseName()); + + QQuickView view; + view.connect(view.engine(), &QQmlEngine::quit, &app, &QCoreApplication::quit); + +#ifdef Q_OS_MACOS + view.engine()->addImportPath(app.applicationDirPath() + QStringLiteral("/../PlugIns")); +#endif + + TestWindow testWindow; + + QWindow *mapWindow = nullptr; + QWindow *webViewWindow = nullptr; + QWindow *videoWindow = nullptr; + +#ifdef Q_OS_APPLE + auto *webView = [WKWebView new]; + [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.qt.io"]]]; + webViewWindow = QWindow::fromWinId(WId(webView)); + + auto *mapView = [MKMapView new]; + mapWindow = QWindow::fromWinId(WId(mapView)); + +# ifndef Q_OS_IOS + auto *videoView = [AVPlayerView new]; + videoView.player = [AVPlayer playerWithURL:[NSURL URLWithString: + @"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"]]; + videoWindow = QWindow::fromWinId(WId(videoView)); +# endif + +#else + mapWindow = &testWindow; + webViewWindow = &testWindow; + videoWindow = &testWindow; +#endif + + auto *calendarWidget = new QCalendarWidget; + calendarWidget->setAttribute(Qt::WA_NativeWindow); + QWindow *widgetWindow = calendarWidget->windowHandle(); + + auto *context = view.engine()->rootContext(); + context->setContextProperty("testWindow", &testWindow); + context->setContextProperty("widgetWindow", widgetWindow); + context->setContextProperty("mapWindow", mapWindow); + context->setContextProperty("webViewWindow", webViewWindow); + context->setContextProperty("videoWindow", videoWindow); + +#if defined(QT_MULTIMEDIA_LIB) + context->setContextProperty("haveQtMultimedia", true); +#endif + + view.setSource(QUrl("qrc:/qt/qml/windowembeddingexample/windowembedding.qml")); + if (view.status() == QQuickView::Error) + return -1; + + view.setResizeMode(QQuickView::SizeRootObjectToView); + view.show(); + + return app.exec(); +} |