Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_brush_option_widget.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
7#include <klocalizedstring.h>
8
9#include <kis_image.h>
10#include <kis_image_config.h>
11
13#include "kis_brush.h"
14
15#include <lager/state.hpp>
16#include "KisBrushModel.h"
19
20#include "KisAutoBrushModel.h"
22#include "KisTextBrushModel.h"
23
25{
26 Private(KisBrushOptionWidgetFlags flags)
27 : commonBrushSizeData(778.0)
29 brushData[&BrushData::autoBrush],
32 brushData[&BrushData::predefinedBrush],
36 brushData[&BrushData::textBrush])
37 {
38 }
39
40 lager::state<BrushData, lager::automatic_tag> brushData;
41 lager::state<PrecisionData, lager::automatic_tag> brushPrecisionData;
42 lager::state<qreal, lager::automatic_tag> commonBrushSizeData;
43
47
48 KisBrushOptionWidgetFlags flags;
49};
50
51KisBrushOptionWidget::KisBrushOptionWidget(KisBrushOptionWidgetFlags flags)
52 : KisPaintOpOption(i18n("Brush Tip"), KisPaintOpOption::GENERAL, true),
53 m_d(new Private(flags))
54{
55 m_d->flags = flags;
56
57 m_checkable = false;
58
60 &m_d->autoBrushModel,
61 &m_d->predefinedBrushModel,
62 &m_d->textBrushModel,
63 m_d->brushData[&BrushData::type],
64 m_d->brushPrecisionData,
65 flags);
68
69 setObjectName("KisBrushOptionWidget");
70
71 // TODO: merge them into a single struct to avoid double updates
72 lager::watch(m_d->brushData, std::bind(&KisBrushOptionWidget::emitSettingChanged, this));
73 lager::watch(m_d->brushPrecisionData, std::bind(&KisBrushOptionWidget::emitSettingChanged, this));
74 lager::watch(m_d->commonBrushSizeData, std::bind(&KisBrushOptionWidget::emitSettingChanged, this));
75}
76
78
83
84
89
91{
92 using namespace KisBrushModel;
93
94 BrushData data = m_d->brushData.get();
95
96 data.autoBrush = m_d->autoBrushModel.bakedOptionData();
97 data.predefinedBrush = m_d->predefinedBrushModel.bakedOptionData();
98
99 data.write(settings.data());
100
102 m_d->brushPrecisionData->write(settings.data());
103 }
104}
105
107{
108 using namespace KisBrushModel;
109
110 std::optional<BrushData> data = BrushData::read(setting.data(), resourcesInterface());
111 if (!data) {
112 qWarning() << "WARNING: failed to load brush object for the a paintop preset";
113 return;
114 }
115 m_d->brushData.set(*data);
116 m_d->commonBrushSizeData.set(effectiveSizeForBrush(data->type, data->autoBrush, data->predefinedBrush, data->textBrush));
117
119 m_d->brushPrecisionData.set(KisBrushModel::PrecisionData::read(setting.data()));
120 }
121}
122
127
132
134{
135 return m_d->commonBrushSizeData;
136}
137
138lager::reader<BrushData> KisBrushOptionWidget::bakedBrushData() const
139{
140 return lager::with(m_d->brushData, m_d->commonBrushSizeData)
141 .map([this] (BrushData data, qreal commonBrushSize) {
142
143 Q_UNUSED(commonBrushSize); // we keep it as a dep only for updates!
144
145 data.autoBrush = m_d->autoBrushModel.bakedOptionData();
146 data.predefinedBrush = m_d->predefinedBrushModel.bakedOptionData();
147
148 return data;
149 });
150}
151
156
157#include "moc_kis_brush_option_widget.cpp"
lager::reader< qreal > effectiveBrushSize() const
const QScopedPointer< Private > m_d
void setImage(KisImageWSP image) override
void readOptionSetting(const KisPropertiesConfigurationSP setting) override
void writeOptionSetting(KisPropertiesConfigurationSP setting) const override
KisBrushSelectionWidget * m_brushSelectionWidget
lager::reader< bool > lightnessModeEnabled() const
OptionalLodLimitationsReader lodLimitationsReader() const override
KisBrushOptionWidget(KisBrushOptionWidgetFlags flags)
lager::reader< KisBrushModel::BrushData > bakedBrushData() const
~KisBrushOptionWidget() override
void hideOptions(const QStringList &options)
void hideOptions(const QStringList &options)
lager::reader< bool > lightnessModeEnabled() const
std::optional< lager::reader< KisPaintopLodLimitations > > OptionalLodLimitationsReader
KisResourcesInterfaceSP resourcesInterface() const
void setConfigurationPage(QWidget *page)
qreal effectiveSizeForBrush(BrushType type, const AutoBrushData &autoBrush, const PredefinedBrushData &predefinedBrush, const TextBrushData &textBrush)
KisPaintopLodLimitations brushLodLimitations(const BrushData &data)
@ GENERAL
Definition nugrid.h:26
void write(KisPropertiesConfiguration *settings) const
static std::optional< BrushData > read(const KisPropertiesConfiguration *settings, KisResourcesInterfaceSP resourcesInterface)
PredefinedBrushData predefinedBrush
static PrecisionData read(const KisPropertiesConfiguration *config)
KisPredefinedBrushModel predefinedBrushModel
lager::state< BrushData, lager::automatic_tag > brushData
lager::state< qreal, lager::automatic_tag > commonBrushSizeData
lager::state< PrecisionData, lager::automatic_tag > brushPrecisionData
Private(KisBrushOptionWidgetFlags flags)