Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFrameRateLimitModel.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7
8#include <lager/lenses/tuple.hpp>
9#include <lager/constant.hpp>
10#include <KisLager.h>
11#include <kis_assert.h>
12
13#include <QGuiApplication>
14#include <QScreen>
15
16namespace {
17 int calculateMaxScreenFrameRate() {
18 const QList<QScreen*> screens = qGuiApp->screens();
19 qreal maxRefreshRate = 30;
20 for (QScreen *screen : screens) {
21 if (screen->refreshRate() > maxRefreshRate) {
22 maxRefreshRate = screen->refreshRate();
23 }
24 }
25 return qRound(maxRefreshRate);
26 }
27}
28
29auto frameRateLens = lager::lenses::getset(
30 [](const KisFrameRateLimitModel::Data &x) -> int { return std::get<bool>(x) ? calculateMaxScreenFrameRate() : std::get<int>(x); },
32 if (!std::get<bool>(x)) {
33 std::get<int>(x) = frameRate;
34 }
35 return x;
36 });
37
39 : data(_data)
40 , LAGER_QT(detectFrameRate){data.zoom(lager::lenses::first)}
41 , LAGER_QT(frameRate){data.zoom(frameRateLens)}
42 , LAGER_QT(frameRateState) {
43 lager::with(LAGER_QT(frameRate),
44 lager::make_constant(1),
45 lager::make_constant(300),
46 LAGER_QT(detectFrameRate).map(std::logical_not<>{}))
48 }
49{
50}
LAGER_QT(frameRate)
auto frameRateLens
std::tuple< bool, int > Data
lager::cursor< Data > data
KisFrameRateLimitModel(lager::cursor< Data > _data=lager::make_state(Data(true, 60), lager::automatic_tag{}))