File indexing completed on 2024-06-16 04:17:30

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisPaintingModeOptionModel.h"
0007 
0008 #include <KisLager.h>
0009 
0010 using ToControlState = KisWidgetConnectionUtils::ToControlState;
0011 
0012 namespace {
0013 int calcEffectivePaintingMode(enumPaintingMode mode, bool maskingBrushEnabled) {
0014     return static_cast<int>(maskingBrushEnabled ? enumPaintingMode::WASH : mode);
0015 }
0016 }
0017 
0018 KisPaintingModeOptionModel::KisPaintingModeOptionModel(lager::cursor<KisPaintingModeOptionData> _optionData, lager::reader<bool> _maskingBrushEnabled)
0019     : optionData(_optionData)
0020     , maskingBrushEnabled(_maskingBrushEnabled)
0021     , LAGER_QT(paintingMode) {optionData[&KisPaintingModeOptionData::paintingMode].zoom(kislager::lenses::do_static_cast<enumPaintingMode, int>)}
0022     , LAGER_QT(effectivePaintingMode) {
0023         lager::with(optionData[&KisPaintingModeOptionData::paintingMode],
0024                     maskingBrushEnabled)
0025             .map(&calcEffectivePaintingMode)}
0026     , LAGER_QT(paintingModeState) {
0027         lager::with(LAGER_QT(effectivePaintingMode),
0028                     maskingBrushEnabled.map(std::logical_not{}))
0029             .map(ToControlState{})}
0030 {
0031 }
0032 
0033 KisPaintingModeOptionData KisPaintingModeOptionModel::bakedOptionData() const
0034 {
0035     KisPaintingModeOptionData data;
0036     data.paintingMode = static_cast<enumPaintingMode>(effectivePaintingMode());
0037     return data;
0038 }