Revision control
Copy as Markdown
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qquickscreencapture_p.h"
QT_BEGIN_NAMESPACE
static qreal screenFrameRateToReal(std::optional<qreal> frameRate)
{
return frameRate.value_or(-1.f);
}
QQuickScreenCapture::QQuickScreenCapture(QObject *parent) : QScreenCapture(parent)
{
connect(this, &QScreenCapture::screenChanged, this, [this] {
Q_EMIT QQuickScreenCapture::screenChanged(ensureQmlScreen());
});
}
void QQuickScreenCapture::qmlSetScreen(QQuickScreenInfo *qmlScreen)
{
setScreen(qmlScreen ? qmlScreen->wrappedScreen() : nullptr);
}
QQuickScreenInfo *QQuickScreenCapture::ensureQmlScreen()
{
// Note QQuickApplication may recreate QQuickScreenInfo
// so we implement creating our own instance.
// TODO: perhaps, we should return null QQuickScreenInfo for null QScreen
if (!m_qmlScreen || m_qmlScreen->wrappedScreen() != screen()) {
m_ownQmlScreen = std::make_unique<QQuickScreenInfo>(this, screen());
m_qmlScreen = m_ownQmlScreen.get();
}
return m_qmlScreen;
}
/*!
\since 6.12
\qmlproperty real QtMultimedia::ScreenCapture::maximumFrameRate
The screen capture frame rate upper limit.
This can be set to override the capture frame rate used by default based on
e.g. display refresh rate, but only as an upper limit since screen capture
produces frames at a variable rate. Setting this higher than the display
refresh rate is not recommended and can cause errors.
If -1, a platform-dependent default is used.
Any changes to this property are applied the next time the ScreenCapture
goes active.
*/
void QQuickScreenCapture::qmlSetMaximumFrameRate(qreal frameRate)
{
if (qFuzzyCompare(frameRate, static_cast<qreal>(-1.f)))
setMaximumFrameRate(std::nullopt);
else if (frameRate > 0.f)
setMaximumFrameRate(frameRate);
}
qreal QQuickScreenCapture::qmlMaximumFrameRate() const
{
return screenFrameRateToReal(maximumFrameRate());
}
void QQuickScreenCapture::qmlResetMaximumFrameRate()
{
setMaximumFrameRate(std::nullopt);
}
QT_END_NAMESPACE
#include "moc_qquickscreencapture_p.cpp"