82 lines
No EOL
1.8 KiB
C++
82 lines
No EOL
1.8 KiB
C++
#pragma once
|
|
|
|
#include "tools/tool.h"
|
|
|
|
class ShiftTraceTool final : public TTool {
|
|
public:
|
|
enum CurveStatus {
|
|
NoCurve,
|
|
TwoPointsCurve, // just during the first click&drag
|
|
ThreePointsCurve
|
|
};
|
|
|
|
enum GadgetId {
|
|
NoGadget,
|
|
NoGadget_InBox,
|
|
CurveP0Gadget,
|
|
CurveP1Gadget,
|
|
CurvePmGadget,
|
|
MoveCenterGadget,
|
|
RotateGadget,
|
|
TranslateGadget,
|
|
ScaleGadget
|
|
};
|
|
inline bool isCurveGadget(GadgetId id) const {
|
|
return CurveP0Gadget <= id && id <= CurvePmGadget;
|
|
}
|
|
|
|
private:
|
|
TPointD m_oldPos, m_startPos;
|
|
int m_ghostIndex;
|
|
TPointD m_p0, m_p1, m_p2;
|
|
|
|
CurveStatus m_curveStatus;
|
|
GadgetId m_gadget;
|
|
GadgetId m_highlightedGadget;
|
|
|
|
TRectD m_box;
|
|
TAffine m_dpiAff;
|
|
int m_row[2];
|
|
TAffine m_aff[2];
|
|
TPointD m_center[2];
|
|
|
|
TAffine m_oldAff;
|
|
|
|
public:
|
|
ShiftTraceTool();
|
|
|
|
ToolType getToolType() const override { return GenericTool; }
|
|
|
|
void clearData();
|
|
void updateData();
|
|
void updateBox();
|
|
void updateCurveAffs();
|
|
void updateGhost();
|
|
|
|
void reset() override;
|
|
|
|
void mouseMove(const TPointD &, const TMouseEvent &e) override;
|
|
void leftButtonDown(const TPointD &, const TMouseEvent &) override;
|
|
void leftButtonDrag(const TPointD &, const TMouseEvent &) override;
|
|
void leftButtonUp(const TPointD &, const TMouseEvent &) override;
|
|
void draw() override;
|
|
|
|
TAffine getGhostAff();
|
|
GadgetId getGadget(const TPointD &);
|
|
void drawDot(const TPointD ¢er, double r,
|
|
const TPixel32 &color = TPixel32::White);
|
|
void drawControlRect();
|
|
void drawCurve();
|
|
|
|
void onActivate() override;
|
|
void onDeactivate() override;
|
|
|
|
void onLeave() override;
|
|
|
|
bool isEventAcceptable(QEvent *e) override;
|
|
|
|
int getCursorId() const override;
|
|
|
|
int getCurrentGhostIndex() { return m_ghostIndex; }
|
|
void setCurrentGhostIndex(int index);
|
|
}; |