shun-iwasawa 77b7d0
#pragma once
shun-iwasawa 77b7d0
//=============================================================================
shun-iwasawa 77b7d0
// SeparateColorsPopup
shun-iwasawa 77b7d0
//-----------------------------------------------------------------------------
shun-iwasawa 77b7d0
#ifndef SEPARATECOLORSPOPUP_H
shun-iwasawa 77b7d0
#define SEPARATECOLORSPOPUP_H
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
#include "tfilepath.h"
shun-iwasawa 77b7d0
#include "tpixel.h"
shun-iwasawa 77b7d0
#include "traster.h"
shun-iwasawa 77b7d0
#include "toonzqt/dvdialog.h"
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
#include <qvector></qvector>
shun-iwasawa 77b7d0
#include <qpair></qpair>
shun-iwasawa 77b7d0
#include <qrunnable></qrunnable>
shun-iwasawa 77b7d0
#include <qvector3d></qvector3d>
shun-iwasawa 77b7d0
#include <qvector4d></qvector4d>
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
class QLabel;
shun-iwasawa 77b7d0
class QCheckBox;
shun-iwasawa 77b7d0
class QGroupBox;
shun-iwasawa 77b7d0
class QComboBox;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
class SeparateSwatch;
shun-iwasawa 77b7d0
namespace DVGui {
shun-iwasawa 77b7d0
class IntLineEdit;
shun-iwasawa 77b7d0
class FileField;
shun-iwasawa 77b7d0
class LineEdit;
shun-iwasawa 77b7d0
class ColorField;
shun-iwasawa 77b7d0
class ProgressDialog;
shun-iwasawa 77b7d0
class CheckBox;
shun-iwasawa 77b7d0
class DoubleField;
shun-iwasawa 77b7d0
class IntField;
shun-iwasawa 670fac
}  // namespace DVGui
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
namespace ImageUtils {
shun-iwasawa 77b7d0
class FrameTaskNotifier;
shun-iwasawa 77b7d0
}
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
using namespace DVGui;
shun-iwasawa 77b7d0
using namespace ImageUtils;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
//----------------------------------
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
class Separate4ColorsTask : public QRunnable {
shun-iwasawa 77b7d0
  int m_from, m_to;
shun-iwasawa 77b7d0
  QVector3D* m_src;
shun-iwasawa 77b7d0
  QVector4D* m_out;
shun-iwasawa 77b7d0
  const QVector3D m_paper_xyz, m_main_xyz, m_sub1_xyz, m_sub2_xyz, m_sub3_xyz;
shun-iwasawa 77b7d0
  const QVector4D m_pane_m12, m_pane_m13, m_pane_m23, m_pane_123;
shun-iwasawa 77b7d0
  const QVector3D m_R;
shun-iwasawa 77b7d0
  const float m_mainAdjust;
shun-iwasawa 77b7d0
  const float m_borderRatio;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  void run();
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
public:
shun-iwasawa 77b7d0
  Separate4ColorsTask(int from, int to, QVector3D* src, QVector4D* out,
shun-iwasawa 77b7d0
                      const QVector3D paper_xyz, const QVector3D main_xyz,
shun-iwasawa 77b7d0
                      const QVector3D sub1_xyz, const QVector3D sub2_xyz,
shun-iwasawa 77b7d0
                      const QVector3D sub3_xyz, const QVector4D pane_m12,
shun-iwasawa 77b7d0
                      const QVector4D pane_m13, const QVector4D pane_m23,
shun-iwasawa 77b7d0
                      const QVector4D pane_123, const QVector3D R,
shun-iwasawa 77b7d0
                      const float mainAdjust, const float borderRatio)
shun-iwasawa 77b7d0
      : m_from(from)
shun-iwasawa 77b7d0
      , m_to(to)
shun-iwasawa 77b7d0
      , m_src(src)
shun-iwasawa 77b7d0
      , m_out(out)
shun-iwasawa 77b7d0
      , m_paper_xyz(paper_xyz)
shun-iwasawa 77b7d0
      , m_main_xyz(main_xyz)
shun-iwasawa 77b7d0
      , m_sub1_xyz(sub1_xyz)
shun-iwasawa 77b7d0
      , m_sub2_xyz(sub2_xyz)
shun-iwasawa 77b7d0
      , m_sub3_xyz(sub3_xyz)
shun-iwasawa 77b7d0
      , m_pane_m12(pane_m12)
shun-iwasawa 77b7d0
      , m_pane_m13(pane_m13)
shun-iwasawa 77b7d0
      , m_pane_m23(pane_m23)
shun-iwasawa 77b7d0
      , m_pane_123(pane_123)
shun-iwasawa 77b7d0
      , m_R(R)
shun-iwasawa 77b7d0
      , m_mainAdjust(mainAdjust)
shun-iwasawa 77b7d0
      , m_borderRatio(borderRatio) {}
shun-iwasawa 77b7d0
};
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
//----------------------------------
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
class Separate3ColorsTask : public QRunnable {
shun-iwasawa 77b7d0
  int m_from, m_to;
shun-iwasawa 77b7d0
  QVector3D *m_src, *m_out;
shun-iwasawa 77b7d0
  const QVector3D m_paper_xyz, m_main_xyz, m_sub1_xyz, m_sub2_xyz;
shun-iwasawa 77b7d0
  const QVector4D m_pane;
shun-iwasawa 77b7d0
  const float m_mainAdjust;
shun-iwasawa 77b7d0
  const float m_borderRatio;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  void run();
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
public:
shun-iwasawa 77b7d0
  Separate3ColorsTask(int from, int to, QVector3D* src, QVector3D* out,
shun-iwasawa 77b7d0
                      const QVector3D paper_xyz, const QVector3D main_xyz,
shun-iwasawa 77b7d0
                      const QVector3D sub1_xyz, const QVector3D sub2_xyz,
shun-iwasawa 77b7d0
                      const QVector4D pane, const float mainAdjust,
shun-iwasawa 77b7d0
                      const float borderRatio)
shun-iwasawa 77b7d0
      : m_from(from)
shun-iwasawa 77b7d0
      , m_to(to)
shun-iwasawa 77b7d0
      , m_src(src)
shun-iwasawa 77b7d0
      , m_out(out)
shun-iwasawa 77b7d0
      , m_paper_xyz(paper_xyz)
shun-iwasawa 77b7d0
      , m_main_xyz(main_xyz)
shun-iwasawa 77b7d0
      , m_sub1_xyz(sub1_xyz)
shun-iwasawa 77b7d0
      , m_sub2_xyz(sub2_xyz)
shun-iwasawa 77b7d0
      , m_pane(pane)
shun-iwasawa 77b7d0
      , m_mainAdjust(mainAdjust)
shun-iwasawa 77b7d0
      , m_borderRatio(borderRatio) {}
shun-iwasawa 77b7d0
};
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
//----------------------------------
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
class SeparateColorsPopup : public DVGui::Dialog {
shun-iwasawa 77b7d0
  Q_OBJECT
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  FrameTaskNotifier* m_notifier;
shun-iwasawa 77b7d0
  QPushButton *m_previewBtn, *m_okBtn, *m_cancelBtn, *m_autoBtn;
shun-iwasawa 77b7d0
  IntLineEdit *m_fromFld, *m_toFld;
shun-iwasawa 77b7d0
  FileField* m_saveInFileFld;
shun-iwasawa 77b7d0
  QComboBox* m_fileFormatCombo;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  DoubleField *m_subColorAdjustFld, *m_borderSmoothnessFld;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  QGroupBox* m_matteGroupBox;
shun-iwasawa 77b7d0
  DoubleField* m_matteThreshold;
shun-iwasawa 77b7d0
  IntField* m_matteRadius;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  ColorField *m_paperColorField, *m_mainColorField, *m_subColor1Field,
shun-iwasawa 77b7d0
      *m_subColor2Field, *m_subColor3Field;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  QCheckBox *m_outMainCB, *m_outSub1CB, *m_outSub2CB, *m_outSub3CB;
shun-iwasawa 77b7d0
  LineEdit *m_mainSuffixEdit, *m_sub1SuffixEdit, *m_sub2SuffixEdit,
shun-iwasawa 77b7d0
      *m_sub3SuffixEdit;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  IntField* m_previewFrameField;
shun-iwasawa 77b7d0
  QLabel* m_previewFrameLabel;
shun-iwasawa 77b7d0
  QVector<qpair<tfilepath, tframeid="">> m_srcFrames;</qpair<tfilepath,>
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  QPushButton *m_pickBtn, *m_showMatteBtn, *m_showAlphaBtn;
shun-iwasawa 77b7d0
  SeparateSwatch* m_separateSwatch;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  ProgressDialog* m_progressDialog;
shun-iwasawa 77b7d0
  std::vector<tfilepath> m_srcFilePaths;</tfilepath>
shun-iwasawa 670fac
shun-iwasawa 670fac
  QString m_lastAcceptedSaveInPath;
shun-iwasawa 670fac
shun-iwasawa 77b7d0
  bool m_isConverting;
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  void doSeparate(const TFilePath& source, int from, int to, int framerate,
shun-iwasawa 77b7d0
                  FrameTaskNotifier* frameNotifier, bool do4Colors);
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  void doCompute(TRaster32P raster, TDimensionI& dim, TRaster32P ras_m,
shun-iwasawa 77b7d0
                 TRaster32P ras_c1, TRaster32P ras_c2, bool isPreview = false);
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  void doCompute(TRaster32P raster, TDimensionI& dim, TRaster32P ras_m,
shun-iwasawa 77b7d0
                 TRaster32P ras_c1, TRaster32P ras_c2, TRaster32P ras_c3,
shun-iwasawa 77b7d0
                 bool isPreview = false);
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  void doPreview(TRaster32P& orgRas, TRaster32P& mainRas, TRaster32P& sub1Ras,
shun-iwasawa 77b7d0
                 TRaster32P& sub2Ras, TRaster32P& sub3Ras);
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
public:
shun-iwasawa 77b7d0
  SeparateColorsPopup();
shun-iwasawa 77b7d0
  ~SeparateColorsPopup();
shun-iwasawa 77b7d0
  void setFiles(const std::vector<tfilepath>& fps);</tfilepath>
shun-iwasawa 77b7d0
  bool isConverting();
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
protected:
shun-iwasawa 77b7d0
  void showEvent(QShowEvent* e);
shun-iwasawa 77b7d0
  // store the current value to user env file
shun-iwasawa 77b7d0
  void hideEvent(QHideEvent* e);
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
public slots:
luz paz 6454c4
  // starts the conversion
shun-iwasawa 77b7d0
  void separate();
shun-iwasawa 77b7d0
  void onSeparateFinished();
shun-iwasawa 77b7d0
  void onPreviewBtnPressed();
shun-iwasawa 77b7d0
  void onPreviewFrameFieldValueChanged(bool isDragging);
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
  void onChange(bool isDragging);
shun-iwasawa 77b7d0
  void onToggle() { onChange(false); }
shun-iwasawa 77b7d0
  void onColorChange(const TPixel32&, bool isDragging) { onChange(isDragging); }
shun-iwasawa 670fac
shun-iwasawa 670fac
  void onSaveSettings();
shun-iwasawa 670fac
  void onLoadSettings();
shun-iwasawa 670fac
shun-iwasawa 670fac
  void doSaveSettings(const TFilePath&);
shun-iwasawa 670fac
  void doLoadSettings(const TFilePath&, bool loadAll);
shun-iwasawa 670fac
shun-iwasawa 670fac
  void onSaveInPathChanged();
shun-iwasawa 77b7d0
};
shun-iwasawa 77b7d0
shun-iwasawa 77b7d0
#endif