File indexing completed on 2024-06-09 04:28:10

0001 /*
0002  *  SPDX-FileCopyrightText: 2012 Dmitry Kazakov <dimula73@gmail.com>
0003  *  SPDX-FileCopyrightText: 2014 Mohit Goyal <mohit.bits2011@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #include "kis_precision_option.h"
0009 
0010 #include "kis_properties_configuration.h"
0011 
0012 KisPrecisionOption::KisPrecisionOption(const KisPropertiesConfiguration *setting)
0013     : m_precisionData(KisBrushModel::PrecisionData::read(setting))
0014 {
0015 }
0016 
0017 int KisPrecisionOption::effectivePrecisionLevel(qreal effectiveDabSize) const
0018 {
0019     if (!m_precisionData.useAutoPrecision) {
0020         return m_precisionData.precisionLevel;
0021     } else {
0022         return effectiveDabSize < 30.0 || !m_hasImprecisePositionOptions ? 5 : 3;
0023     }
0024 }
0025 
0026 void KisPrecisionOption::setHasImprecisePositionOptions(bool value)
0027 {
0028     m_hasImprecisePositionOptions = value;
0029 }
0030 
0031 bool KisPrecisionOption::hasImprecisePositionOptions() const
0032 {
0033     return m_hasImprecisePositionOptions;
0034 }
0035 
0036 int KisPrecisionOption::precisionLevel() const
0037 {
0038     return m_precisionData.precisionLevel;
0039 }
0040 
0041 void KisPrecisionOption::setPrecisionLevel(int precisionLevel)
0042 {
0043     m_precisionData.precisionLevel = precisionLevel;
0044 }
0045 
0046 void KisPrecisionOption::setAutoPrecisionEnabled(int value)
0047 {
0048     m_precisionData.useAutoPrecision = value;
0049 }
0050 
0051 bool KisPrecisionOption::autoPrecisionEnabled()
0052 {
0053     return m_precisionData.useAutoPrecision;
0054 }
0055 
0056 namespace KisBrushModel {
0057 bool operator==(const PrecisionData &lhs, const PrecisionData &rhs)
0058 {
0059     return lhs.precisionLevel == rhs.precisionLevel &&
0060             lhs.useAutoPrecision == rhs.useAutoPrecision;
0061 }
0062 
0063 PrecisionData KisBrushModel::PrecisionData::read(const KisPropertiesConfiguration *config)
0064 {
0065 
0066     PrecisionData data;
0067     data.precisionLevel = config->getInt(PRECISION_LEVEL, 5);
0068     data.useAutoPrecision = config->getBool(AUTO_PRECISION_ENABLED,false);
0069     return data;
0070 }
0071 
0072 void PrecisionData::write(KisPropertiesConfiguration *config) const
0073 {
0074     config->setProperty(PRECISION_LEVEL, precisionLevel);
0075     config->setProperty(AUTO_PRECISION_ENABLED, useAutoPrecision);
0076 }
0077 }