17#include <QDomDocument>
28#include <lager/state.hpp>
29#include <lager/constant.hpp>
46 i18nc(
"warning about too big size of the masked brush",
47 "WARNING: Dependent size of the masked brush grew too big (%1 pixels). Its value has been cropped to %2 pixels.",
48 theoreticalMaskingBrushSize,
64 MaskingBrushModel(lager::cursor<MaskingBrushData> maskingData, lager::cursor<qreal> commonBrushSizeData, lager::reader<qreal> masterBrushSize)
83 .map(std::multiplies<qreal>{})},
88 .map(std::logical_and<bool>{})},
163 Private(lager::reader<qreal> effectiveBrushSize)
173 Q_FOREACH (
const QString &
id, supportedComposites) {
179 QHBoxLayout *compositeOpLayout =
new QHBoxLayout();
180 compositeOpLayout->addWidget(
new QLabel(i18n(
"Blending Mode:")), 0);
189 QVBoxLayout *layout =
new QVBoxLayout(
ui.data());
190 layout->addLayout(compositeOpLayout, 0);
195 QScopedPointer<QWidget>
ui;
200 lager::state<KisBrushModel::MaskingBrushData, lager::automatic_tag>
maskingData;
212 , m_d(new
Private(effectiveBrushSize))
214 setObjectName(
"KisMaskingBrushOption");
217 connect(&
m_d->maskingModel, &MaskingBrushModel::isEnabledChanged,
220 &
m_d->maskingModel, &MaskingBrushModel::setisEnabled);
223 connect(&
m_d->maskingModel, &MaskingBrushModel::compositeOpIdChanged,
225 connect(
m_d->compositeSelector, qOverload<int>(&QComboBox::currentIndexChanged),
227 m_d->maskingModel.LAGER_QT(compositeOpId).nudge();
229 connect(&
m_d->maskingModel, &MaskingBrushModel::warningLabelVisibleChanged,
230 m_d->brushSizeWarningLabel, &QLabel::setVisible);
231 m_d->maskingModel.LAGER_QT(warningLabelVisible).nudge();
233 connect(&
m_d->maskingModel, &MaskingBrushModel::warningLabelTextChanged,
234 m_d->brushSizeWarningLabel, &QLabel::setText);
235 m_d->maskingModel.LAGER_QT(warningLabelText).nudge();
250 if (
m_d->maskingData->useMasterSize &&
251 !
m_d->maskingModel.m_preserveMode.get()) {
257 m_d->maskingModel.bakedOptionData().write(setting.
data());
269 m_d->maskingData.set(data);
270 m_d->maskingModel.startPreserveMode();
275 m_d->brushChooser->setImage(image);
290 m_d->maskingModel.setcompositeOpId(
m_d->compositeSelector->itemData(index).toString());
295 const int index =
m_d->compositeSelector->findData(QVariant::fromValue(
value));
297 m_d->compositeSelector->setCurrentIndex(index);
300#include "KisMaskingBrushOption.moc"
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
AutoBrushData bakedOptionData() const
int maxMaskingBrushSize() const
static QStringList supportedCompositeOpIds()
void lodLimitations(KisPaintopLodLimitations *l) const override
lager::reader< bool > maskingBrushEnabledReader() const
void readOptionSetting(const KisPropertiesConfigurationSP setting) override
void slotCompositeModeWidgetChanged(int index)
void writeOptionSetting(KisPropertiesConfigurationSP setting) const override
KisMaskingBrushOption(lager::reader< qreal > effectiveBrushSize)
void slotCompositeModePropertyChanged(const QString &value)
const QScopedPointer< Private > m_d
void setImage(KisImageWSP image) override
~KisMaskingBrushOption() override
KisResourcesInterfaceSP resourcesInterface() const
virtual void setChecked(bool checked)
void setConfigurationPage(QWidget *page)
void sigCheckedChanged(bool value)
void emitSettingChanged()
PredefinedBrushData bakedOptionData() const
static const KoCompositeOpRegistry & instance()
KoID getKoID(const QString &compositeOpID) const
lager::reader< qreal > m_masterBrushSize
MaskingBrushData bakedOptionData() const
KisPredefinedBrushModel predefinedBrushModel
std::optional< OriginalBrushInfo > m_originalBrushInfo
KisTextBrushModel textBrushModel
LAGER_QT_READER(qreal, realBrushSize)
lager::reader< BrushData > m_maskingBrushCursor
LAGER_QT_READER(bool, warningLabelVisible)
LAGER_QT(warningLabelText)
LAGER_QT_CURSOR(QString, compositeOpId)
KisAutoBrushModel autoBrushModel
lager::cursor< qreal > m_commonBrushSizeData
LAGER_QT(theoreticalBrushSize)
lager::state< bool, lager::automatic_tag > m_preserveMode
MaskingBrushModel(lager::cursor< MaskingBrushData > maskingData, lager::cursor< qreal > commonBrushSizeData, lager::reader< qreal > masterBrushSize)
LAGER_QT_CURSOR(bool, isEnabled)
lager::cursor< MaskingBrushData > m_maskingData
void updatePreserveMode()
LAGER_QT_READER(QString, warningLabelText)
LAGER_QT_READER(qreal, theoreticalBrushSize)
m_maskingBrushCursor(m_maskingData[&MaskingBrushData::brush])
LAGER_QT(warningLabelVisible)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
qreal effectiveSizeForBrush(BrushType type, const AutoBrushData &autoBrush, const PredefinedBrushData &predefinedBrush, const TextBrushData &textBrush)
KisPaintopLodLimitations brushLodLimitations(const BrushData &data)
QString warningLabelText(qreal realBrushSize, qreal theoreticalMaskingBrushSize)
bool warningLabelVisible(qreal theoreticalBrushSize)
PredefinedBrushData predefinedBrush
static MaskingBrushData read(const KisPropertiesConfiguration *config, qreal masterBrushSize, KisResourcesInterfaceSP resourcesInterface)
void write(KisPropertiesConfiguration *config) const
KisBrushSelectionWidget * brushChooser
lager::state< KisBrushModel::PrecisionData, lager::automatic_tag > brushPrecisionData
lager::state< qreal, lager::automatic_tag > commonBrushSizeData
QLabel * brushSizeWarningLabel
lager::state< KisBrushModel::MaskingBrushData, lager::automatic_tag > maskingData
lager::reader< qreal > masterBrushSize
MaskingBrushModel maskingModel
Private(lager::reader< qreal > effectiveBrushSize)
QComboBox * compositeSelector
QScopedPointer< QWidget > ui