8#include <QtCore/qtimer.h>
9#include <QtCore/qsettings.h>
10#include <QtCore/qlibraryinfo.h>
12#include <QtGui/qwindow.h>
13#include <QtGui/qguiapplication.h>
14#include <QtQuick/qquickwindow.h>
15#include <QtQuick/qquickitem.h>
17#include <private/qabstractanimation_p.h>
18#include <private/qhighdpiscaling_p.h>
24 m_fpsTimer.setInterval(1000);
25 connect(&m_fpsTimer, &QTimer::timeout,
this, &QQmlPreviewHandler::fpsTimerHit);
28QQmlPreviewHandler::~QQmlPreviewHandler() =
default;
32 return m_currentRootItem;
37 m_currentRootItem = item;
42 m_engines.append(qmlEngine);
47 m_engines.removeOne(qmlEngine);
52 QUnifiedTimer::instance()->setSpeedModifier(newFactor);
60 if (qFuzzyIsNull(zoomFactor)) {
61 emit error(QString::fromLatin1(
"Zooming with factor: %1 will result in nothing "
62 "so it will be ignored.")
67 bool resetZoom =
false;
73 window->setGeometry(window->geometry());
78 for (QScreen *screen : QGuiApplication::screens())
79 QHighDpiScaling::setScreenFactor(screen, zoomFactor);
81 QHighDpiScaling::updateHighDpiScaling();
89 disconnect(window, &QQuickWindow::beforeSynchronizing,
91 disconnect(window, &QQuickWindow::afterSynchronizing,
93 disconnect(window, &QQuickWindow::beforeRendering,
95 disconnect(window, &QQuickWindow::frameSwapped,
98 m_rendering = FrameTime();
99 m_synchronizing = FrameTime();
104 connect(window, &QQuickWindow::beforeSynchronizing,
106 connect(window, &QQuickWindow::afterSynchronizing,
108 connect(window, &QQuickWindow::beforeRendering,
110 connect(window, &QQuickWindow::frameSwapped,
117 connect(service, &QQmlPreviewServiceImpl::load,
this, &QQmlPreviewHandler::load);
118 connect(service, &QQmlPreviewServiceImpl::animationSpeed,
119 this, &QQmlPreviewHandler::setAnimationSpeed);
120 connect(
this, &QQmlPreviewHandler::error,
121 service, &QQmlPreviewServiceImpl::forwardError, Qt::DirectConnection);
122 connect(
this, &QQmlPreviewHandler::fps,
123 service, &QQmlPreviewServiceImpl::forwardFps, Qt::DirectConnection);
128 m_synchronizing.beginFrame();
134 if (m_rendering.elapsed >= 0)
135 m_rendering.endFrame();
136 m_synchronizing.recordFrame();
137 m_synchronizing.endFrame();
142 m_rendering.beginFrame();
147 m_rendering.recordFrame();
157 elapsed = timer.elapsed();
163 min =
static_cast<quint16>(qMax(0ll, elapsed));
165 max =
static_cast<quint16>(qMin(qint64(std::numeric_limits<quint16>::max()), elapsed));
166 total =
static_cast<quint16>(qBound(0ll, qint64(std::numeric_limits<quint16>::max()),
174 min = std::numeric_limits<quint16>::max();
182 const FpsInfo info = {
183 m_synchronizing.number,
186 m_synchronizing.total,
197 m_synchronizing.reset();
202 return m_currentWindow.data();
207 if (window == m_currentWindow.data())
213 m_currentWindow = window;
222#include "moc_qqmlpreviewhandler.cpp"
void disconnectWindow(QQuickWindow *window)
void setCurrentRootItem(QQuickItem *item)
void zoomWindow(QQuickWindow *window, qreal zoomFactor, QQmlPreviewPosition *position)
QQuickItem * currentRootItem() const
void setCurrentWindow(QQuickWindow *window)
void connectWindow(QQuickWindow *window)
void setAnimationSpeed(qreal newFactor)
virtual void removeEngine(QQmlEngine *engine)
virtual void addEngine(QQmlEngine *engine)
QQuickWindow * currentWindow() const
virtual void connectToService(QQmlPreviewServiceImpl *service)
void takePosition(QWindow *window, InitializeState state=PositionInitialized)
void initLastSavedWindowPosition(QWindow *window)
Combined button and popup list for selecting options.