1 #pragma once 2 //============================================================================= 3 // SeparateColorsPopup 4 //----------------------------------------------------------------------------- 5 #ifndef SEPARATECOLORSPOPUP_H 6 #define SEPARATECOLORSPOPUP_H 7 8 #include "tfilepath.h" 9 #include "tpixel.h" 10 #include "traster.h" 11 #include "toonzqt/dvdialog.h" 12 13 #include <QVector> 14 #include <QPair> 15 #include <QRunnable> 16 #include <QVector3D> 17 #include <QVector4D> 18 19 class QLabel; 20 class QCheckBox; 21 class QGroupBox; 22 class QComboBox; 23 24 class SeparateSwatch; 25 namespace DVGui { 26 class IntLineEdit; 27 class FileField; 28 class LineEdit; 29 class ColorField; 30 class ProgressDialog; 31 class CheckBox; 32 class DoubleField; 33 class IntField; 34 } // namespace DVGui 35 36 namespace ImageUtils { 37 class FrameTaskNotifier; 38 } 39 40 using namespace DVGui; 41 using namespace ImageUtils; 42 43 //---------------------------------- 44 45 class Separate4ColorsTask : public QRunnable { 46 int m_from, m_to; 47 QVector3D* m_src; 48 QVector4D* m_out; 49 const QVector3D m_paper_xyz, m_main_xyz, m_sub1_xyz, m_sub2_xyz, m_sub3_xyz; 50 const QVector4D m_pane_m12, m_pane_m13, m_pane_m23, m_pane_123; 51 const QVector3D m_R; 52 const float m_mainAdjust; 53 const float m_borderRatio; 54 55 void run(); 56 57 public: Separate4ColorsTask(int from,int to,QVector3D * src,QVector4D * out,const QVector3D paper_xyz,const QVector3D main_xyz,const QVector3D sub1_xyz,const QVector3D sub2_xyz,const QVector3D sub3_xyz,const QVector4D pane_m12,const QVector4D pane_m13,const QVector4D pane_m23,const QVector4D pane_123,const QVector3D R,const float mainAdjust,const float borderRatio)58 Separate4ColorsTask(int from, int to, QVector3D* src, QVector4D* out, 59 const QVector3D paper_xyz, const QVector3D main_xyz, 60 const QVector3D sub1_xyz, const QVector3D sub2_xyz, 61 const QVector3D sub3_xyz, const QVector4D pane_m12, 62 const QVector4D pane_m13, const QVector4D pane_m23, 63 const QVector4D pane_123, const QVector3D R, 64 const float mainAdjust, const float borderRatio) 65 : m_from(from) 66 , m_to(to) 67 , m_src(src) 68 , m_out(out) 69 , m_paper_xyz(paper_xyz) 70 , m_main_xyz(main_xyz) 71 , m_sub1_xyz(sub1_xyz) 72 , m_sub2_xyz(sub2_xyz) 73 , m_sub3_xyz(sub3_xyz) 74 , m_pane_m12(pane_m12) 75 , m_pane_m13(pane_m13) 76 , m_pane_m23(pane_m23) 77 , m_pane_123(pane_123) 78 , m_R(R) 79 , m_mainAdjust(mainAdjust) 80 , m_borderRatio(borderRatio) {} 81 }; 82 83 //---------------------------------- 84 85 class Separate3ColorsTask : public QRunnable { 86 int m_from, m_to; 87 QVector3D *m_src, *m_out; 88 const QVector3D m_paper_xyz, m_main_xyz, m_sub1_xyz, m_sub2_xyz; 89 const QVector4D m_pane; 90 const float m_mainAdjust; 91 const float m_borderRatio; 92 93 void run(); 94 95 public: Separate3ColorsTask(int from,int to,QVector3D * src,QVector3D * out,const QVector3D paper_xyz,const QVector3D main_xyz,const QVector3D sub1_xyz,const QVector3D sub2_xyz,const QVector4D pane,const float mainAdjust,const float borderRatio)96 Separate3ColorsTask(int from, int to, QVector3D* src, QVector3D* out, 97 const QVector3D paper_xyz, const QVector3D main_xyz, 98 const QVector3D sub1_xyz, const QVector3D sub2_xyz, 99 const QVector4D pane, const float mainAdjust, 100 const float borderRatio) 101 : m_from(from) 102 , m_to(to) 103 , m_src(src) 104 , m_out(out) 105 , m_paper_xyz(paper_xyz) 106 , m_main_xyz(main_xyz) 107 , m_sub1_xyz(sub1_xyz) 108 , m_sub2_xyz(sub2_xyz) 109 , m_pane(pane) 110 , m_mainAdjust(mainAdjust) 111 , m_borderRatio(borderRatio) {} 112 }; 113 114 //---------------------------------- 115 116 class SeparateColorsPopup : public DVGui::Dialog { 117 Q_OBJECT 118 119 FrameTaskNotifier* m_notifier; 120 QPushButton *m_previewBtn, *m_okBtn, *m_cancelBtn, *m_autoBtn; 121 IntLineEdit *m_fromFld, *m_toFld; 122 FileField* m_saveInFileFld; 123 QComboBox* m_fileFormatCombo; 124 125 DoubleField *m_subColorAdjustFld, *m_borderSmoothnessFld; 126 127 QGroupBox* m_matteGroupBox; 128 DoubleField* m_matteThreshold; 129 IntField* m_matteRadius; 130 131 ColorField *m_paperColorField, *m_mainColorField, *m_subColor1Field, 132 *m_subColor2Field, *m_subColor3Field; 133 134 QCheckBox *m_outMainCB, *m_outSub1CB, *m_outSub2CB, *m_outSub3CB; 135 LineEdit *m_mainSuffixEdit, *m_sub1SuffixEdit, *m_sub2SuffixEdit, 136 *m_sub3SuffixEdit; 137 138 IntField* m_previewFrameField; 139 QLabel* m_previewFrameLabel; 140 QVector<QPair<TFilePath, TFrameId>> m_srcFrames; 141 142 QPushButton *m_pickBtn, *m_showMatteBtn, *m_showAlphaBtn; 143 SeparateSwatch* m_separateSwatch; 144 145 ProgressDialog* m_progressDialog; 146 std::vector<TFilePath> m_srcFilePaths; 147 148 QString m_lastAcceptedSaveInPath; 149 150 bool m_isConverting; 151 152 void doSeparate(const TFilePath& source, int from, int to, int framerate, 153 FrameTaskNotifier* frameNotifier, bool do4Colors); 154 155 void doCompute(TRaster32P raster, TDimensionI& dim, TRaster32P ras_m, 156 TRaster32P ras_c1, TRaster32P ras_c2, bool isPreview = false); 157 158 void doCompute(TRaster32P raster, TDimensionI& dim, TRaster32P ras_m, 159 TRaster32P ras_c1, TRaster32P ras_c2, TRaster32P ras_c3, 160 bool isPreview = false); 161 162 void doPreview(TRaster32P& orgRas, TRaster32P& mainRas, TRaster32P& sub1Ras, 163 TRaster32P& sub2Ras, TRaster32P& sub3Ras); 164 165 public: 166 SeparateColorsPopup(); 167 ~SeparateColorsPopup(); 168 void setFiles(const std::vector<TFilePath>& fps); 169 bool isConverting(); 170 171 protected: 172 void showEvent(QShowEvent* e); 173 // store the current value to user env file 174 void hideEvent(QHideEvent* e); 175 176 public slots: 177 // starts the convertion 178 void separate(); 179 void onSeparateFinished(); 180 void onPreviewBtnPressed(); 181 void onPreviewFrameFieldValueChanged(bool isDragging); 182 183 void onChange(bool isDragging); onToggle()184 void onToggle() { onChange(false); } onColorChange(const TPixel32 &,bool isDragging)185 void onColorChange(const TPixel32&, bool isDragging) { onChange(isDragging); } 186 187 void onSaveSettings(); 188 void onLoadSettings(); 189 190 void doSaveSettings(const TFilePath&); 191 void doLoadSettings(const TFilePath&, bool loadAll); 192 193 void onSaveInPathChanged(); 194 }; 195 196 #endif