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