File indexing completed on 2025-02-02 04:22:14
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "KisMaskingBrushOptionProperties.h" 0008 0009 #include <brushengine/KisPaintopSettingsIds.h> 0010 0011 #include <kis_image_config.h> 0012 0013 bool KisBrushModel::operator==(const KisBrushModel::MaskingBrushData &lhs, const KisBrushModel::MaskingBrushData &rhs) 0014 { 0015 return lhs.isEnabled == rhs.isEnabled && 0016 lhs.brush == rhs.brush && 0017 lhs.compositeOpId == rhs.compositeOpId && 0018 lhs.useMasterSize == rhs.useMasterSize && 0019 qFuzzyCompare(lhs.masterSizeCoeff, rhs.masterSizeCoeff); 0020 } 0021 0022 KisBrushModel::MaskingBrushData KisBrushModel::MaskingBrushData::read(const KisPropertiesConfiguration *config, qreal masterBrushSize, KisResourcesInterfaceSP resourcesInterface) 0023 { 0024 KisBrushModel::MaskingBrushData data; 0025 0026 data.isEnabled = config->getBool(KisPaintOpUtils::MaskingBrushEnabledTag); 0027 data.compositeOpId = config->getString(KisPaintOpUtils::MaskingBrushCompositeOpTag, COMPOSITE_MULT); 0028 data.useMasterSize = config->getBool(KisPaintOpUtils::MaskingBrushUseMasterSizeTag, true); 0029 0030 KisPropertiesConfigurationSP embeddedConfig = new KisPropertiesConfiguration(); 0031 config->getPrefixedProperties(KisPaintOpUtils::MaskingBrushPresetPrefix, embeddedConfig); 0032 0033 std::optional<BrushData> embeddedBrush = BrushData::read(embeddedConfig.constData(), resourcesInterface); 0034 0035 if (embeddedBrush) { 0036 data.brush = *embeddedBrush; 0037 } 0038 0039 if (data.useMasterSize) { 0040 data.masterSizeCoeff = config->getDouble(KisPaintOpUtils::MaskingBrushMasterSizeCoeffTag, 1.0); 0041 qreal size = data.masterSizeCoeff * masterBrushSize; 0042 0043 const qreal maxMaskingBrushSize = KisImageConfig(true).maxMaskingBrushSize(); 0044 0045 if (size > maxMaskingBrushSize) { 0046 size = maxMaskingBrushSize; 0047 } 0048 0049 KisBrushModel::setEffectiveSizeForBrush(data.brush.type, 0050 data.brush.autoBrush, 0051 data.brush.predefinedBrush, 0052 data.brush.textBrush, 0053 size); 0054 } 0055 0056 return data; 0057 } 0058 0059 void KisBrushModel::MaskingBrushData::write(KisPropertiesConfiguration *config) const 0060 { 0061 config->setProperty(KisPaintOpUtils::MaskingBrushEnabledTag, isEnabled); 0062 config->setProperty(KisPaintOpUtils::MaskingBrushCompositeOpTag, compositeOpId); 0063 config->setProperty(KisPaintOpUtils::MaskingBrushUseMasterSizeTag, useMasterSize); 0064 config->setProperty(KisPaintOpUtils::MaskingBrushMasterSizeCoeffTag, masterSizeCoeff); 0065 0066 // TODO: skip saving in some cases? 0067 // if (!isEnabled) return; 0068 0069 { 0070 KisPropertiesConfigurationSP embeddedConfig = new KisPropertiesConfiguration(); 0071 brush.write(embeddedConfig.data()); 0072 config->setPrefixedProperties(KisPaintOpUtils::MaskingBrushPresetPrefix, embeddedConfig); 0073 } 0074 }