Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef FULLCOLORBRUSHTOOL_H
Toshihiro Shimizu 890ddd
#define FULLCOLORBRUSHTOOL_H
Toshihiro Shimizu 890ddd
bf1d82
#include <ctime></ctime>
bf1d82
d8eddc
#include <tools inputmanager.h=""></tools>
shun-iwasawa ec85ad
#ifndef NDEBUG
d8eddc
#include <tools modifiers="" modifiertest.h=""></tools>
shun-iwasawa ec85ad
#endif
7a5892
#include <tools modifierline.h="" modifiers=""></tools>
d8eddc
#include <tools modifiers="" modifiertangents.h=""></tools>
362052
#include <tools modifierassistants.h="" modifiers=""></tools>
d8eddc
#include <tools modifiers="" modifiersegmentation.h=""></tools>
d8eddc
shun-iwasawa 98926d
#include "toonzrasterbrushtool.h"
bf1d82
#include "mypainttoonzbrush.h"
bf1d82
#include "toonz/mypaintbrushstyle.h"
bf1d82
#include <qelapsedtimer></qelapsedtimer>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//==============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//  Forward declarations
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TTileSetFullColor;
Toshihiro Shimizu 890ddd
class TTileSaverFullColor;
bf1d82
class MyPaintToonzBrush;
Toshihiro Shimizu 890ddd
class FullColorBrushToolNotifier;
shun-iwasawa 98926d
namespace mypaint {
shun-iwasawa 98926d
class Brush;
shun-iwasawa 98926d
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//==============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//************************************************************************
Toshihiro Shimizu 890ddd
//    FullColor Brush Tool declaration
Toshihiro Shimizu 890ddd
//************************************************************************
Toshihiro Shimizu 890ddd
shun-iwasawa ec85ad
class FullColorBrushTool final : public TTool,
shun-iwasawa ec85ad
                                 public RasterController,
shun-iwasawa ec85ad
                                 public TInputHandler {
Shinya Kitaoka 120a6e
  Q_DECLARE_TR_FUNCTIONS(FullColorBrushTool)
7a5892
public:
fa009d
  class TrackHandler : public TTrackHandler {
7a5892
  public:
7a5892
    MyPaintToonzBrush brush;
7a5892
shun-iwasawa ec85ad
    TrackHandler(const TRaster32P &ras, RasterController &controller,
shun-iwasawa ec85ad
                 const mypaint::Brush &brush)
shun-iwasawa ec85ad
        : brush(ras, controller, brush) {}
7a5892
  };
Toshihiro Shimizu 890ddd
7a5892
private:
bf1d82
  void updateCurrentStyle();
bf1d82
  void applyClassicToonzBrushSettings(mypaint::Brush &mypaintBrush);
bf1d82
  void applyToonzBrushSettings(mypaint::Brush &mypaintBrush);
shun_iwasawa e3df22
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  FullColorBrushTool(std::string name);
Toshihiro Shimizu 890ddd
fa009d
  ToolType getToolType() const override
fa009d
    { return TTool::LevelWriteTool; }
da847a
  unsigned int getToolHints() const override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  ToolOptionsBox *createOptionsBox() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void updateTranslation() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void onActivate() override;
Shinya Kitaoka 473e70
  void onDeactivate() override;
Toshihiro Shimizu 890ddd
bf1d82
  bool askRead(const TRect &rect) override;
bf1d82
  bool askWrite(const TRect &rect) override;
bf1d82
Shinya Kitaoka 473e70
  bool preLeftButtonDown() override;
Shinya Kitaoka 473e70
  void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void leftButtonUp(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void mouseMove(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
shun-iwasawa ec85ad
  void inputMouseMove(const TPointD &position,
shun-iwasawa ec85ad
                      const TInputState &state) override;
7a5892
  void inputSetBusy(bool busy) override;
shun-iwasawa ec85ad
  void inputPaintTrackPoint(const TTrackPoint &point, const TTrack &track,
f278a5
                            bool firstTrack, bool preview) override;
00337d
  void inputInvalidateRect(const TRectD &bounds) override;
shun-iwasawa ec85ad
  TTool *inputGetTool() override { return this; };
d8eddc
Shinya Kitaoka 473e70
  void draw() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void onEnter() override;
Shinya Kitaoka 473e70
  void onLeave() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  int getCursorId() const override { return ToolCursor::PenCursor; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  TPropertyGroup *getProperties(int targetType) override;
Shinya Kitaoka 473e70
  bool onPropertyChanged(std::string propertyName) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void onImageChanged() override;
Shinya Kitaoka 120a6e
  void setWorkAndBackupImages();
Shinya Kitaoka 120a6e
  void updateWorkAndBackupRasters(const TRect &rect);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void initPresets();
Shinya Kitaoka 120a6e
  void loadPreset();
Shinya Kitaoka 120a6e
  void addPreset(QString name);
Shinya Kitaoka 120a6e
  void removePreset();
Toshihiro Shimizu 890ddd
manongjohn df5842
  void loadLastBrush();
manongjohn df5842
Shinya Kitaoka 120a6e
  void onCanvasSizeChanged();
bf1d82
  void onColorStyleChanged();
bf1d82
shun-iwasawa 98926d
  TMyPaintBrushStyle *getBrushStyle();
Toshihiro Shimizu 890ddd
d8eddc
private:
da847a
  void updateModifiers();
da847a
  
d8eddc
  enum MouseEventType { ME_DOWN, ME_DRAG, ME_UP, ME_MOVE };
shun-iwasawa ec85ad
  void handleMouseEvent(MouseEventType type, const TPointD &pos,
shun-iwasawa ec85ad
                        const TMouseEvent &e);
shun-iwasawa ec85ad
Toshihiro Shimizu 890ddd
protected:
d8eddc
  TInputManager m_inputmanager;
shun-iwasawa ec85ad
#ifndef NDEBUG
d8eddc
  TSmartPointerT<tmodifiertest> m_modifierTest;</tmodifiertest>
shun-iwasawa ec85ad
#endif
7a5892
  TSmartPointerT<tmodifierline> m_modifierLine;</tmodifierline>
d8eddc
  TSmartPointerT<tmodifiertangents> m_modifierTangents;</tmodifiertangents>
362052
  TSmartPointerT<tmodifierassistants> m_modifierAssistants;</tmodifierassistants>
d8eddc
  TSmartPointerT<tmodifiersegmentation> m_modifierSegmentation;</tmodifiersegmentation>
da847a
  TInputModifier::List m_modifierReplicate;
shun-iwasawa ec85ad
Shinya Kitaoka 120a6e
  TPropertyGroup m_prop;
Toshihiro Shimizu 890ddd
shun-iwasawa ec85ad
  TIntPairProperty m_thickness;
shun-iwasawa ec85ad
  TBoolProperty m_pressure;
Shinya Kitaoka 120a6e
  TDoublePairProperty m_opacity;
shun-iwasawa ec85ad
  TDoubleProperty m_hardness;
shun-iwasawa ec85ad
  TDoubleProperty m_modifierSize;
shun-iwasawa ec85ad
  TDoubleProperty m_modifierOpacity;
shun-iwasawa ec85ad
  TBoolProperty m_modifierEraser;
shun-iwasawa ec85ad
  TBoolProperty m_modifierLockAlpha;
shun-iwasawa ec85ad
  TBoolProperty m_assistants;
shun-iwasawa ec85ad
  TEnumProperty m_preset;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPixel32 m_currentColor;
bf1d82
  bool m_enabledPressure;
bf1d82
  int m_minCursorThick, m_maxCursorThick;
Toshihiro Shimizu 890ddd
bf1d82
  TPointD m_mousePos,  //!< Current mouse position, in world coordinates.
shun-iwasawa 98926d
      m_brushPos;      //!< World position the brush will be painted at.
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TRasterP m_backUpRas;
Shinya Kitaoka 120a6e
  TRaster32P m_workRaster;
Toshihiro Shimizu 890ddd
bf1d82
  TRect m_strokeRect, m_strokeSegmentRect, m_lastRect;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TTileSetFullColor *m_tileSet;
Shinya Kitaoka 120a6e
  TTileSaverFullColor *m_tileSaver;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  BrushPresetManager
Shinya Kitaoka 120a6e
      m_presetsManager;  //!< Manager for presets of this tool instance
Shinya Kitaoka 120a6e
  FullColorBrushToolNotifier *m_notifier;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool m_presetsLoaded;
Shinya Kitaoka 120a6e
  bool m_firstTime;
manongjohn 5a2268
7a5892
  bool m_started;
justburner e250b7
manongjohn 5a2268
  bool m_propertyUpdating = false;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class FullColorBrushToolNotifier final : public QObject {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  FullColorBrushTool *m_tool;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  FullColorBrushToolNotifier(FullColorBrushTool *tool);
shun-iwasawa ec85ad
  void onActivate();
shun-iwasawa ec85ad
  void onDeactivate();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected slots:
Shinya Kitaoka 120a6e
  void onCanvasSizeChanged() { m_tool->onCanvasSizeChanged(); }
bf1d82
  void onColorStyleChanged() { m_tool->onColorStyleChanged(); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
#endif  // FULLCOLORBRUSHTOOL_H