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 }