[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [calligra] krita/plugins/paintops/libpaintop: BUG:331592 Fix memory leak when creating strokes
From:       Boudewijn Rempt <boud () valdyas ! org>
Date:       2014-03-31 20:34:01
Message-ID: E1WUiu9-0002ZL-PK () scm ! kde ! org
[Download RAW message or body]

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_option.cpp
M  +3    -6    krita/plugins/paintops/libpaintop/kis_pressure_rotation_option.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, const \
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 = KisDynamicSensor::id2Sensor(sensorId);
+        KisDynamicSensorSP sensor = KisDynamicSensor::id2Sensor(sensorId);
         sensor->setActive(false);
         replaceSensor(sensor);
     }
@@ -47,9 +47,8 @@ KisCurveOption::KisCurveOption(const QString & label, const \
QString& name, const  
 KisCurveOption::~KisCurveOption()
 {
-    QList<KisDynamicSensor*> sensors = 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(KisPropertiesConfiguration* setting) con  \
doc.appendChild(root);  root.setAttribute("id", "sensorslist");
 
-        foreach (KisDynamicSensor* sensor, activeSensors()) {
+        foreach (KisDynamicSensorSP sensor, activeSensors()) {
             QDomElement childelt = doc.createElement("ChildSensor");
             sensor->toXML(doc, childelt);
             root.appendChild(childelt);
@@ -144,7 +143,7 @@ void KisCurveOption::readNamedOptionSetting(const QString& \
prefix, const KisProp  
     QString sensorDefinition = setting->getString(prefix + "Sensor");
     if (!sensorDefinition.contains("sensorslist")) {
-        KisDynamicSensor *s = KisDynamicSensor::createFromXML(sensorDefinition);
+        KisDynamicSensorSP s = KisDynamicSensor::createFromXML(sensorDefinition);
         if (s) {
             replaceSensor(s);
             s->setActive(true);
@@ -160,7 +159,7 @@ void KisCurveOption::readNamedOptionSetting(const QString& \
prefix, const KisProp  if (node.isElement())  {
                 QDomElement childelt = node.toElement();
                 if (childelt.tagName() == "ChildSensor") {
-                    KisDynamicSensor* s = KisDynamicSensor::createFromXML(childelt);
+                    KisDynamicSensorSP s = \
KisDynamicSensor::createFromXML(childelt);  if (s) {
                         replaceSensor(s);
                         s->setActive(true);
@@ -178,7 +177,7 @@ void KisCurveOption::readNamedOptionSetting(const QString& \
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 QString& \
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()] != s) {
-        delete m_sensorMap.take(s->id());
-    }
     m_sensorMap[s->id()] = s;
 }
 
-KisDynamicSensor *KisCurveOption::sensor(const QString& sensorId, bool active) const
+KisDynamicSensorSP KisCurveOption::sensor(const QString& sensorId, bool active) \
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 == m_useSameCurve) {
         if (useSameCurve) {
-            foreach(KisDynamicSensor *s, m_sensorMap.values()) {
+            foreach(KisDynamicSensorSP s, m_sensorMap.values()) {
                 s->setCurve(curve);
             }
         }
         else {
-            KisDynamicSensor *s = sensor(sensorId, false);
+            KisDynamicSensorSP s = 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 on all \
sensors, active or not  m_curveCache.clear();
-            foreach(KisDynamicSensor *s, m_sensorMap.values()) {
+            foreach(KisDynamicSensorSP s, m_sensorMap.values()) {
                 m_curveCache[s->id()] = s->curve();
                 s->setCurve(curve);
             }
         }
         else { //if (m_useSameCurve && !useSameCurve)
             // Restore the cached curves
-            KisDynamicSensor *s = 0;
+            KisDynamicSensorSP s = 0;
             foreach(QString id, m_curveCache.keys()) {
                 if (m_sensorMap.contains(id)) {
                     s = m_sensorMap[id];
@@ -359,7 +354,7 @@ double KisCurveOption::computeValue(const KisPaintInformation& \
info) const  }
     else {
         qreal t = 1.0;
-        foreach (KisDynamicSensor* s, m_sensorMap.values()) {
+        foreach (KisDynamicSensorSP s, m_sensorMap.values()) {
             ////qDebug() << "\tTesting" << s->name() << s->isActive();
             if (s->isActive()) {
                 t *= s->parameter(info);
@@ -374,10 +369,10 @@ double KisCurveOption::computeValue(const KisPaintInformation& \
info) const  }
 }
 
-QList<KisDynamicSensor*> KisCurveOption::sensors()
+QList<KisDynamicSensorSP> KisCurveOption::sensors()
 {
-    QList<KisDynamicSensor*> sensorList;
-    foreach(KisDynamicSensor* sensor, m_sensorMap.values()) {
+    QList<KisDynamicSensorSP> sensorList;
+    foreach(KisDynamicSensorSP sensor, m_sensorMap.values()) {
         if (sensor->isActive()) {
             sensorList << sensor;
         }
@@ -387,10 +382,10 @@ QList<KisDynamicSensor*> KisCurveOption::sensors()
     return m_sensorMap.values();
 }
 
-QList<KisDynamicSensor*> KisCurveOption::activeSensors() const
+QList<KisDynamicSensorSP> KisCurveOption::activeSensors() const
 {
-    QList<KisDynamicSensor*> sensorList;
-    foreach(KisDynamicSensor* sensor, m_sensorMap.values()) {
+    QList<KisDynamicSensorSP> 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/plugins/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<KisDynamicSensor*> sensors();
-    QList<KisDynamicSensor*> activeSensors() const;
+    KisDynamicSensorSP sensor(const QString &sensorId, bool active) const;
+    void replaceSensor(KisDynamicSensorSP sensor);
+    QList<KisDynamicSensorSP> sensors();
+    QList<KisDynamicSensorSP> activeSensors() const;
 
     bool isCheckable();
     bool isChecked() const;
@@ -112,7 +112,7 @@ protected:
     bool m_useSameCurve;
     bool m_separateCurveValue;
 
-    QMap<QString, KisDynamicSensor*> m_sensorMap;
+    QMap<QString, KisDynamicSensorSP> m_sensorMap;
     QMap<QString, KisCubicCurve> 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, \
                SLOT(transferCurve()));
     connect(m_curveOptionWidget->sensorSelector, SIGNAL(parametersChanged()), \
                SIGNAL(sigSettingChanged()));
-    connect(m_curveOptionWidget->sensorSelector, \
SIGNAL(highlightedSensorChanged(KisDynamicSensor *)), \
                SLOT(updateSensorCurveLabels(KisDynamicSensor *)));
-    connect(m_curveOptionWidget->sensorSelector, \
SIGNAL(highlightedSensorChanged(KisDynamicSensor *)), \
SLOT(updateCurve(KisDynamicSensor *))); +    \
connect(m_curveOptionWidget->sensorSelector, \
SIGNAL(highlightedSensorChanged(KisDynamicSensorSP )), \
SLOT(updateSensorCurveLabels(KisDynamicSensorSP ))); +    \
connect(m_curveOptionWidget->sensorSelector, \
SIGNAL(highlightedSensorChanged(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 *sensor)
+void KisCurveOptionWidget::updateSensorCurveLabels(KisDynamicSensorSP sensor)
 {
     if (sensor) {
         m_curveOptionWidget->label_xmin->setText(sensor->minimumLabel());
@@ -145,7 +145,7 @@ void \
KisCurveOptionWidget::updateSensorCurveLabels(KisDynamicSensor *sensor)  }
 }
 
-void KisCurveOptionWidget::updateCurve(KisDynamicSensor *sensor)
+void KisCurveOptionWidget::updateCurve(KisDynamicSensorSP sensor)
 {
     if (sensor) {
         bool blockSignal = m_curveOptionWidget->curveWidget->blockSignals(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 <kis_dynamic_sensor.h>
 
 /**
  * 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/krita/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 = 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() == 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(const \
QString& s)  return createFromXML(e);
 }
 
-KisDynamicSensor *KisDynamicSensor::createFromXML(const QDomElement& e)
+KisDynamicSensorSP KisDynamicSensor::createFromXML(const QDomElement& e)
 {
     QString id = e.attribute("id", "");
-    KisDynamicSensor *sensor = id2Sensor(id);
+    KisDynamicSensorSP sensor = 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 <kis_cubic_curve.h>
+#include <kis_shared_ptr.h>
+#include <kis_shared.h>
+
 
 class QWidget;
 class KisPaintInformation;
@@ -50,12 +53,16 @@ const KoID PerspectiveId("perspective", ki18n("Perspective")); \
///< number depen  const KoID TangentialPressureId("tangentialpressure", \
ki18n("Tangential pressure")); ///< 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<KisDynamicSensor> 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 KisSerializableConfiguration, 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.cpp \
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 &index, int \
role) const  }
     else if (role == Qt::CheckStateRole) {
         QString selectedSensorId = KisDynamicSensor::sensorsIds()[index.row()].id();
-        KisDynamicSensor *sensor = m_curveOption->sensor(selectedSensorId, false);
+        KisDynamicSensorSP sensor = m_curveOption->sensor(selectedSensorId, false);
         if (sensor) {
             //qDebug() << sensor->id() << sensor->isActive();
             return QVariant(sensor->isActive() ? Qt::Checked : Qt::Unchecked);
@@ -73,7 +73,7 @@ bool KisMultiSensorsModel::setData(const QModelIndex &index, const \
QVariant &val  }
         else {
             //qDebug() << "Asking for" << \
                KisDynamicSensor::sensorsIds()[index.row()].id();
-            KisDynamicSensor *sensor = \
m_curveOption->sensor(KisDynamicSensor::sensorsIds()[index.row()].id(), false); +     \
KisDynamicSensorSP sensor = \
m_curveOption->sensor(KisDynamicSensor::sensorsIds()[index.row()].id(), false);  \
//qDebug() << "\tgot" << sensor;  if (!sensor) {
                 sensor = \
KisDynamicSensor::id2Sensor(KisDynamicSensor::sensorsIds()[index.row()].id()); @@ \
-92,7 +92,7 @@ Qt::ItemFlags KisMultiSensorsModel::flags(const QModelIndex & /*index \
                */) const
     return Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
 }
 
-KisDynamicSensor *KisMultiSensorsModel::getSensor(const QModelIndex& index)
+KisDynamicSensorSP KisMultiSensorsModel::getSensor(const QModelIndex& index)
 {
     if (!index.isValid()) return 0;
     QString id = KisDynamicSensor::sensorsIds()[index.row()].id();
@@ -107,7 +107,7 @@ void KisMultiSensorsModel::setCurrentCurve(const QModelIndex& \
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 <QAbstractListModel>
+#include <kis_dynamic_sensor.h>
 
 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 KisCubicCurve& \
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.cpp \
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 = 0;
     d->form.setupUi(this);
     d->model = new KisMultiSensorsModel(this);
-    connect(d->model, SIGNAL(sensorChanged(KisDynamicSensor *)), \
SIGNAL(sensorChanged(KisDynamicSensor *))); +    connect(d->model, \
SIGNAL(sensorChanged(KisDynamicSensorSP )), SIGNAL(sensorChanged(KisDynamicSensorSP \
                )));
     connect(d->model, SIGNAL(parametersChanged()), SIGNAL(parametersChanged()));
     connect(d->form.sensorsList, SIGNAL(activated(QModelIndex)), \
                SLOT(sensorActivated(QModelIndex)));
     connect(d->form.sensorsList, SIGNAL(clicked(QModelIndex)), \
SLOT(sensorActivated(QModelIndex))); @@ -52,24 +52,24 @@ \
KisMultiSensorsSelector::~KisMultiSensorsSelector()  void \
KisMultiSensorsSelector::setCurveOption(KisCurveOption *curveOption)  {
     d->model->setCurveOption(curveOption);
-    KisDynamicSensor *s = curveOption->activeSensors().first();
+    KisDynamicSensorSP s = curveOption->activeSensors().first();
     if (!s) {
         s = 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 = currentHighlighted();
+    KisDynamicSensorSP sensor = currentHighlighted();
     if (!sensor) {
         sensor = 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::currentHighlighted()
 void KisMultiSensorsSelector::sensorActivated(const QModelIndex& index)
 {
     delete d->currentConfigWidget;
-    KisDynamicSensor *sensor = d->model->getSensor(index);
+    KisDynamicSensorSP sensor = d->model->getSensor(index);
     if (sensor) {
         d->currentConfigWidget = \
sensor->createConfigurationWidget(d->form.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 <kis_dynamic_sensor.h>
+
 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 \
KisPropertiesConfiguratio  {
     KisCurveOption::readOptionSetting(setting);
     if (setting->getString("OpacityVersion", "1") == "1") {
-        KisDynamicSensor *pressureSensor = sensor(PressureId.id(), true);
+        KisDynamicSensorSP pressureSensor = sensor(PressureId.id(), true);
         if (pressureSensor) {
             QList<QPointF> points = pressureSensor->curve().points();
             QList<QPointF> 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 °"));
      setMaximumLabel(i18n("360 °"));
-
-
 }
 
 double KisPressureRotationOption::apply(const KisPaintInformation & info) const
@@ -43,7 +40,7 @@ double KisPressureRotationOption::apply(const KisPaintInformation & \
info) const  if (!isChecked()) return m_defaultAngle;
 
     bool dependsOnViewportTransformations = false;
-    foreach(const KisDynamicSensor *s, activeSensors()) {
+    foreach(const KisDynamicSensorSP s, activeSensors()) {
         if (s->dependsOnCanvasRotation()) {
             dependsOnViewportTransformations = true;
             break;
@@ -58,7 +55,7 @@ double KisPressureRotationOption::apply(const KisPaintInformation & \
info) const  0.5 + computeValue(info);
 
     /* Special Case for Fuzzy Sensor to provide for Positive and Negative Rotation \
                */
-    KisDynamicSensorFuzzy *s = \
dynamic_cast<KisDynamicSensorFuzzy*>(sensor(FuzzyId.id(), true)); +    \
KisDynamicSensorFuzzy *s = dynamic_cast<KisDynamicSensorFuzzy*>(sensor(FuzzyId.id(), \
true).data());  if (s && s->isActive()) {
         if (s->rotationModeEnabled()) {
             return rand()%2 == 0?fmod(rotationCoeff * 2.0 * M_PI + baseAngle, 2.0 * \
M_PI): @@ -87,7 +84,7 @@ void KisPressureRotationOption::readOptionSetting(const \
KisPropertiesConfigurati  
 void KisPressureRotationOption::applyFanCornersInfo(KisPaintOp *op)
 {
-    KisDynamicSensorDrawingAngle *sensor = \
dynamic_cast<KisDynamicSensorDrawingAngle*>(this->sensor(DrawingAngleId.id(), true)); \
+    KisDynamicSensorDrawingAngle *sensor = \
dynamic_cast<KisDynamicSensorDrawingAngle*>(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 = KisDynamicSensor::id2Sensor(DrawingAngleId);
+    KisDynamicSensorSP sensor = KisDynamicSensor::id2Sensor(DrawingAngleId);
     testBound(sensor);
 }
 
-void KisSensorsTest::testBound(KisDynamicSensor *sensor)
+void KisSensorsTest::testBound(KisDynamicSensorSP sensor)
 {
     foreach(const KisPaintInformation & pi, paintInformations) {
         double v = sensor->parameter(pi);
diff --git a/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.h \
b/krita/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 <QtTest>
 
 #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<KisPaintInformation> paintInformations;
 };


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic