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
85{
86 using namespace KisBrushModel;
87
88 BrushData data = m_d->brushData.get();
89
90 data.autoBrush = m_d->autoBrushModel.bakedOptionData();
91 data.predefinedBrush = m_d->predefinedBrushModel.bakedOptionData();
92
93 data.write(settings.data());
94
96 m_d->brushPrecisionData->write(settings.data());
97 }
98}
99
101{
102 using namespace KisBrushModel;
103
104 std::optional<BrushData> data = BrushData::read(setting.data(), resourcesInterface());
105 if (!data) {
106 qWarning() << "WARNING: failed to load brush object for the a paintop preset";
107 return;
108 }
109 m_d->brushData.set(*data);
110 m_d->commonBrushSizeData.set(effectiveSizeForBrush(data->type, data->autoBrush, data->predefinedBrush, data->textBrush));
111
113 m_d->brushPrecisionData.set(KisBrushModel::PrecisionData::read(setting.data()));
114 }
115}
116
121
126
128{
129 return m_d->commonBrushSizeData;
130}
131
132lager::reader<BrushData> KisBrushOptionWidget::bakedBrushData() const
133{
134 return lager::with(m_d->brushData, m_d->commonBrushSizeData)
135 .map([this] (BrushData data, qreal commonBrushSize) {
136
137 Q_UNUSED(commonBrushSize); // we keep it as a dep only for updates!
138
139 data.autoBrush = m_d->autoBrushModel.bakedOptionData();
140 data.predefinedBrush = m_d->predefinedBrushModel.bakedOptionData();
141
142 return data;
143 });
144}
145
150
151#include "moc_kis_brush_option_widget.cpp"
lager::reader< qreal > effectiveBrushSize() const
const QScopedPointer< Private > m_d
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)