141 lines
4.2 KiB
C++
141 lines
4.2 KiB
C++
#pragma once
|
|
|
|
#ifndef CONTROLPOINTEDITORTOOL_H
|
|
#define CONTROLPOINTEDITORTOOL_H
|
|
|
|
#include "toonzqt/selection.h"
|
|
#include "tool.h"
|
|
#include "tstroke.h"
|
|
#include "tcurves.h"
|
|
#include "tproperty.h"
|
|
#include "controlpointselection.h"
|
|
#include "toonz/strokegenerator.h"
|
|
|
|
// For Qt translation support
|
|
#include <QCoreApplication>
|
|
|
|
class TUndo;
|
|
|
|
//=============================================================================
|
|
// ControlPointEditorTool
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class ControlPointEditorTool final : public TTool {
|
|
Q_DECLARE_TR_FUNCTIONS(ControlPointEditorTool)
|
|
|
|
bool m_draw;
|
|
bool m_isMenuViewed;
|
|
int m_lastPointSelected;
|
|
bool m_isImageChanged;
|
|
ControlPointSelection m_selection;
|
|
ControlPointEditorStroke m_controlPointEditorStroke;
|
|
std::pair<int, int> m_moveSegmentLimitation; // Indici dei punti di controllo
|
|
// che limitano la curva da
|
|
// muovere
|
|
ControlPointEditorStroke m_moveControlPointEditorStroke; // Usate per muovere
|
|
// la curva durante
|
|
// il drag.
|
|
TRectD m_selectingRect;
|
|
TPointD m_pos;
|
|
|
|
TPropertyGroup m_prop;
|
|
TEnumProperty m_selectType;
|
|
|
|
TBoolProperty
|
|
m_autoSelectDrawing; // Consente di scegliere se swichare tra i livelli.
|
|
|
|
TBoolProperty m_snap;
|
|
TEnumProperty m_snapSensitivity;
|
|
double m_snapMinDistance;
|
|
bool m_foundSnap;
|
|
TPointD m_snapPoint;
|
|
|
|
TPointD m_firstPos; // The first point inserted in m_track
|
|
StrokeGenerator m_track; // Lazo selection generator.
|
|
TStroke* m_stroke; // Stores the stroke generated by m_track.
|
|
|
|
enum Action {
|
|
NONE,
|
|
RECT_SELECTION,
|
|
FREEHAND_SELECTION,
|
|
CP_MOVEMENT,
|
|
SEGMENT_MOVEMENT,
|
|
IN_SPEED_MOVEMENT,
|
|
OUT_SPEED_MOVEMENT
|
|
};
|
|
Action m_action;
|
|
|
|
enum CursorType { NORMAL, ADD, EDIT_SPEED, EDIT_SEGMENT, NO_ACTIVE };
|
|
CursorType m_cursorType;
|
|
|
|
TUndo* m_undo;
|
|
|
|
void selectRegion(TStroke* stroke);
|
|
void startFreehand(const TPointD& pos);
|
|
void freehandDrag(const TPointD& pos);
|
|
void closeFreehand(const TPointD& pos);
|
|
|
|
public:
|
|
ControlPointEditorTool();
|
|
|
|
ToolType getToolType() const override { return TTool::LevelWriteTool; }
|
|
|
|
void updateTranslation() override;
|
|
|
|
TPropertyGroup* getProperties(int targetType) override { return &m_prop; }
|
|
|
|
// da TSelectionOwner: chiamato quando la selezione corrente viene cambiata
|
|
void onSelectionChanged() { invalidate(); }
|
|
|
|
// da TSelectionOwner: chiamato quando si vuole ripristinare una vecchia
|
|
// selezione
|
|
// attualmente non usato
|
|
bool select(const TSelection*) { return false; }
|
|
ControlPointEditorStroke getControlPointEditorStroke() {
|
|
return m_controlPointEditorStroke;
|
|
};
|
|
|
|
void initUndo();
|
|
|
|
void getNearestStrokeColumnIndexes(std::vector<int>& indexes, TPointD pos);
|
|
|
|
void drawMovingSegment();
|
|
void drawControlPoint();
|
|
void draw() override;
|
|
void mouseMove(const TPointD& pos, const TMouseEvent& e) override;
|
|
void leftButtonDown(const TPointD& pos, const TMouseEvent& e) override;
|
|
void rightButtonDown(const TPointD& pos, const TMouseEvent&) override;
|
|
|
|
void moveControlPoints(const TPointD& delta);
|
|
void moveSpeed(const TPointD& delta, bool isIn);
|
|
void moveSegment(const TPointD& delta, bool dragging, bool isShiftPressed);
|
|
|
|
void leftButtonDrag(const TPointD& pos, const TMouseEvent& e) override;
|
|
void leftButtonUp(const TPointD& pos, const TMouseEvent& e) override;
|
|
void addContextMenuItems(QMenu* menu) override;
|
|
|
|
void linkSpeedInOut(int index);
|
|
void unlinkSpeedInOut(int pointIndex);
|
|
|
|
bool keyDown(QKeyEvent* event) override;
|
|
void onEnter() override;
|
|
void onLeave() override;
|
|
bool onPropertyChanged(std::string propertyName) override;
|
|
|
|
void onActivate() override;
|
|
void onDeactivate() override;
|
|
void onImageChanged() override;
|
|
int getCursorId() const override;
|
|
|
|
// returns true if the pressed key is recognized and processed.
|
|
bool isEventAcceptable(QEvent* e) override;
|
|
|
|
TPointD calculateSnap(TPointD pos);
|
|
void drawSnap();
|
|
TPointD getSnap(TPointD pos);
|
|
void resetSnap();
|
|
|
|
bool isBusy() { return m_undo != nullptr; }
|
|
};
|
|
|
|
#endif // CONTROLPOINTEDITORTOOL_H
|