Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLodAvailabilityModel.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 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 <KisZug.h>
10
11namespace {
13calcLodAvailabilityState(const KisLodAvailabilityData &data, qreal effectiveBrushSize, const KisPaintopLodLimitations &l) {
15
16 if (!l.blockers.isEmpty()) {
18 } else if (data.isLodSizeThresholdSupported &&
19 effectiveBrushSize < data.lodSizeThreshold) {
20
22 } else if (!l.limitations.isEmpty()) {
24 }
25
26 return std::make_tuple(state, l, data.isLodUserAllowed);
27}
28}
29
30KisLodAvailabilityModel::KisLodAvailabilityModel(lager::cursor<KisLodAvailabilityData> _data, lager::reader<qreal> _effectiveBrushSize, lager::reader<KisPaintopLodLimitations> _lodLimitations)
31 : data(_data)
32 , effectiveBrushSize(_effectiveBrushSize)
33 , lodLimitations(_lodLimitations)
35 , LAGER_QT(isLodSizeThresholdSupported) {data[&KisLodAvailabilityData::isLodSizeThresholdSupported]}
37 , LAGER_QT(availabilityState) {lager::with(data, effectiveBrushSize, lodLimitations).map(&calcLodAvailabilityState)}
38 , LAGER_QT(effectiveLodAvailable) {LAGER_QT(availabilityState)
39 .zoom(lager::lenses::first)
40 .xform(kiszug::map_less_equal<int>(static_cast<int>(Limited)))}
41{
42 data.watch(std::bind(&KisLodAvailabilityModel::sigConfigurationItemChanged, this));
43}
LAGER_QT(isLodSizeThresholdSupported)
std::tuple< AvailabilityState, KisPaintopLodLimitations, bool > AvailabilityStatePack
lager::cursor< KisLodAvailabilityData > data
KisLodAvailabilityModel(lager::cursor< KisLodAvailabilityData > data, lager::reader< qreal > effectiveBrushSize, lager::reader< KisPaintopLodLimitations > lodLimitations)