File indexing completed on 2024-06-16 04:17:17
0001 /* 0002 * SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #include "KisSmudgeOverlayModeOptionWidget.h" 0007 0008 #include <QWidget> 0009 #include <QLabel> 0010 #include <QCheckBox> 0011 #include <QHBoxLayout> 0012 #include <QVBoxLayout> 0013 0014 #include <kis_paintop_lod_limitations.h> 0015 #include <KisSmudgeOverlayModeOptionModel.h> 0016 #include <KisWidgetConnectionUtils.h> 0017 0018 struct KisSmudgeOverlayModeOptionWidget::Private 0019 { 0020 Private(lager::cursor<KisSmudgeOverlayModeOptionData> optionData, 0021 lager::reader<bool> overlayModeAllowed) 0022 : model(optionData, overlayModeAllowed) 0023 , warningLabelVisible{overlayModeAllowed.map(std::logical_not{})} 0024 , lodLimitations(optionData.map(std::mem_fn(&KisSmudgeOverlayModeOptionData::lodLimitations))) 0025 { 0026 } 0027 0028 KisSmudgeOverlayModeOptionModel model; 0029 lager::reader<bool> warningLabelVisible; 0030 lager::reader<KisPaintopLodLimitations> lodLimitations; 0031 }; 0032 0033 0034 KisSmudgeOverlayModeOptionWidget::KisSmudgeOverlayModeOptionWidget(lager::cursor<KisSmudgeOverlayModeOptionData> optionData, 0035 lager::reader<bool> overlayModeAllowed) 0036 : KisPaintOpOption(i18n("Overlay Mode"), 0037 KisPaintOpOption::GENERAL, 0038 optionData[&KisSmudgeOverlayModeOptionData::isChecked], 0039 overlayModeAllowed) 0040 , m_d(new Private(optionData, overlayModeAllowed)) 0041 { 0042 using namespace KisWidgetConnectionUtils; 0043 0044 QWidget *page = new QWidget(); 0045 0046 QLabel *label = new QLabel( 0047 i18n("Paints on the current layer\n" 0048 "but uses all layers that are currently visible for smudge input\n" 0049 "NOTE: This mode is only able to work correctly with a fully opaque background"), 0050 page); 0051 0052 label->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter); 0053 0054 0055 QLabel *disabledWarningLabel = new QLabel( 0056 i18n("Disabled: overlay mode is not supported in Lightness mode of the brush"), 0057 page); 0058 0059 disabledWarningLabel->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter); 0060 0061 0062 QVBoxLayout *layout = new QVBoxLayout(page); 0063 layout->addWidget(disabledWarningLabel); 0064 layout->addWidget(label, 1); 0065 0066 m_d->warningLabelVisible.bind(std::bind(&QWidget::setVisible, disabledWarningLabel, std::placeholders::_1)); 0067 0068 setConfigurationPage(page); 0069 0070 m_d->model.optionData.bind(std::bind(&KisSmudgeOverlayModeOptionWidget::emitSettingChanged, this)); 0071 } 0072 0073 KisSmudgeOverlayModeOptionWidget::~KisSmudgeOverlayModeOptionWidget() 0074 { 0075 } 0076 0077 void KisSmudgeOverlayModeOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const 0078 { 0079 m_d->model.bakedOptionData().write(setting.data()); 0080 } 0081 0082 void KisSmudgeOverlayModeOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting) 0083 { 0084 KisSmudgeOverlayModeOptionData data = *m_d->model.optionData; 0085 data.read(setting.data()); 0086 m_d->model.optionData.set(data); 0087 0088 } 0089 0090 KisPaintOpOption::OptionalLodLimitationsReader KisSmudgeOverlayModeOptionWidget::lodLimitationsReader() const 0091 { 0092 return m_d->lodLimitations; 0093 }