Shinya Kitaoka 810553
#pragma once
Shinya Kitaoka 810553
Toshihiro Shimizu 890ddd
#ifndef RGBPICKERTOOL_H
Toshihiro Shimizu 890ddd
#define RGBPICKERTOOL_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tools/tool.h"
Toshihiro Shimizu 890ddd
#include "tproperty.h"
Toshihiro Shimizu 890ddd
#include "toonz/strokegenerator.h"
Toshihiro Shimizu 890ddd
#include "tools/tooloptions.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <qcoreapplication></qcoreapplication>
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class RGBPickerTool final : public TTool {
Shinya Kitaoka 120a6e
  Q_DECLARE_TR_FUNCTIONS(RGBPickerTool)
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool m_firstTime;
Shinya Kitaoka 120a6e
  int m_currentStyleId;
Shinya Kitaoka 120a6e
  TPixel32 m_oldValue, m_currentValue;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TRectD m_selectingRect;
Shinya Kitaoka 120a6e
  TRectD m_drawingRect;
Shinya Kitaoka 120a6e
  TPropertyGroup m_prop;
Shinya Kitaoka 120a6e
  TEnumProperty m_pickType;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TBoolProperty m_passivePick;
Shinya Kitaoka 120a6e
  std::vector<rgbpickertooloptionsbox *=""> m_toolOptionsBox;</rgbpickertooloptionsbox>
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // Aggiunte per disegnare il lazzo a la polyline
Shinya Kitaoka 120a6e
  StrokeGenerator m_drawingTrack;
Shinya Kitaoka 120a6e
  StrokeGenerator m_workingTrack;
Shinya Kitaoka 120a6e
  TPointD m_firstDrawingPos, m_firstWorkingPos;
Shinya Kitaoka 120a6e
  TPointD m_mousePosition;
Shinya Kitaoka 120a6e
  double m_thick;
Shinya Kitaoka 120a6e
  TStroke *m_stroke;
Shinya Kitaoka 120a6e
  TStroke *m_firstStroke;
Shinya Kitaoka 120a6e
  std::vector<tpointd> m_drawingPolyline;</tpointd>
Shinya Kitaoka 120a6e
  std::vector<tpointd> m_workingPolyline;</tpointd>
Shinya Kitaoka 120a6e
  bool m_makePick;
Toshihiro Shimizu 890ddd
shun_iwasawa ca7879
  TPoint m_mousePixelPosition;
shun_iwasawa ca7879
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  RGBPickerTool();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  /*-- ToolOptionBox上にPassiveに拾った色を表示するため --*/
Shinya Kitaoka 120a6e
  void setToolOptionsBox(RGBPickerToolOptionsBox *toolOptionsBox);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  ToolType getToolType() const override { return TTool::LevelReadTool; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void updateTranslation() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // Used to notify and set the currentColor outside the draw() methods:
Shinya Kitaoka 120a6e
  // using special style there was a conflict between the draw() methods of the
Shinya Kitaoka 120a6e
  // tool
Shinya Kitaoka 120a6e
  // and the genaration of the icon inside the style editor (makeIcon()) which
Shinya Kitaoka 120a6e
  // use
Shinya Kitaoka 120a6e
  // another glContext
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void onImageChanged() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void draw() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonUp(const TPointD &pos, const TMouseEvent &) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDoubleClick(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void mouseMove(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
shun_iwasawa ca7879
  void pick();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void pickRect();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void pickStroke();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  bool onPropertyChanged(std::string propertyName) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void onActivate() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  TPropertyGroup *getProperties(int targetType) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  int getCursorId() const override;
Toshihiro Shimizu 890ddd
shun_iwasawa ca7879
  void doPolylineFreehandPick();
shun_iwasawa ca7879
shun_iwasawa ca7879
  void passivePick();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Viene aggiunto \b pos a \b m_track e disegnato il primo pezzetto del
Shinya Kitaoka 120a6e
  //! lazzo. Viene inizializzato \b m_firstPos
Shinya Kitaoka 120a6e
  void startFreehand(const TPointD &drawingPos, const TPointD &workingPos);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Viene aggiunto \b pos a \b m_track e disegnato un altro pezzetto del
Shinya Kitaoka 120a6e
  //! lazzo.
Shinya Kitaoka 120a6e
  void freehandDrag(const TPointD &drawingPos, const TPointD &workingPos);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Viene chiuso il lazzo (si aggiunge l'ultimo punto ad m_track) e viene
Shinya Kitaoka 120a6e
  //! creato lo stroke rappresentante il lazzo.
Shinya Kitaoka 120a6e
  void closeFreehand();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Viene aggiunto un punto al vettore m_polyline.
Shinya Kitaoka 120a6e
  void addPointPolyline(const TPointD &drawingPos, const TPointD &workingPos);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Agginge l'ultimo pos a \b m_polyline e chiude la spezzata (aggiunge \b
Shinya Kitaoka 120a6e
  //! m_polyline.front() alla fine del vettore)
Shinya Kitaoka 120a6e
  void closePolyline(const TPointD &drawingPos, const TPointD &workingPos);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  /*--- RGBPickerToolをFlipbookで有効にする ---*/
Shinya Kitaoka 120a6e
  void showFlipPickedColor(const TPixel32 &pix);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif