Git commit a9271d26288b7b4dc1d3e76a2dbd99e18d0622d4 by Boudewijn Rempt. Committed on 31/03/2014 at 20:22. Pushed by rempt into branch 'master'. BUG:331592 Fix memory leak when creating strokes Use KisShared to handle memory management of the sensor objects that get created when making a stroke. M +21 -26 krita/plugins/paintops/libpaintop/kis_curve_option.cpp M +5 -5 krita/plugins/paintops/libpaintop/kis_curve_option.h M +4 -4 krita/plugins/paintops/libpaintop/kis_curve_option_widget.cpp M +4 -3 krita/plugins/paintops/libpaintop/kis_curve_option_widget.h M +4 -6 krita/plugins/paintops/libpaintop/kis_dynamic_sensor.cc M +14 -5 krita/plugins/paintops/libpaintop/kis_dynamic_sensor.h M +4 -4 krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.= cpp M +5 -5 krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.h M +6 -6 krita/plugins/paintops/libpaintop/kis_multi_sensors_selector= .cpp M +6 -5 krita/plugins/paintops/libpaintop/kis_multi_sensors_selector= .h M +1 -1 krita/plugins/paintops/libpaintop/kis_pressure_opacity_optio= n.cpp M +3 -6 krita/plugins/paintops/libpaintop/kis_pressure_rotation_opti= on.cpp M +2 -2 krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp M +2 -3 krita/plugins/paintops/libpaintop/tests/kis_sensors_test.h http://commits.kde.org/calligra/a9271d26288b7b4dc1d3e76a2dbd99e18d0622d4 diff --git a/krita/plugins/paintops/libpaintop/kis_curve_option.cpp b/krita= /plugins/paintops/libpaintop/kis_curve_option.cpp index f77f78c..add3499 100644 --- a/krita/plugins/paintops/libpaintop/kis_curve_option.cpp +++ b/krita/plugins/paintops/libpaintop/kis_curve_option.cpp @@ -30,10 +30,10 @@ KisCurveOption::KisCurveOption(const QString & label, c= onst QString& name, const , m_checked(checked) , m_useCurve(true) , m_useSameCurve(true) - , m_separateCurveValue(false) + , m_separateCurveValue(false) { foreach (const KoID& sensorId, KisDynamicSensor::sensorsIds()) { - KisDynamicSensor *sensor =3D KisDynamicSensor::id2Sensor(sensorId); + KisDynamicSensorSP sensor =3D KisDynamicSensor::id2Sensor(sensorId= ); sensor->setActive(false); replaceSensor(sensor); } @@ -47,9 +47,8 @@ KisCurveOption::KisCurveOption(const QString & label, con= st QString& name, const = KisCurveOption::~KisCurveOption() { - QList sensors =3D m_sensorMap.values(); m_sensorMap.clear(); - qDeleteAll(sensors); + } = const QString& KisCurveOption::name() const @@ -84,7 +83,7 @@ qreal KisCurveOption::value() const = void KisCurveOption::resetAllSensors() { - foreach (KisDynamicSensor *sensor, m_sensorMap.values()) { + foreach (KisDynamicSensorSP sensor, m_sensorMap.values()) { if (sensor->isActive()) { sensor->reset(); } @@ -106,7 +105,7 @@ void KisCurveOption::writeOptionSetting(KisPropertiesCo= nfiguration* setting) con doc.appendChild(root); root.setAttribute("id", "sensorslist"); = - foreach (KisDynamicSensor* sensor, activeSensors()) { + foreach (KisDynamicSensorSP sensor, activeSensors()) { QDomElement childelt =3D doc.createElement("ChildSensor"); sensor->toXML(doc, childelt); root.appendChild(childelt); @@ -144,7 +143,7 @@ void KisCurveOption::readNamedOptionSetting(const QStri= ng& prefix, const KisProp = QString sensorDefinition =3D setting->getString(prefix + "Sensor"); if (!sensorDefinition.contains("sensorslist")) { - KisDynamicSensor *s =3D KisDynamicSensor::createFromXML(sensorDefi= nition); + KisDynamicSensorSP s =3D KisDynamicSensor::createFromXML(sensorDef= inition); if (s) { replaceSensor(s); s->setActive(true); @@ -160,7 +159,7 @@ void KisCurveOption::readNamedOptionSetting(const QStri= ng& prefix, const KisProp if (node.isElement()) { QDomElement childelt =3D node.toElement(); if (childelt.tagName() =3D=3D "ChildSensor") { - KisDynamicSensor* s =3D KisDynamicSensor::createFromXM= L(childelt); + KisDynamicSensorSP s =3D KisDynamicSensor::createFromX= ML(childelt); if (s) { replaceSensor(s); s->setActive(true); @@ -178,7 +177,7 @@ void KisCurveOption::readNamedOptionSetting(const QStri= ng& prefix, const KisProp if (!setting->getString(prefix + "Sensor").contains("curve")) { //qDebug() << "\told format"; if (setting->getBool("Custom" + prefix, false)) { - foreach(KisDynamicSensor *s, m_sensorMap.values()) { + foreach(KisDynamicSensorSP s, m_sensorMap.values()) { s->setCurve(setting->getCubicCurve("Curve" + prefix)); } } @@ -201,17 +200,13 @@ void KisCurveOption::readNamedOptionSetting(const QSt= ring& prefix, const KisProp //qDebug() << "-----------------"; } = -void KisCurveOption::replaceSensor(KisDynamicSensor *s) +void KisCurveOption::replaceSensor(KisDynamicSensorSP s) { Q_ASSERT(s); - - if (m_sensorMap.contains(s->id()) && m_sensorMap[s->id()] !=3D s) { - delete m_sensorMap.take(s->id()); - } m_sensorMap[s->id()] =3D s; } = -KisDynamicSensor *KisCurveOption::sensor(const QString& sensorId, bool act= ive) const +KisDynamicSensorSP KisCurveOption::sensor(const QString& sensorId, bool ac= tive) const { if (m_sensorMap.contains(sensorId)) { if (!active) { @@ -266,12 +261,12 @@ void KisCurveOption::setCurve(const QString &sensorId= , bool useSameCurve, const // No switch in state, don't mess with the cache if (useSameCurve =3D=3D m_useSameCurve) { if (useSameCurve) { - foreach(KisDynamicSensor *s, m_sensorMap.values()) { + foreach(KisDynamicSensorSP s, m_sensorMap.values()) { s->setCurve(curve); } } else { - KisDynamicSensor *s =3D sensor(sensorId, false); + KisDynamicSensorSP s =3D sensor(sensorId, false); if (s) { s->setCurve(curve); } @@ -283,14 +278,14 @@ void KisCurveOption::setCurve(const QString &sensorId= , bool useSameCurve, const if (!m_useSameCurve && useSameCurve) { // Copy the custom curves to the cache and set the new curve o= n all sensors, active or not m_curveCache.clear(); - foreach(KisDynamicSensor *s, m_sensorMap.values()) { + foreach(KisDynamicSensorSP s, m_sensorMap.values()) { m_curveCache[s->id()] =3D s->curve(); s->setCurve(curve); } } else { //if (m_useSameCurve && !useSameCurve) // Restore the cached curves - KisDynamicSensor *s =3D 0; + KisDynamicSensorSP s =3D 0; foreach(QString id, m_curveCache.keys()) { if (m_sensorMap.contains(id)) { s =3D m_sensorMap[id]; @@ -359,7 +354,7 @@ double KisCurveOption::computeValue(const KisPaintInfor= mation& info) const } else { qreal t =3D 1.0; - foreach (KisDynamicSensor* s, m_sensorMap.values()) { + foreach (KisDynamicSensorSP s, m_sensorMap.values()) { ////qDebug() << "\tTesting" << s->name() << s->isActive(); if (s->isActive()) { t *=3D s->parameter(info); @@ -374,10 +369,10 @@ double KisCurveOption::computeValue(const KisPaintInf= ormation& info) const } } = -QList KisCurveOption::sensors() +QList KisCurveOption::sensors() { - QList sensorList; - foreach(KisDynamicSensor* sensor, m_sensorMap.values()) { + QList sensorList; + foreach(KisDynamicSensorSP sensor, m_sensorMap.values()) { if (sensor->isActive()) { sensorList << sensor; } @@ -387,10 +382,10 @@ QList KisCurveOption::sensors() return m_sensorMap.values(); } = -QList KisCurveOption::activeSensors() const +QList KisCurveOption::activeSensors() const { - QList sensorList; - foreach(KisDynamicSensor* sensor, m_sensorMap.values()) { + QList sensorList; + foreach(KisDynamicSensorSP sensor, m_sensorMap.values()) { if (sensor->isActive()) { sensorList << sensor; } diff --git a/krita/plugins/paintops/libpaintop/kis_curve_option.h b/krita/p= lugins/paintops/libpaintop/kis_curve_option.h index 9a3ab6f..a4bfdf0 100644 --- a/krita/plugins/paintops/libpaintop/kis_curve_option.h +++ b/krita/plugins/paintops/libpaintop/kis_curve_option.h @@ -65,10 +65,10 @@ public: qreal value() const; = void resetAllSensors(); - KisDynamicSensor *sensor(const QString &sensorId, bool active) const; - void replaceSensor(KisDynamicSensor *sensor); - QList sensors(); - QList activeSensors() const; + KisDynamicSensorSP sensor(const QString &sensorId, bool active) const; + void replaceSensor(KisDynamicSensorSP sensor); + QList sensors(); + QList activeSensors() const; = bool isCheckable(); bool isChecked() const; @@ -112,7 +112,7 @@ protected: bool m_useSameCurve; bool m_separateCurveValue; = - QMap m_sensorMap; + QMap m_sensorMap; QMap m_curveCache; = private: diff --git a/krita/plugins/paintops/libpaintop/kis_curve_option_widget.cpp = b/krita/plugins/paintops/libpaintop/kis_curve_option_widget.cpp index 4d82b50..c3ea0e8 100644 --- a/krita/plugins/paintops/libpaintop/kis_curve_option_widget.cpp +++ b/krita/plugins/paintops/libpaintop/kis_curve_option_widget.cpp @@ -53,8 +53,8 @@ KisCurveOptionWidget::KisCurveOptionWidget(KisCurveOption= * curveOption, bool hid = connect(m_curveOptionWidget->curveWidget, SIGNAL(modified()), this, SL= OT(transferCurve())); connect(m_curveOptionWidget->sensorSelector, SIGNAL(parametersChanged(= )), SIGNAL(sigSettingChanged())); - connect(m_curveOptionWidget->sensorSelector, SIGNAL(highlightedSensorC= hanged(KisDynamicSensor *)), SLOT(updateSensorCurveLabels(KisDynamicSensor = *))); - connect(m_curveOptionWidget->sensorSelector, SIGNAL(highlightedSensorC= hanged(KisDynamicSensor *)), SLOT(updateCurve(KisDynamicSensor *))); + connect(m_curveOptionWidget->sensorSelector, SIGNAL(highlightedSensorC= hanged(KisDynamicSensorSP )), SLOT(updateSensorCurveLabels(KisDynamicSensor= SP ))); + connect(m_curveOptionWidget->sensorSelector, SIGNAL(highlightedSensorC= hanged(KisDynamicSensorSP )), SLOT(updateCurve(KisDynamicSensorSP ))); connect(m_curveOptionWidget->checkBoxUseSameCurve, SIGNAL(stateChanged= (int)), SLOT(transferCurve())); = m_curveOptionWidget->label_ymin->setText(curveOption->minimumLabel()); @@ -137,7 +137,7 @@ void KisCurveOptionWidget::transferCurve() emit sigSettingChanged(); } = -void KisCurveOptionWidget::updateSensorCurveLabels(KisDynamicSensor *senso= r) +void KisCurveOptionWidget::updateSensorCurveLabels(KisDynamicSensorSP sens= or) { if (sensor) { m_curveOptionWidget->label_xmin->setText(sensor->minimumLabel()); @@ -145,7 +145,7 @@ void KisCurveOptionWidget::updateSensorCurveLabels(KisD= ynamicSensor *sensor) } } = -void KisCurveOptionWidget::updateCurve(KisDynamicSensor *sensor) +void KisCurveOptionWidget::updateCurve(KisDynamicSensorSP sensor) { if (sensor) { bool blockSignal =3D m_curveOptionWidget->curveWidget->blockSignal= s(true); diff --git a/krita/plugins/paintops/libpaintop/kis_curve_option_widget.h b/= krita/plugins/paintops/libpaintop/kis_curve_option_widget.h index 8d0ccf2..41ea563 100644 --- a/krita/plugins/paintops/libpaintop/kis_curve_option_widget.h +++ b/krita/plugins/paintops/libpaintop/kis_curve_option_widget.h @@ -26,7 +26,8 @@ = class Ui_WdgCurveOption; class KisCurveOption; -class KisDynamicSensor; + +#include = /** * XXX; Add a reset button! @@ -53,8 +54,8 @@ protected: private slots: = void transferCurve(); - void updateSensorCurveLabels(KisDynamicSensor *sensor); - void updateCurve(KisDynamicSensor *sensor); + void updateSensorCurveLabels(KisDynamicSensorSP sensor); + void updateCurve(KisDynamicSensorSP sensor); void updateValues(); void disableWidgets(bool disable); = diff --git a/krita/plugins/paintops/libpaintop/kis_dynamic_sensor.cc b/krit= a/plugins/paintops/libpaintop/kis_dynamic_sensor.cc index 91fd83d..1e7d400 100644 --- a/krita/plugins/paintops/libpaintop/kis_dynamic_sensor.cc +++ b/krita/plugins/paintops/libpaintop/kis_dynamic_sensor.cc @@ -26,8 +26,6 @@ #include "sensors/kis_dynamic_sensor_fade.h" #include "sensors/kis_dynamic_sensor_fuzzy.h" = -static int sensorcount =3D 0; - KisDynamicSensor::KisDynamicSensor(const KoID& id) : m_id(id) , m_customCurve(false) @@ -51,7 +49,7 @@ void KisDynamicSensor::reset() { } = -KisDynamicSensor *KisDynamicSensor::id2Sensor(const KoID& id) +KisDynamicSensorSP KisDynamicSensor::id2Sensor(const KoID& id) { if (id.id() =3D=3D PressureId.id()) { return new KisDynamicSensorPressure(); @@ -100,7 +98,7 @@ KisDynamicSensor *KisDynamicSensor::id2Sensor(const KoID= & id) } = = -KisDynamicSensor *KisDynamicSensor::createFromXML(const QString& s) +KisDynamicSensorSP KisDynamicSensor::createFromXML(const QString& s) { QDomDocument doc; doc.setContent(s); @@ -108,10 +106,10 @@ KisDynamicSensor *KisDynamicSensor::createFromXML(con= st QString& s) return createFromXML(e); } = -KisDynamicSensor *KisDynamicSensor::createFromXML(const QDomElement& e) +KisDynamicSensorSP KisDynamicSensor::createFromXML(const QDomElement& e) { QString id =3D e.attribute("id", ""); - KisDynamicSensor *sensor =3D id2Sensor(id); + KisDynamicSensorSP sensor =3D id2Sensor(id); if (sensor) { sensor->fromXML(e); } diff --git a/krita/plugins/paintops/libpaintop/kis_dynamic_sensor.h b/krita= /plugins/paintops/libpaintop/kis_dynamic_sensor.h index 0e776e2..87497fe 100644 --- a/krita/plugins/paintops/libpaintop/kis_dynamic_sensor.h +++ b/krita/plugins/paintops/libpaintop/kis_dynamic_sensor.h @@ -30,6 +30,9 @@ #include "kis_serializable_configuration.h" #include "kis_curve_label.h" #include +#include +#include + = class QWidget; class KisPaintInformation; @@ -50,12 +53,16 @@ const KoID PerspectiveId("perspective", ki18n("Perspect= ive")); ///< number depen const KoID TangentialPressureId("tangentialpressure", ki18n("Tangential pr= essure")); ///< the wheel on an airbrush device const KoID SensorsListId("sensorslist", "SHOULD NOT APPEAR IN THE UI !"); = ///< this a non user-visible sensor that can store a list of other sensors,= and multiply their output = +class KisDynamicSensor; +typedef KisSharedPtr KisDynamicSensorSP; + + /** * Sensors are used to extract from KisPaintInformation a single * double value which can be used to control the parameters of * a brush. */ -class PAINTOP_EXPORT KisDynamicSensor : public KisSerializableConfiguration +class PAINTOP_EXPORT KisDynamicSensor : public KisSerializableConfiguratio= n, public KisShared { public: enum ParameterSign { @@ -90,13 +97,13 @@ public: /** * Creates a sensor from its identifiant. */ - static KisDynamicSensor *id2Sensor(const KoID&); - static KisDynamicSensor *id2Sensor(const QString& s) { + static KisDynamicSensorSP id2Sensor(const KoID&); + static KisDynamicSensorSP id2Sensor(const QString& s) { return id2Sensor(KoID(s)); } = - static KisDynamicSensor *createFromXML(const QString&); - static KisDynamicSensor *createFromXML(const QDomElement&); + static KisDynamicSensorSP createFromXML(const QString&); + static KisDynamicSensorSP createFromXML(const QDomElement&); = /** * @return the list of sensors @@ -142,6 +149,8 @@ protected: = private: = + Q_DISABLE_COPY(KisDynamicSensor) + const KoID& m_id; QString m_minimumLabel; QString m_maximumLabel; diff --git a/krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.cp= p b/krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.cpp index 3138cfd..40d0e82 100644 --- a/krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.cpp +++ b/krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.cpp @@ -50,7 +50,7 @@ QVariant KisMultiSensorsModel::data(const QModelIndex &in= dex, int role) const } else if (role =3D=3D Qt::CheckStateRole) { QString selectedSensorId =3D KisDynamicSensor::sensorsIds()[index.= row()].id(); - KisDynamicSensor *sensor =3D m_curveOption->sensor(selectedSensorI= d, false); + KisDynamicSensorSP sensor =3D m_curveOption->sensor(selectedSensor= Id, false); if (sensor) { //qDebug() << sensor->id() << sensor->isActive(); return QVariant(sensor->isActive() ? Qt::Checked : Qt::Uncheck= ed); @@ -73,7 +73,7 @@ bool KisMultiSensorsModel::setData(const QModelIndex &ind= ex, const QVariant &val } else { //qDebug() << "Asking for" << KisDynamicSensor::sensorsIds()[i= ndex.row()].id(); - KisDynamicSensor *sensor =3D m_curveOption->sensor(KisDynamicS= ensor::sensorsIds()[index.row()].id(), false); + KisDynamicSensorSP sensor =3D m_curveOption->sensor(KisDynamic= Sensor::sensorsIds()[index.row()].id(), false); //qDebug() << "\tgot" << sensor; if (!sensor) { sensor =3D KisDynamicSensor::id2Sensor(KisDynamicSensor::s= ensorsIds()[index.row()].id()); @@ -92,7 +92,7 @@ Qt::ItemFlags KisMultiSensorsModel::flags(const QModelInd= ex & /*index */) const return Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnab= led; } = -KisDynamicSensor *KisMultiSensorsModel::getSensor(const QModelIndex& index) +KisDynamicSensorSP KisMultiSensorsModel::getSensor(const QModelIndex& inde= x) { if (!index.isValid()) return 0; QString id =3D KisDynamicSensor::sensorsIds()[index.row()].id(); @@ -107,7 +107,7 @@ void KisMultiSensorsModel::setCurrentCurve(const QModel= Index& currentIndex, cons m_curveOption->setCurve(selectedSensorId, useSameCurve, curve); } = -QModelIndex KisMultiSensorsModel::sensorIndex(KisDynamicSensor *arg1) +QModelIndex KisMultiSensorsModel::sensorIndex(KisDynamicSensorSP arg1) { return index(KisDynamicSensor::sensorsIds().indexOf(KoID(arg1->id()))); } diff --git a/krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.h = b/krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.h index a3a8e16..dc3e21f 100644 --- a/krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.h +++ b/krita/plugins/paintops/libpaintop/kis_multi_sensors_model_p.h @@ -19,12 +19,12 @@ #define KISMULTISENSORSMODEL_H_ = #include +#include = class KisCubicCurve; -class KisDynamicSensorList; -class KisDynamicSensor; class KisCurveOption; = + class KisMultiSensorsModel : public QAbstractListModel { Q_OBJECT @@ -44,20 +44,20 @@ public: = virtual Qt::ItemFlags flags(const QModelIndex & index) const; = - KisDynamicSensor *getSensor(const QModelIndex& index); + KisDynamicSensorSP getSensor(const QModelIndex& index); = void setCurrentCurve(const QModelIndex& currentIndex, const KisCubicCu= rve& curve, bool useSameCurve); = /** * Create an index that correspond to the sensor given in argument. */ - QModelIndex sensorIndex(KisDynamicSensor *arg1); + QModelIndex sensorIndex(KisDynamicSensorSP arg1); = void resetCurveOption(); = signals: = - void sensorChanged(KisDynamicSensor *sensor); + void sensorChanged(KisDynamicSensorSP sensor); = /** * This signal is emitted when the parameters of sensor are changed. diff --git a/krita/plugins/paintops/libpaintop/kis_multi_sensors_selector.c= pp b/krita/plugins/paintops/libpaintop/kis_multi_sensors_selector.cpp index 30d33a1..dd5202d 100644 --- a/krita/plugins/paintops/libpaintop/kis_multi_sensors_selector.cpp +++ b/krita/plugins/paintops/libpaintop/kis_multi_sensors_selector.cpp @@ -36,7 +36,7 @@ KisMultiSensorsSelector::KisMultiSensorsSelector(QWidget*= parent) d->currentConfigWidget =3D 0; d->form.setupUi(this); d->model =3D new KisMultiSensorsModel(this); - connect(d->model, SIGNAL(sensorChanged(KisDynamicSensor *)), SIGNAL(se= nsorChanged(KisDynamicSensor *))); + connect(d->model, SIGNAL(sensorChanged(KisDynamicSensorSP )), SIGNAL(s= ensorChanged(KisDynamicSensorSP ))); connect(d->model, SIGNAL(parametersChanged()), SIGNAL(parametersChange= d())); connect(d->form.sensorsList, SIGNAL(activated(QModelIndex)), SLOT(sens= orActivated(QModelIndex))); connect(d->form.sensorsList, SIGNAL(clicked(QModelIndex)), SLOT(sensor= Activated(QModelIndex))); @@ -52,24 +52,24 @@ KisMultiSensorsSelector::~KisMultiSensorsSelector() void KisMultiSensorsSelector::setCurveOption(KisCurveOption *curveOption) { d->model->setCurveOption(curveOption); - KisDynamicSensor *s =3D curveOption->activeSensors().first(); + KisDynamicSensorSP s =3D curveOption->activeSensors().first(); if (!s) { s =3D curveOption->sensors().first(); } setCurrent(s); } = -void KisMultiSensorsSelector::setCurrent(KisDynamicSensor *_sensor) +void KisMultiSensorsSelector::setCurrent(KisDynamicSensorSP _sensor) { d->form.sensorsList->setCurrentIndex(d->model->sensorIndex(_sensor)); = // make sure the first element is selected - KisDynamicSensor *sensor =3D currentHighlighted(); + KisDynamicSensorSP sensor =3D currentHighlighted(); if (!sensor) { sensor =3D d->model->getSensor(d->model->index(0, 0)); } emit(highlightedSensorChanged(sensor)); } = -KisDynamicSensor *KisMultiSensorsSelector::currentHighlighted() +KisDynamicSensorSP KisMultiSensorsSelector::currentHighlighted() { return d->model->getSensor(d->form.sensorsList->currentIndex()); } @@ -77,7 +77,7 @@ KisDynamicSensor *KisMultiSensorsSelector::currentHighlig= hted() void KisMultiSensorsSelector::sensorActivated(const QModelIndex& index) { delete d->currentConfigWidget; - KisDynamicSensor *sensor =3D d->model->getSensor(index); + KisDynamicSensorSP sensor =3D d->model->getSensor(index); if (sensor) { d->currentConfigWidget =3D sensor->createConfigurationWidget(d->fo= rm.widgetConfiguration, this); if (d->currentConfigWidget) { diff --git a/krita/plugins/paintops/libpaintop/kis_multi_sensors_selector.h= b/krita/plugins/paintops/libpaintop/kis_multi_sensors_selector.h index c9ccb89..7d21a44 100644 --- a/krita/plugins/paintops/libpaintop/kis_multi_sensors_selector.h +++ b/krita/plugins/paintops/libpaintop/kis_multi_sensors_selector.h @@ -20,9 +20,10 @@ = class KisCubicCurve; class QModelIndex; -class KisDynamicSensor; class KisCurveOption; = +#include + class KisMultiSensorsSelector : public QWidget { Q_OBJECT @@ -32,8 +33,8 @@ public: ~KisMultiSensorsSelector(); = void setCurveOption(KisCurveOption *curveOption); - void setCurrent(KisDynamicSensor *_sensor); - KisDynamicSensor *currentHighlighted(); + void setCurrent(KisDynamicSensorSP _sensor); + KisDynamicSensorSP currentHighlighted(); void setCurrentCurve(const KisCubicCurve& curve, bool useSameCurve); void reload(); = @@ -43,14 +44,14 @@ private slots: = signals: = - void sensorChanged(KisDynamicSensor *sensor); + void sensorChanged(KisDynamicSensorSP sensor); = /** * This signal is emitted when the parameters of sensor are changed. */ void parametersChanged(); = - void highlightedSensorChanged(KisDynamicSensor *sensor); + void highlightedSensorChanged(KisDynamicSensorSP sensor); private: struct Private; Private* const d; diff --git a/krita/plugins/paintops/libpaintop/kis_pressure_opacity_option.= cpp b/krita/plugins/paintops/libpaintop/kis_pressure_opacity_option.cpp index 046a7db..8b8cd57 100644 --- a/krita/plugins/paintops/libpaintop/kis_pressure_opacity_option.cpp +++ b/krita/plugins/paintops/libpaintop/kis_pressure_opacity_option.cpp @@ -41,7 +41,7 @@ void KisPressureOpacityOption::readOptionSetting(const Ki= sPropertiesConfiguratio { KisCurveOption::readOptionSetting(setting); if (setting->getString("OpacityVersion", "1") =3D=3D "1") { - KisDynamicSensor *pressureSensor =3D sensor(PressureId.id(), true); + KisDynamicSensorSP pressureSensor =3D sensor(PressureId.id(), true= ); if (pressureSensor) { QList points =3D pressureSensor->curve().points(); QList points_new; diff --git a/krita/plugins/paintops/libpaintop/kis_pressure_rotation_option= .cpp b/krita/plugins/paintops/libpaintop/kis_pressure_rotation_option.cpp index e88ee63..3df4a06 100644 --- a/krita/plugins/paintops/libpaintop/kis_pressure_rotation_option.cpp +++ b/krita/plugins/paintops/libpaintop/kis_pressure_rotation_option.cpp @@ -31,11 +31,8 @@ KisPressureRotationOption::KisPressureRotationOption() m_canvasAxisXMirrored(false), m_canvasAxisYMirrored(false) { - setMinimumLabel(i18n("0=C2=B0")); setMaximumLabel(i18n("360=C2=B0")); - - } = double KisPressureRotationOption::apply(const KisPaintInformation & info) = const @@ -43,7 +40,7 @@ double KisPressureRotationOption::apply(const KisPaintInf= ormation & info) const if (!isChecked()) return m_defaultAngle; = bool dependsOnViewportTransformations =3D false; - foreach(const KisDynamicSensor *s, activeSensors()) { + foreach(const KisDynamicSensorSP s, activeSensors()) { if (s->dependsOnCanvasRotation()) { dependsOnViewportTransformations =3D true; break; @@ -58,7 +55,7 @@ double KisPressureRotationOption::apply(const KisPaintInf= ormation & info) const 0.5 + computeValue(info); = /* Special Case for Fuzzy Sensor to provide for Positive and Negative = Rotation */ - KisDynamicSensorFuzzy *s =3D dynamic_cast(sens= or(FuzzyId.id(), true)); + KisDynamicSensorFuzzy *s =3D dynamic_cast(sens= or(FuzzyId.id(), true).data()); if (s && s->isActive()) { if (s->rotationModeEnabled()) { return rand()%2 =3D=3D 0?fmod(rotationCoeff * 2.0 * M_PI + bas= eAngle, 2.0 * M_PI): @@ -87,7 +84,7 @@ void KisPressureRotationOption::readOptionSetting(const K= isPropertiesConfigurati = void KisPressureRotationOption::applyFanCornersInfo(KisPaintOp *op) { - KisDynamicSensorDrawingAngle *sensor =3D dynamic_cast(this->sensor(DrawingAngleId.id(), true)); + KisDynamicSensorDrawingAngle *sensor =3D dynamic_cast(this->sensor(DrawingAngleId.id(), true).data()); = /** * A special case for the Drawing Angle sensor, because it diff --git a/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp b= /krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp index 2f18d33..4f6dc27 100644 --- a/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp +++ b/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp @@ -35,11 +35,11 @@ KisSensorsTest::KisSensorsTest() = void KisSensorsTest::testDrawingAngle() { - KisDynamicSensor *sensor =3D KisDynamicSensor::id2Sensor(DrawingAngleI= d); + KisDynamicSensorSP sensor =3D KisDynamicSensor::id2Sensor(DrawingAngle= Id); testBound(sensor); } = -void KisSensorsTest::testBound(KisDynamicSensor *sensor) +void KisSensorsTest::testBound(KisDynamicSensorSP sensor) { foreach(const KisPaintInformation & pi, paintInformations) { double v =3D sensor->parameter(pi); diff --git a/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.h b/k= rita/plugins/paintops/libpaintop/tests/kis_sensors_test.h index c6b1ccc..71cabb1 100644 --- a/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.h +++ b/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.h @@ -22,8 +22,7 @@ #include = #include "kis_paint_information.h" - -class KisDynamicSensor; +#include "kis_dynamic_sensor.h" = class KisSensorsTest : public QObject { @@ -34,7 +33,7 @@ private slots: = void testDrawingAngle(); private: - void testBound(KisDynamicSensor *sensor); + void testBound(KisDynamicSensorSP sensor); private: QList paintInformations; };