Revision control

Copy as Markdown

// Copyright (C) 2026 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "tst_multimediaquick_qml_screencapturehelper.h"
#include <QtMultimediaQuick/private/qquickscreencapture_p.h>
#include <QtQuick/private/qquickscreen_p.h>
#include <QtGui/qguiapplication.h>
#include <QtGui/qscreen.h>
#include <optional>
QT_USE_NAMESPACE
QString ScreenCaptureHelper::primaryScreenName()
{
const QScreen *screen = QGuiApplication::primaryScreen();
return screen ? screen->name() : QString{};
}
bool ScreenCaptureHelper::isScreenCapture(QScreenCapture *capture)
{
return capture != nullptr;
}
bool ScreenCaptureHelper::isQuickScreenCapture(QScreenCapture *capture)
{
return qobject_cast<QQuickScreenCapture *>(capture) != nullptr;
}
bool ScreenCaptureHelper::hasScreen(QScreenCapture *capture)
{
return capture && capture->screen();
}
QString ScreenCaptureHelper::screenName(QScreenCapture *capture)
{
if (!capture || !capture->screen())
return {};
return capture->screen()->name();
}
QObject *ScreenCaptureHelper::qmlScreen(QScreenCapture *capture)
{
auto *quickCapture = qobject_cast<QQuickScreenCapture *>(capture);
return quickCapture ? quickCapture->ensureQmlScreen() : nullptr;
}
bool ScreenCaptureHelper::hasMaximumFrameRate(QScreenCapture *capture)
{
return capture && capture->maximumFrameRate().has_value();
}
qreal ScreenCaptureHelper::maximumFrameRate(QScreenCapture *capture)
{
if (!capture)
return -1;
return capture->maximumFrameRate().value_or(-1);
}
bool ScreenCaptureHelper::isActive(QScreenCapture *capture)
{
return capture && capture->isActive();
}
void ScreenCaptureHelper::setPrimaryScreen(QScreenCapture *capture)
{
if (capture)
capture->setScreen(QGuiApplication::primaryScreen());
}
void ScreenCaptureHelper::clearScreen(QScreenCapture *capture)
{
if (capture)
capture->setScreen(nullptr);
}
void ScreenCaptureHelper::setScreenFromTemporaryQmlScreen(QScreenCapture *capture, bool primary)
{
auto *quickCapture = qobject_cast<QQuickScreenCapture *>(capture);
if (!quickCapture)
return;
QQuickScreenInfo qmlScreen(nullptr, primary ? QGuiApplication::primaryScreen() : nullptr);
quickCapture->qmlSetScreen(&qmlScreen);
}
void ScreenCaptureHelper::setMaximumFrameRate(QScreenCapture *capture, qreal frameRate)
{
if (capture)
capture->setMaximumFrameRate(frameRate);
}
void ScreenCaptureHelper::clearMaximumFrameRate(QScreenCapture *capture)
{
if (capture)
capture->setMaximumFrameRate(std::nullopt);
}
void ScreenCaptureHelper::setActive(QScreenCapture *capture, bool active)
{
if (capture)
capture->setActive(active);
}
void ScreenCaptureHelper::rememberQmlScreen(QScreenCapture *capture)
{
m_rememberedQmlScreen = qmlScreen(capture);
}
bool ScreenCaptureHelper::rememberedQmlScreenIsDestroyed() const
{
return m_rememberedQmlScreen.isNull();
}