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