tahoma2d/toonz/sources/tnztools/rasterselectiontool.h

252 lines
7.8 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef RASTERSELECTIONTOOL_INCLUDED
#define RASTERSELECTIONTOOL_INCLUDED
#include "selectiontool.h"
#include "setsaveboxtool.h"
#include "tools/rasterselection.h"
// forward declaration
class RasterSelectionTool;
class VectorFreeDeformer;
//=============================================================================
// RasterFreeDeformer
//-----------------------------------------------------------------------------
class RasterFreeDeformer final : public FreeDeformer {
2016-06-15 18:43:10 +12:00
TRasterP m_ras;
TRasterP m_newRas;
bool m_noAntialiasing;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
RasterFreeDeformer(TRasterP ras);
~RasterFreeDeformer();
/*! Set \b index point to \b p, with index from 0 to 3. */
2016-06-19 20:06:29 +12:00
void setPoint(int index, const TPointD &p) override;
2016-06-15 18:43:10 +12:00
/*! Helper function. */
void setPoints(const TPointD &p0, const TPointD &p1, const TPointD &p2,
2016-06-19 20:06:29 +12:00
const TPointD &p3) override;
2016-06-15 18:43:10 +12:00
TRasterP getImage() const { return m_newRas; }
2016-06-19 20:06:29 +12:00
void deformImage() override;
2016-06-15 18:43:10 +12:00
void setNoAntialiasing(bool value) { m_noAntialiasing = value; }
2016-03-19 06:57:51 +13:00
};
//=============================================================================
// DragSelectionTool
//-----------------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
namespace DragSelectionTool {
2016-03-19 06:57:51 +13:00
//=============================================================================
// UndoRasterDeform
//-----------------------------------------------------------------------------
class UndoRasterDeform final : public TUndo {
2016-06-15 18:43:10 +12:00
static int m_id;
RasterSelectionTool *m_tool;
std::string m_oldFloatingImageId, m_newFloatingImageId;
std::vector<TStroke> m_newStrokes;
std::vector<TStroke> m_oldStrokes;
DragSelectionTool::DeformValues m_oldDeformValues, m_newDeformValues;
FourPoints m_oldBBox, m_newBBox;
TPointD m_oldCenter, m_newCenter;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
TDimension m_dim;
int m_pixelSize;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
UndoRasterDeform(RasterSelectionTool *tool);
~UndoRasterDeform();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void registerRasterDeformation();
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void undo() const override;
void redo() const override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
int getSize() const override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
QString getHistoryString() override { return QObject::tr("Deform Raster"); }
2016-03-19 06:57:51 +13:00
};
//=============================================================================
// UndoRasterTransform
//-----------------------------------------------------------------------------
class UndoRasterTransform final : public TUndo {
2016-06-15 18:43:10 +12:00
RasterSelectionTool *m_tool;
TAffine m_oldTransform, m_newTransform;
TPointD m_oldCenter, m_newCenter;
FourPoints m_oldBbox, m_newBbox;
DragSelectionTool::DeformValues m_oldDeformValues, m_newDeformValues;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
UndoRasterTransform(RasterSelectionTool *tool);
void setChangedValues();
2016-06-19 20:06:29 +12:00
void undo() const override;
void redo() const override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
int getSize() const override { return sizeof(*this); }
2016-03-19 06:57:51 +13:00
2016-06-20 14:23:05 +12:00
QString getHistoryString() override {
return QObject::tr("Transform Raster");
}
2016-03-19 06:57:51 +13:00
};
//=============================================================================
// RasterDeformTool
//-----------------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
class RasterDeformTool : public DeformTool {
2016-03-19 06:57:51 +13:00
protected:
2016-06-15 18:43:10 +12:00
TAffine m_transform;
UndoRasterTransform *m_transformUndo;
UndoRasterDeform *m_deformUndo;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
//! It's true when use RasterFreeDeformer
bool m_isFreeDeformer;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void applyTransform(FourPoints bbox) override;
2016-06-15 18:43:10 +12:00
void applyTransform(TAffine aff, bool modifyCenter);
2016-06-19 20:06:29 +12:00
void addTransformUndo() override;
2016-03-19 06:57:51 +13:00
2016-06-20 14:23:05 +12:00
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override{};
void draw() override{};
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
RasterDeformTool(RasterSelectionTool *tool, bool freeDeformer);
2016-03-19 06:57:51 +13:00
};
//=============================================================================
// RasterRotationTool
//-----------------------------------------------------------------------------
class RasterRotationTool final : public RasterDeformTool {
2016-06-15 18:43:10 +12:00
Rotation *m_rotation;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
RasterRotationTool(RasterSelectionTool *tool);
2016-06-19 20:06:29 +12:00
void transform(TAffine aff, double angle) override;
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
void draw() override;
2016-03-19 06:57:51 +13:00
};
//=============================================================================
// RasterFreeDeformTool
//-----------------------------------------------------------------------------
class RasterFreeDeformTool final : public RasterDeformTool {
2016-06-15 18:43:10 +12:00
FreeDeform *m_freeDeform;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
RasterFreeDeformTool(RasterSelectionTool *tool);
2016-06-19 20:06:29 +12:00
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
2016-03-19 06:57:51 +13:00
};
//=============================================================================
// RasterMoveSelectionTool
//-----------------------------------------------------------------------------
class RasterMoveSelectionTool final : public RasterDeformTool {
2016-06-15 18:43:10 +12:00
MoveSelection *m_moveSelection;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
RasterMoveSelectionTool(RasterSelectionTool *tool);
2016-06-19 20:06:29 +12:00
void transform(TAffine aff) override;
void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
2016-03-19 06:57:51 +13:00
};
//=============================================================================
// RasterScaleTool
//-----------------------------------------------------------------------------
class RasterScaleTool final : public RasterDeformTool {
2016-06-15 18:43:10 +12:00
Scale *m_scale;
2016-03-19 06:57:51 +13:00
public:
RasterScaleTool(RasterSelectionTool *tool, ScaleType type);
2016-06-15 18:43:10 +12:00
/*! Return scale value. */
2016-06-19 20:06:29 +12:00
TPointD transform(int index, TPointD newPos) override;
void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
2016-03-19 06:57:51 +13:00
};
2016-06-15 18:43:10 +12:00
} // namespace DragSelectionTool
2016-03-19 06:57:51 +13:00
//=============================================================================
// RasterSelectionTool
//-----------------------------------------------------------------------------
class RasterSelectionTool final : public SelectionTool {
2016-06-15 18:43:10 +12:00
Q_DECLARE_TR_FUNCTIONS(RasterSelectionTool)
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
RasterSelection m_rasterSelection;
int m_transformationCount;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
//! Used in ToonzRasterImage to switch from selection tool to modify savebox
//! tool.
TBoolProperty m_modifySavebox;
SetSaveboxTool *m_setSaveboxTool;
TBoolProperty m_noAntialiasing;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
//! Used to deform bbox strokes.
VectorFreeDeformer *m_selectionFreeDeformer;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void modifySelectionOnClick(TImageP image, const TPointD &pos,
2016-06-19 20:06:29 +12:00
const TMouseEvent &e) override;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void drawFloatingSelection();
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
RasterSelectionTool(int targetType);
2016-03-19 06:57:51 +13:00
2016-06-20 14:23:05 +12:00
void setBBox(const DragSelectionTool::FourPoints &points,
int index = 0) override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void setNewFreeDeformer() override;
2016-06-15 18:43:10 +12:00
VectorFreeDeformer *getSelectionFreeDeformer() const;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
bool isFloating() const override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void leftButtonDown(const TPointD &pos, const TMouseEvent &) override;
void mouseMove(const TPointD &pos, const TMouseEvent &e) override;
void leftButtonDrag(const TPointD &pos, const TMouseEvent &) override;
void leftButtonUp(const TPointD &pos, const TMouseEvent &) override;
void leftButtonDoubleClick(const TPointD &, const TMouseEvent &e) override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void draw() override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
TSelection *getSelection() override;
bool isSelectionEmpty() override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void computeBBox() override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void doOnActivate() override;
void doOnDeactivate() override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void onImageChanged() override;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void transformFloatingSelection(const TAffine &affine, const TPointD &center,
const DragSelectionTool::FourPoints &points);
void increaseTransformationCount();
void decreaseTransformationCount();
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void onActivate() override;
2016-06-15 18:43:10 +12:00
TBoolProperty *getModifySaveboxProperty() {
if (m_targetType & ToonzImage) return &m_modifySavebox;
return 0;
}
2016-06-19 20:06:29 +12:00
bool onPropertyChanged(std::string propertyName) override;
2016-06-15 18:43:10 +12:00
bool getNoAntialiasingValue() { return m_noAntialiasing.getValue(); }
2016-03-19 06:57:51 +13:00
bool isSelectionEditable() override { return m_rasterSelection.isEditable(); }
2016-03-19 06:57:51 +13:00
protected:
2016-06-19 20:06:29 +12:00
void updateTranslation() override;
2016-03-19 06:57:51 +13:00
};
2016-06-15 18:43:10 +12:00
#endif // RASTERSELECTIONTOOL_INCLUDED