From 3f70ff764f6bbb15f765e98c2da32dda2dc3bff5 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Tue, 10 Mar 2020 10:21:59 +0100 Subject: [PATCH] string based setScreen method added --- src/controls/QskWindow.cpp | 64 ++++++++++++++++++++++++++++++++++++-- src/controls/QskWindow.h | 5 +++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/controls/QskWindow.cpp b/src/controls/QskWindow.cpp index 0e6bc2df..eec39ac4 100644 --- a/src/controls/QskWindow.cpp +++ b/src/controls/QskWindow.cpp @@ -19,6 +19,19 @@ QSK_QT_PRIVATE_BEGIN #include QSK_QT_PRIVATE_END +#include +#include + +#define QSK_DEBUG_RENDER_TIMING + +#ifdef QSK_DEBUG_RENDER_TIMING + +#include +#include +Q_LOGGING_CATEGORY( logTiming, "qsk.window.timing", QtCriticalMsg ) + +#endif + static void qskResolveLocale( QskWindow* ); static bool qskEnforcedSkin = false; @@ -107,6 +120,10 @@ class QskWindowPrivate : public QQuickWindowPrivate { } +#ifdef QSK_DEBUG_RENDER_TIMING + QElapsedTimer renderInterval; +#endif + ChildListener contentItemListener; QLocale locale; @@ -145,6 +162,14 @@ QskWindow::QskWindow( QWindow* parent ) connect( this, &QQuickWindow::afterAnimating, this, &QskWindow::enforceSkin ); } +QskWindow::QskWindow(QQuickRenderControl *renderControl , QWindow *parent) + : QskWindow( parent ) +{ + auto* d = static_cast< QskWindowPrivate* >( QQuickWindowPrivate::get( this ) ); + d->renderControl = renderControl; + d->init( this, renderControl ); +} + QskWindow::~QskWindow() { // When being used from Qml the item destruction would run in the most @@ -164,6 +189,23 @@ QskWindow::~QskWindow() delete item; } +void QskWindow::setScreen( const QString& name ) +{ + if ( !name.isEmpty() ) + { + for ( auto screen : QGuiApplication::screens() ) + { + if ( screen->name() == name ) + { + setScreen( screen ); + return; + } + } + } + + setScreen( QGuiApplication::primaryScreen() ); +} + void QskWindow::resizeF( const QSizeF& size ) { const int w = static_cast< int >( qCeil( size.width() ) ); @@ -271,12 +313,30 @@ bool QskWindow::event( QEvent* event ) { if ( event->isAccepted() ) { - Q_D( const QskWindow ); if ( d->deleteOnClose ) deleteLater(); } break; } +#ifdef QSK_DEBUG_RENDER_TIMING + case QEvent::Timer: + { + if ( logTiming().isDebugEnabled() ) + { + if ( static_cast( event )->timerId() == d->updateTimer ) + { + if ( !d->renderInterval.isValid() ) + d->renderInterval.start(); + + qCDebug( logTiming() ) << "update timer - elapsed" + << d->renderInterval.restart() << this; + } + } + + break; + } +#endif + default: break; } @@ -522,7 +582,7 @@ void QskWindow::setCustomRenderMode( const char* mode ) */ if ( m.isEmpty() != d->customRenderMode.isEmpty() ) - scheduleRenderJob( new RenderJob( this, m ), AfterSwapStage ); + scheduleRenderJob( new RenderJob( this, m ), AfterRenderingStage ); else d->customRenderMode = m; diff --git a/src/controls/QskWindow.h b/src/controls/QskWindow.h index d3334097..f1693c2d 100644 --- a/src/controls/QskWindow.h +++ b/src/controls/QskWindow.h @@ -35,8 +35,13 @@ class QSK_EXPORT QskWindow : public QQuickWindow }; QskWindow( QWindow* parent = nullptr ); + QskWindow( QQuickRenderControl* renderControl, QWindow* parent = nullptr ); + ~QskWindow() override; + using Inherited::setScreen; + void setScreen( const QString& ); + bool deleteOnClose() const; void setDeleteOnClose( bool );