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

#include <MyPaintSensorPack.h>

+ Inheritance diagram for MyPaintSensorPack:

Public Member Functions

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

Private Attributes

MyPaintSensorData m_data
 

Detailed Description

Definition at line 72 of file MyPaintSensorPack.h.

Constructor & Destructor Documentation

◆ MyPaintSensorPack() [1/2]

MyPaintSensorPack::MyPaintSensorPack ( )
default

◆ MyPaintSensorPack() [2/2]

MyPaintSensorPack::MyPaintSensorPack ( const MyPaintSensorPack & rhs)
default

Member Function Documentation

◆ clone()

KisSensorPackInterface * MyPaintSensorPack::clone ( ) const
overridevirtual

◆ compare()

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

Implements KisSensorPackInterface.

Definition at line 170 of file MyPaintSensorPack.cpp.

171{
172 const MyPaintSensorPack *pack = dynamic_cast<const MyPaintSensorPack*>(rhs);
174
175 return m_data == pack->m_data;
176}
MyPaintSensorData m_data
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129

References KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and m_data.

◆ constSensors()

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

Implements KisSensorPackInterface.

Definition at line 150 of file MyPaintSensorPack.cpp.

151{
152 return detail::sensors(&m_data);
153}
std::vector< SensorData * > sensors(Data *data)

References m_data, and detail::sensors().

◆ constSensorsStruct()

const MyPaintSensorData & MyPaintSensorPack::constSensorsStruct ( ) const

Definition at line 160 of file MyPaintSensorPack.cpp.

161{
162 return m_data;
163}

References m_data.

◆ read()

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

Implements KisSensorPackInterface.

Definition at line 339 of file MyPaintSensorPack.cpp.

340{
341 data.isChecked = !data.isCheckable || setting->getBool("Pressure" + data.id.id(), false);
342
343 std::vector<KisSensorData *> sensors = data.sensors();
344
345 // TODO: refactor into library resource
346 std::unique_ptr<MyPaintBrush, decltype(&mypaint_brush_unref)>
347 brush(mypaint_brush_new(), &mypaint_brush_unref);
348
349 const MyPaintBrushSetting brushSetting = optionIdToMyPaintBrushSettings(data.id);
350 mypaint_brush_from_string(brush.get(), setting->getProperty(MYPAINT_JSON).toByteArray());
351
352 for (auto it = sensors.begin(); it != sensors.end(); ++it) {
353 const MyPaintBrushInput input = sensorIdToMyPaintBrushInput((*it)->id);
354 const int numPoints = mypaint_brush_get_mapping_n(brush.get(), brushSetting, input);
355
356 QList<QPointF> points;
357 for(int i = 0; i < numPoints; i++) {
358 float x, y;
359 mypaint_brush_get_mapping_point(brush.get(), brushSetting, input, i, &x, &y);
360 points << QPointF(qreal(x), qreal(y));
361 }
362
363 if (points.size() > 1) {
364 (*it)->isActive = true;
365 (*it)->curve = KisCubicCurve(points).toString();
366 (*it)->setBaseCurveRange(KisAlgebra2D::accumulateBounds(points));
367 dynamic_cast<MyPaintSensorDataWithRange*>(*it)->reshapeCurve();
368 } else {
369 (*it)->reset();
370 }
371 }
372
373 // At least one sensor needs to be active
374 if (std::find_if(sensors.begin(), sensors.end(),
375 std::mem_fn(&KisSensorData::isActive)) == sensors.end()) {
376
377 sensors.front()->isActive = true;
378 data.useCurve = false;
379 } else {
380 data.useCurve = true;
381 }
382
383 data.strengthValue = qreal(mypaint_brush_get_base_value(brush.get(), brushSetting));
384
385 data.useSameCurve = false; // not used in mypaint engine
386 data.commonCurve = DEFAULT_CURVE_STRING; // not used in mypaint engine
387 data.curveMode = 0; // not used in mypaint engine
388
389 return true;
390}
MyPaintBrushSetting optionIdToMyPaintBrushSettings(const KoID &id)
MyPaintBrushInput sensorIdToMyPaintBrushInput(const KoID &id)
const QString MYPAINT_JSON
QString id() const
Definition KoID.cpp:63
std::vector< KisSensorData * > sensors() override
const QString DEFAULT_CURVE_STRING
void accumulateBounds(const Point &pt, Rect *bounds)
QString toString() const
std::vector< const KisSensorData * > sensors() const
bool getBool(const QString &name, bool def=false) const
virtual bool getProperty(const QString &name, QVariant &value) const

References KisAlgebra2D::accumulateBounds(), KisCurveOptionDataCommon::commonCurve, KisCurveOptionDataCommon::curveMode, DEFAULT_CURVE_STRING, KisPropertiesConfiguration::getBool(), KisPropertiesConfiguration::getProperty(), KoID::id(), KisCurveOptionDataCommon::id, KisSensorData::isActive, KisCurveOptionDataCommon::isCheckable, KisCurveOptionDataCommon::isChecked, MYPAINT_JSON, optionIdToMyPaintBrushSettings(), MyPaintSensorDataWithRange::reshapeCurve(), sensorIdToMyPaintBrushInput(), KisCurveOptionDataCommon::sensors(), sensors(), KisCurveOptionDataCommon::strengthValue, KisCubicCurve::toString(), KisCurveOptionDataCommon::useCurve, and KisCurveOptionDataCommon::useSameCurve.

◆ sensors()

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

Implements KisSensorPackInterface.

Definition at line 155 of file MyPaintSensorPack.cpp.

156{
157 return detail::sensors(&m_data);
158}

References m_data, and detail::sensors().

◆ sensorsStruct()

MyPaintSensorData & MyPaintSensorPack::sensorsStruct ( )

Definition at line 165 of file MyPaintSensorPack.cpp.

166{
167 return m_data;
168}

References m_data.

◆ write()

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

Implements KisSensorPackInterface.

Reimplemented in deprecated_remove_after_krita6::SensorPackOpacity, deprecated_remove_after_krita6::SensorPackHardness, and deprecated_remove_after_krita6::SensorPackRadiusLogarithmic.

Definition at line 392 of file MyPaintSensorPack.cpp.

393{
394 setting->setProperty("Pressure" + data.id.id(), data.isChecked || !data.isCheckable);
395
396 QVector<const KisSensorData*> activeSensors;
397 Q_FOREACH(const KisSensorData *sensor, data.sensors()) {
398 if (sensor->isActive) {
399 activeSensors.append(sensor);
400 }
401 }
402
403 QJsonDocument doc = QJsonDocument::fromJson(setting->getProperty(MYPAINT_JSON).toByteArray());
404
405 QJsonObject brush_json = doc.object();
406 QVariantMap map = brush_json.toVariantMap();
407 QVariantMap settings_map = map["settings"].toMap();
408 QVariantMap name_map = settings_map[data.id.id()].toMap();
409 QVariantMap inputs_map = name_map["inputs"].toMap();
410
411 const std::vector<const KisSensorData*> sensors = data.sensors();
412
413 for (auto it = sensors.begin(); it != sensors.end(); ++it) {
414 const KisSensorData *sensor = *it;
415 const QString sensorJsonId = sensorIdToMyPaintBrushInputJsonKey(sensor->id);
416
417 if (!sensor->isActive || !data.useCurve) {
418 inputs_map.remove(sensorJsonId);
419 } else {
420 KisCubicCurve curve(sensor->curve);
421 const QList<KisCubicCurvePoint> &points = curve.curvePoints();
422
423 QVariantList pointsList;
424
425 Q_FOREACH(const KisCubicCurvePoint &pt, points) {
426 pointsList.push_back(QVariantList{pt.x(), pt.y()});
427 }
428 inputs_map[sensorJsonId] = pointsList;
429 }
430 }
431
432 name_map["inputs"] = inputs_map;
433 name_map["base_value"] = data.strengthValue;
434
435 settings_map[data.id.id()] = name_map;
436 map["settings"] = settings_map;
437
438 doc = QJsonDocument(QJsonObject::fromVariantMap(map));
439 setting->setProperty(MYPAINT_JSON, doc.toJson());
440
441 // not used in mypaint engine
442 setting->setProperty(data.id.id() + "UseSameCurve", false);
443 setting->setProperty(data.id.id() + "commonCurve", DEFAULT_CURVE_STRING);
444 setting->setProperty(data.id.id() + "curveMode", 0);
445}
QString sensorIdToMyPaintBrushInputJsonKey(const KoID &id)
virtual void setProperty(const QString &name, const QVariant &value)

References KisSensorData::curve, KisCubicCurve::curvePoints(), DEFAULT_CURVE_STRING, KisPropertiesConfiguration::getProperty(), KoID::id(), KisCurveOptionDataCommon::id, KisSensorData::id, KisSensorData::isActive, KisCurveOptionDataCommon::isCheckable, KisCurveOptionDataCommon::isChecked, MYPAINT_JSON, sensorIdToMyPaintBrushInputJsonKey(), KisCurveOptionDataCommon::sensors(), sensors(), KisPropertiesConfiguration::setProperty(), KisCurveOptionDataCommon::strengthValue, KisCurveOptionDataCommon::useCurve, KisCubicCurvePoint::x(), and KisCubicCurvePoint::y().

Member Data Documentation

◆ m_data

MyPaintSensorData MyPaintSensorPack::m_data
private

Definition at line 92 of file MyPaintSensorPack.h.


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