| #pragma once |
| |
| #ifndef FULLCOLORBRUSHTOOL_H |
| #define FULLCOLORBRUSHTOOL_H |
| |
| #include <ctime> |
| |
| #include <tools/inputmanager.h> |
| #include <tools/modifiers/modifiertest.h> |
| #include <tools/modifiers/modifiertangents.h> |
| #include <tools/modifiers/modifiersegmentation.h> |
| |
| #include "toonzrasterbrushtool.h" |
| #include "mypainttoonzbrush.h" |
| #include "toonz/mypaintbrushstyle.h" |
| #include <QElapsedTimer> |
| |
| |
| |
| |
| |
| class TTileSetFullColor; |
| class TTileSaverFullColor; |
| class MyPaintToonzBrush; |
| class FullColorBrushToolNotifier; |
| namespace mypaint { |
| class Brush; |
| } |
| |
| |
| |
| |
| |
| |
| |
| class FullColorBrushTool final : public TTool, public RasterController, public TInputHandler { |
| Q_DECLARE_TR_FUNCTIONS(FullColorBrushTool) |
| |
| void updateCurrentStyle(); |
| double restartBrushTimer(); |
| void applyClassicToonzBrushSettings(mypaint::Brush &mypaintBrush); |
| void applyToonzBrushSettings(mypaint::Brush &mypaintBrush); |
| |
| public: |
| FullColorBrushTool(std::string name); |
| |
| ToolType getToolType() const override { return TTool::LevelWriteTool; } |
| |
| ToolOptionsBox *createOptionsBox() override; |
| |
| void updateTranslation() override; |
| |
| void onActivate() override; |
| void onDeactivate() override; |
| |
| bool askRead(const TRect &rect) override; |
| bool askWrite(const TRect &rect) override; |
| |
| bool preLeftButtonDown() override; |
| void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override; |
| void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override; |
| void leftButtonUp(const TPointD &pos, const TMouseEvent &e) override; |
| void mouseMove(const TPointD &pos, const TMouseEvent &e) override; |
| |
| void inputLeftButtonDown(const TTrackPoint &point, const TTrack &track) override; |
| void inputLeftButtonDrag(const TTrackPoint &point, const TTrack &track) override; |
| void inputLeftButtonUp(const TTrackPoint &point, const TTrack &track) override; |
| void inputMouseMove(const TPointD &position, const TInputState &state) override; |
| void inputInvalidateRect(const TRectD &bounds) override; |
| |
| void draw() override; |
| |
| void onEnter() override; |
| void onLeave() override; |
| |
| int getCursorId() const override { return ToolCursor::PenCursor; } |
| |
| TPropertyGroup *getProperties(int targetType) override; |
| bool onPropertyChanged(std::string propertyName) override; |
| |
| void onImageChanged() override; |
| void setWorkAndBackupImages(); |
| void updateWorkAndBackupRasters(const TRect &rect); |
| |
| void initPresets(); |
| void loadPreset(); |
| void addPreset(QString name); |
| void removePreset(); |
| |
| void loadLastBrush(); |
| |
| void onCanvasSizeChanged(); |
| void onColorStyleChanged(); |
| |
| TMyPaintBrushStyle *getBrushStyle(); |
| |
| private: |
| enum MouseEventType { ME_DOWN, ME_DRAG, ME_UP, ME_MOVE }; |
| void handleMouseEvent(MouseEventType type, const TPointD &pos, const TMouseEvent &e); |
| |
| protected: |
| TInputManager m_inputmanager; |
| TSmartPointerT<TModifierTest> m_modifierTest; |
| TSmartPointerT<TModifierTangents> m_modifierTangents; |
| TSmartPointerT<TModifierSegmentation> m_modifierSegmentation; |
| |
| TPropertyGroup m_prop; |
| |
| TIntPairProperty m_thickness; |
| TBoolProperty m_pressure; |
| TDoublePairProperty m_opacity; |
| TDoubleProperty m_hardness; |
| TDoubleProperty m_modifierSize; |
| TDoubleProperty m_modifierOpacity; |
| TBoolProperty m_modifierEraser; |
| TBoolProperty m_modifierLockAlpha; |
| TEnumProperty m_preset; |
| |
| TPixel32 m_currentColor; |
| bool m_enabledPressure; |
| int m_minCursorThick, m_maxCursorThick; |
| |
| TPointD m_mousePos, |
| m_brushPos; |
| |
| TRasterP m_backUpRas; |
| TRaster32P m_workRaster; |
| |
| TRect m_strokeRect, m_strokeSegmentRect, m_lastRect; |
| |
| MyPaintToonzBrush *m_toonz_brush; |
| QElapsedTimer m_brushTimer; |
| |
| TTileSetFullColor *m_tileSet; |
| TTileSaverFullColor *m_tileSaver; |
| |
| BrushPresetManager |
| m_presetsManager; |
| FullColorBrushToolNotifier *m_notifier; |
| |
| bool m_presetsLoaded; |
| bool m_firstTime; |
| bool m_mousePressed = false; |
| |
| bool m_isStraight = false; |
| TPointD m_firstPoint; |
| TPointD m_lastPoint; |
| double m_maxPressure = -1.0; |
| |
| bool m_propertyUpdating = false; |
| }; |
| |
| |
| |
| class FullColorBrushToolNotifier final : public QObject { |
| Q_OBJECT |
| |
| FullColorBrushTool *m_tool; |
| |
| public: |
| FullColorBrushToolNotifier(FullColorBrushTool *tool); |
| |
| protected slots: |
| void onCanvasSizeChanged() { m_tool->onCanvasSizeChanged(); } |
| void onColorStyleChanged() { m_tool->onColorStyleChanged(); } |
| }; |
| |
| #endif |