Krita Source Code Documentation
Loading...
Searching...
No Matches
KisKritaSensorPack Class Reference

#include <KisKritaSensorPack.h>

+ Inheritance diagram for KisKritaSensorPack:

Public Types

enum class  Checkability { NotCheckable , Checkable , CheckableIfHasPrefix }
 

Public Member Functions

int calcActiveSensorLength (const QString &activeSensorId) const override
 
KisSensorPackInterfaceclone () const override
 
bool compare (const KisSensorPackInterface *rhs) const override
 
std::vector< const KisSensorData * > constSensors () const override
 
const KisKritaSensorDataconstSensorsStruct () const
 
 KisKritaSensorPack (Checkability checkability)
 
 KisKritaSensorPack (const KisKritaSensorPack &rhs)=default
 
bool read (KisCurveOptionDataCommon &data, const KisPropertiesConfiguration *setting) const override
 
std::vector< KisSensorData * > sensors () override
 
KisKritaSensorDatasensorsStruct ()
 
void write (const KisCurveOptionDataCommon &data, KisPropertiesConfiguration *setting) const override
 
- Public Member Functions inherited from KisSensorPackInterface
virtual ~KisSensorPackInterface ()
 

Private Attributes

Checkability m_checkability
 
KisKritaSensorData m_data
 

Detailed Description

Definition at line 58 of file KisKritaSensorPack.h.

Member Enumeration Documentation

◆ Checkability

Some options make be uncheckable in normal situation, and become checkable when loaded from a prefix. E.g. Opacity, Flow and Size options of the masking brush. Such options will be marked with CheckableIfHasPrefix and their state will be deduced from the prefix.

Enumerator
NotCheckable 
Checkable 
CheckableIfHasPrefix 

Definition at line 68 of file KisKritaSensorPack.h.

Constructor & Destructor Documentation

◆ KisKritaSensorPack() [1/2]

KisKritaSensorPack::KisKritaSensorPack ( Checkability checkability)

Definition at line 74 of file KisKritaSensorPack.cpp.

75 : m_checkability(checkability)
76{
77}
Checkability m_checkability

◆ KisKritaSensorPack() [2/2]

KisKritaSensorPack::KisKritaSensorPack ( const KisKritaSensorPack & rhs)
default

Member Function Documentation

◆ calcActiveSensorLength()

int KisKritaSensorPack::calcActiveSensorLength ( const QString & activeSensorId) const
overridevirtual

Reimplemented from KisSensorPackInterface.

Definition at line 274 of file KisKritaSensorPack.cpp.

275{
276 if (activeSensorId == FadeId.id()) {
277 return m_data.sensorFade.length;
278 } else if (activeSensorId == DistanceId.id()) {
280 } else if (activeSensorId == TimeId.id()) {
281 return m_data.sensorTime.length;
282 }
283
284 return -1;
285}
const KoID FadeId("fade", ki18nc("Context: dynamic sensors", "Fade"))
generate a number that increase every time you call it (e.g. per dab)
const KoID DistanceId("distance", ki18nc("Context: dynamic sensors", "Distance"))
generate a number that increase with distance
const KoID TimeId("time", ki18nc("Context: dynamic sensors", "Time"))
generate a number that increase with time
KisKritaSensorData m_data
QString id() const
Definition KoID.cpp:63
KisSensorWithLengthData sensorTime
KisSensorWithLengthData sensorDistance
KisSensorWithLengthData sensorFade

References DistanceId(), FadeId(), KoID::id(), KisSensorWithLengthData::length, m_data, KisKritaSensorData::sensorDistance, KisKritaSensorData::sensorFade, KisKritaSensorData::sensorTime, and TimeId().

◆ clone()

KisSensorPackInterface * KisKritaSensorPack::clone ( ) const
overridevirtual

Implements KisSensorPackInterface.

Definition at line 79 of file KisKritaSensorPack.cpp.

80{
81 return new KisKritaSensorPack(*this);
82}
KisKritaSensorPack(Checkability checkability)

References KisKritaSensorPack().

◆ compare()

bool KisKritaSensorPack::compare ( const KisSensorPackInterface * rhs) const
overridevirtual

Implements KisSensorPackInterface.

Definition at line 104 of file KisKritaSensorPack.cpp.

105{
106 const KisKritaSensorPack *pack = dynamic_cast<const KisKritaSensorPack*>(rhs);
109
110 return m_data == pack->m_data;
111}
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129

References KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, m_checkability, and m_data.

◆ constSensors()

std::vector< const KisSensorData * > KisKritaSensorPack::constSensors ( ) const
overridevirtual

Implements KisSensorPackInterface.

Definition at line 84 of file KisKritaSensorPack.cpp.

85{
86 return detail::sensors(&m_data);
87}
std::vector< SensorData * > sensors(Data *data)

References m_data, and detail::sensors().

◆ constSensorsStruct()

const KisKritaSensorData & KisKritaSensorPack::constSensorsStruct ( ) const

Definition at line 94 of file KisKritaSensorPack.cpp.

95{
96 return m_data;
97}

References m_data.

◆ read()

bool KisKritaSensorPack::read ( KisCurveOptionDataCommon & data,
const KisPropertiesConfiguration * setting ) const
overridevirtual

due to legacy reasons we initialize common curve with the "last read curve value"

Implements KisSensorPackInterface.

Definition at line 113 of file KisKritaSensorPack.cpp.

114{
117 (!data.prefix.isEmpty() ||
119
120 data.isChecked = !data.isCheckable || setting->getBool("Pressure" + data.id.id(), false);
121
122 std::vector<KisSensorData*> sensors = data.sensors();
123 QMap<QString, KisSensorData*> sensorById;
124
125 Q_FOREACH (KisSensorData *sensor, sensors) {
126 sensorById.insert(sensor->id.id(), sensor);
127 }
128
129 QSet<KisSensorData*> sensorsToReset;
130
131 QList l = sensorById.values();
132 if (!l.isEmpty()) {
133 sensorsToReset = QSet<KisSensorData*>(l.begin(), l.end());
134 }
135
136 const QString sensorDefinition = setting->getString(data.id.id() + "Sensor");
137
138 if (sensorDefinition.isEmpty()) {
139 // noop
140 } else if (!sensorDefinition.contains("sensorslist")) {
141 QDomDocument doc;
142 doc.setContent(sensorDefinition);
143 QDomElement e = doc.documentElement();
144
145 const QString sensorId = e.attribute("id", "");
146 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(!sensorId.isEmpty(), false);
147 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(sensorById.contains(sensorId), false);
148
149 KisSensorData *sensor = sensorById[sensorId];
150 sensor->read(e);
151 sensor->isActive = true;
152 sensorsToReset.remove(sensor);
153
154 data.commonCurve = sensor->curve;
155
156 } else {
157 QString proposedCommonCurve;
158
159 QDomDocument doc;
160 doc.setContent(sensorDefinition);
161 QDomElement elt = doc.documentElement();
162 QDomNode node = elt.firstChild();
163 while (!node.isNull()) {
164 if (node.isElement()) {
165 QDomElement childelt = node.toElement();
166 if (childelt.tagName() == "ChildSensor") {
167
168 const QString sensorId = childelt.attribute("id", "");
169 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(!sensorId.isEmpty(), false);
170 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(sensorById.contains(sensorId), false);
171
172 KisSensorData *sensor = sensorById[sensorId];
173 sensor->read(childelt);
174 sensor->isActive = true;
175 sensorsToReset.remove(sensor);
176
179 proposedCommonCurve = sensor->curve;
180 }
181 }
182 node = node.nextSibling();
183 }
184
185 data.commonCurve = !proposedCommonCurve.isEmpty() ? proposedCommonCurve : DEFAULT_CURVE_STRING;
186 }
187
188 data.useSameCurve = setting->getBool(data.id.id() + "UseSameCurve", true);
189
190 // Only load the old curve format if the curve wasn't saved by the sensor
191 // This will give every sensor the same curve.
192 if (!sensorDefinition.contains("curve")) {
193 if (setting->getBool("Custom" + data.id.id(), false)) {
194 data.commonCurve = setting->getString("Curve" + data.id.id(), DEFAULT_CURVE_STRING);
195 Q_FOREACH (KisSensorData *sensor, sensors) {
196 sensor->curve = data.commonCurve;
197 sensorsToReset.remove(sensor);
198 }
199 } else {
201 }
202 }
203
204 if (data.useSameCurve) {
205 data.commonCurve = setting->getString(data.id.id() + "commonCurve",
206 !data.commonCurve.isEmpty() ?
207 data.commonCurve :
209 if (data.commonCurve.isEmpty()) {
211 }
212 }
213
214 Q_FOREACH (KisSensorData *sensor, sensorsToReset) {
215 sensor->reset();
216 }
217
218 // At least one sensor needs to be active
219 if (std::find_if(sensors.begin(), sensors.end(),
220 std::mem_fn(&KisSensorData::isActive)) == sensors.end()) {
221
222 sensorById[PressureId.id()]->isActive = true;
223 }
224
225 data.strengthValue = setting->getDouble(data.id.id() + "Value", data.strengthMaxValue);
226
227 if (data.valueFixUpReadCallback) {
228 data.valueFixUpReadCallback(&data, setting);
229 }
230
231 data.useCurve = setting->getBool(data.id.id() + "UseCurve", true);
232 data.curveMode = setting->getInt(data.id.id() + "curveMode", 0);
233
234 return true;
235}
const KoID PressureId("pressure", ki18nc("Context: dynamic sensors", "Pressure"))
number depending on the pressure
std::vector< KisSensorData * > sensors() override
const QString DEFAULT_CURVE_STRING
std::vector< const KisSensorData * > sensors() const
ValueFixUpReadCallback valueFixUpReadCallback
QString getString(const QString &name, const QString &def=QString()) const
bool getBool(const QString &name, bool def=false) const
int getInt(const QString &name, int def=0) const
double getDouble(const QString &name, double def=0.0) const
virtual void reset()
virtual void read(const QDomElement &e)

References Checkable, CheckableIfHasPrefix, KisCurveOptionDataCommon::commonCurve, KisSensorData::curve, KisCurveOptionDataCommon::curveMode, DEFAULT_CURVE_STRING, KisPropertiesConfiguration::extractedPrefixKey(), KisPropertiesConfiguration::getBool(), KisPropertiesConfiguration::getDouble(), KisPropertiesConfiguration::getInt(), KisPropertiesConfiguration::getString(), KoID::id(), KisCurveOptionDataCommon::id, KisSensorData::id, KisSensorData::isActive, KisCurveOptionDataCommon::isCheckable, KisCurveOptionDataCommon::isChecked, KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, m_checkability, KisCurveOptionDataCommon::prefix, PressureId(), KisSensorData::read(), KisSensorData::reset(), KisCurveOptionDataCommon::sensors(), sensors(), KisCurveOptionDataCommon::strengthMaxValue, KisCurveOptionDataCommon::strengthValue, KisCurveOptionDataCommon::useCurve, KisCurveOptionDataCommon::useSameCurve, and KisCurveOptionDataCommon::valueFixUpReadCallback.

◆ sensors()

std::vector< KisSensorData * > KisKritaSensorPack::sensors ( )
overridevirtual

Implements KisSensorPackInterface.

Definition at line 89 of file KisKritaSensorPack.cpp.

90{
91 return detail::sensors(&m_data);
92}

References m_data, and detail::sensors().

◆ sensorsStruct()

KisKritaSensorData & KisKritaSensorPack::sensorsStruct ( )

Definition at line 99 of file KisKritaSensorPack.cpp.

100{
101 return m_data;
102}

References m_data.

◆ write()

void KisKritaSensorPack::write ( const KisCurveOptionDataCommon & data,
KisPropertiesConfiguration * setting ) const
overridevirtual

Implements KisSensorPackInterface.

Definition at line 237 of file KisKritaSensorPack.cpp.

238{
239 setting->setProperty("Pressure" + data.id.id(), data.isChecked || !data.isCheckable);
240
241 QVector<const KisSensorData*> activeSensors;
242 Q_FOREACH(const KisSensorData *sensor, data.sensors()) {
243 if (sensor->isActive) {
244 activeSensors.append(sensor);
245 }
246 }
247
248 QDomDocument doc = QDomDocument("params");
249 QDomElement root = doc.createElement("params");
250 doc.appendChild(root);
251
252 if (activeSensors.size() == 1) {
253 activeSensors.first()->write(doc, root);
254 } else {
255 root.setAttribute("id", "sensorslist");
256 Q_FOREACH (const KisSensorData *sensor, activeSensors) {
257 QDomElement childelt = doc.createElement("ChildSensor");
258 sensor->write(doc, childelt);
259 root.appendChild(childelt);
260 }
261 }
262 setting->setProperty(data.id.id() + "Sensor", doc.toString());
263
264 setting->setProperty(data.id.id() + "UseCurve", data.useCurve);
265 setting->setProperty(data.id.id() + "UseSameCurve", data.useSameCurve);
266 setting->setProperty(data.id.id() + "Value", data.strengthValue);
267 if (data.valueFixUpWriteCallback) {
268 data.valueFixUpWriteCallback(data.strengthValue, setting);
269 }
270 setting->setProperty(data.id.id() + "curveMode", data.curveMode);
271 setting->setProperty(data.id.id() + "commonCurve", data.commonCurve);
272}
ValueFixUpWriteCallback valueFixUpWriteCallback
virtual void setProperty(const QString &name, const QVariant &value)
virtual void write(QDomDocument &doc, QDomElement &e) const

References KisCurveOptionDataCommon::commonCurve, KisCurveOptionDataCommon::curveMode, KoID::id(), KisCurveOptionDataCommon::id, KisSensorData::isActive, KisCurveOptionDataCommon::isCheckable, KisCurveOptionDataCommon::isChecked, KisCurveOptionDataCommon::sensors(), KisPropertiesConfiguration::setProperty(), KisCurveOptionDataCommon::strengthValue, KisCurveOptionDataCommon::useCurve, KisCurveOptionDataCommon::useSameCurve, KisCurveOptionDataCommon::valueFixUpWriteCallback, and KisSensorData::write().

Member Data Documentation

◆ m_checkability

Checkability KisKritaSensorPack::m_checkability
private

Definition at line 94 of file KisKritaSensorPack.h.

◆ m_data

KisKritaSensorData KisKritaSensorPack::m_data
private

Definition at line 93 of file KisKritaSensorPack.h.


The documentation for this class was generated from the following files: