1 #pragma once
2 
3 #ifndef TTONECURVEPARAM_H
4 #define TTONECURVEPARAM_H
5 
6 #include "tcommon.h"
7 #include "tparamset.h"
8 #include "tstroke.h"
9 #include "tnotanimatableparam.h"
10 
11 #include <QList>
12 
13 #ifdef _MSC_VER
14 #pragma warning(disable : 4251)
15 #endif
16 
17 #undef DVAPI
18 #undef DVVAR
19 #ifdef TPARAM_EXPORTS
20 #define DVAPI DV_EXPORT_API
21 #define DVVAR DV_EXPORT_VAR
22 #else
23 #define DVAPI DV_IMPORT_API
24 #define DVVAR DV_IMPORT_VAR
25 #endif
26 
27 //---------------------------------------------------------
28 
29 class DVAPI TToneCurveParam final : public TParam {
30   PERSIST_DECLARATION(TToneCurveParam)
31 
32   TParamSetP m_rgbaParamSet;
33   TParamSetP m_rgbParamSet;
34   TParamSetP m_rParamSet;
35   TParamSetP m_gParamSet;
36   TParamSetP m_bParamSet;
37   TParamSetP m_aParamSet;
38 
39   TBoolParamP m_isLinear;
40 
41   enum ToneChannel { RGBA = 0, RGB, Red, Green, Blue, Alpha } m_toneChannel;
42 
43 public:
44   TToneCurveParam();
45   TToneCurveParam(const TToneCurveParam &src);
~TToneCurveParam()46   ~TToneCurveParam() {}
47 
48   TParamSetP getParamSet(ToneChannel channel) const;
49   TParamSetP getCurrentParamSet() const;
getIsLinearParam()50   TBoolParamP getIsLinearParam() const { return m_isLinear; }
51 
52   void setCurrentChannel(ToneChannel channel);
getCurrentChannel()53   ToneChannel getCurrentChannel() const { return m_toneChannel; }
54 
clone()55   TParam *clone() const override { return new TToneCurveParam(*this); }
56   void copy(TParam *src) override;
57 
58   void addObserver(TParamObserver *) override;
59   void removeObserver(TParamObserver *) override;
60 
61   QList<TPointD> getValue(double frame) const;
62   void setValue(double frame, const QList<TPointD> &value,
63                 bool undoing = false);
64   void setDefaultValue(const QList<TPointD> &value);
65 
66   bool isLinear() const;
67   void setIsLinear(bool isLinear);
68 
69   void addValue(double frame, const QList<TPointD> &value, int index);
70   void removeValue(double frame, int index);
71 
72   //  virtual void enableNotification(bool on) {}
73   //  virtual bool isNotificationEnabled() const { return true;}
74 
75   std::string getValueAlias(double frame, int precision) override;
76 
isAnimatable()77   bool isAnimatable() const override { return true; };
78   bool isKeyframe(double frame) const override;
79   void deleteKeyframe(double frame) override;
80   void clearKeyframes() override;
81   void assignKeyframe(double frame, const TSmartPointerT<TParam> &src,
82                       double srcFrame, bool changedOnly = false) override;
83 
84   void getKeyframes(std::set<double> &frames) const override;
85   bool hasKeyframes() const override;
86   int getNextKeyframe(double frame) const override;
87   int getPrevKeyframe(double frame) const override;
88   double keyframeIndexToFrame(int index) const override;
89 
90   void loadData(TIStream &is) override;
91   void saveData(TOStream &os) override;
92 };
93 
94 #ifdef _WIN32
95 template class DVAPI TSmartPointerT<TToneCurveParam>;
96 template class DVAPI TDerivedSmartPointerT<TToneCurveParam, TParam>;
97 #endif
98 
99 class DVAPI TToneCurveParamP final
100     : public TDerivedSmartPointerT<TToneCurveParam, TParam> {
101 public:
TToneCurveParamP()102   TToneCurveParamP() {}
TToneCurveParamP(TToneCurveParam * p)103   TToneCurveParamP(TToneCurveParam *p)
104       : TDerivedSmartPointerT<TToneCurveParam, TParam>(p) {}
TToneCurveParamP(const TParamP & p)105   TToneCurveParamP(const TParamP &p)
106       : TDerivedSmartPointerT<TToneCurveParam, TParam>(p) {}
TParamP()107   operator TParamP() const { return TParamP(m_pointer); }
108 };
109 
110 #endif
111