10e684ccfSStephan Aßmus /* 2a75a222bSZardshard * Copyright 2006, 2023, Haiku. 30e684ccfSStephan Aßmus * Distributed under the terms of the MIT License. 40e684ccfSStephan Aßmus * 50e684ccfSStephan Aßmus * Authors: 60e684ccfSStephan Aßmus * Stephan Aßmus <superstippi@gmx.de> 7a75a222bSZardshard * Zardshard 80e684ccfSStephan Aßmus */ 90e684ccfSStephan Aßmus 100e684ccfSStephan Aßmus #ifndef TRANSFORM_BOX_STATES_H 110e684ccfSStephan Aßmus #define TRANSFORM_BOX_STATES_H 120e684ccfSStephan Aßmus 130e684ccfSStephan Aßmus #include <Point.h> 140e684ccfSStephan Aßmus 150e684ccfSStephan Aßmus #include <agg_trans_affine.h> 160e684ccfSStephan Aßmus 17*c6c2c042SZardshard 180e684ccfSStephan Aßmus class BView; 190e684ccfSStephan Aßmus class TransformBox; 200e684ccfSStephan Aßmus 21*c6c2c042SZardshard 22*c6c2c042SZardshard namespace TransformBoxStates { 23*c6c2c042SZardshard 240e684ccfSStephan Aßmus // base class 250e684ccfSStephan Aßmus class DragState { 260e684ccfSStephan Aßmus public: 270e684ccfSStephan Aßmus DragState(TransformBox* parent); ~DragState()280e684ccfSStephan Aßmus virtual ~DragState() {} 290e684ccfSStephan Aßmus SetOrigin(BPoint origin)30*c6c2c042SZardshard virtual void SetOrigin(BPoint origin) 31*c6c2c042SZardshard { fOrigin = origin; } 320e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers) = 0; 330e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const = 0; 340e684ccfSStephan Aßmus 350e684ccfSStephan Aßmus virtual const char* ActionName() const; 360e684ccfSStephan Aßmus 370e684ccfSStephan Aßmus protected: 38a75a222bSZardshard void _SetViewCursor(BView* view, const uchar* cursorData) const; 390e684ccfSStephan Aßmus 400e684ccfSStephan Aßmus BPoint fOrigin; 410e684ccfSStephan Aßmus TransformBox* fParent; 420e684ccfSStephan Aßmus }; 430e684ccfSStephan Aßmus 440e684ccfSStephan Aßmus // scaling states 450e684ccfSStephan Aßmus class DragCornerState : public DragState { 460e684ccfSStephan Aßmus public: 470e684ccfSStephan Aßmus enum { 480e684ccfSStephan Aßmus LEFT_TOP_CORNER, 490e684ccfSStephan Aßmus RIGHT_TOP_CORNER, 500e684ccfSStephan Aßmus LEFT_BOTTOM_CORNER, 510e684ccfSStephan Aßmus RIGHT_BOTTOM_CORNER, 520e684ccfSStephan Aßmus }; 53a75a222bSZardshard DragCornerState(TransformBox* parent, uint32 corner); ~DragCornerState()540e684ccfSStephan Aßmus virtual ~DragCornerState() {} 550e684ccfSStephan Aßmus 560e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 570e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 580e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 590e684ccfSStephan Aßmus 600e684ccfSStephan Aßmus virtual const char* ActionName() const; 610e684ccfSStephan Aßmus 620e684ccfSStephan Aßmus private: 630e684ccfSStephan Aßmus uint32 fCorner; 640e684ccfSStephan Aßmus 650e684ccfSStephan Aßmus float fXOffsetFromCorner; 660e684ccfSStephan Aßmus float fYOffsetFromCorner; 670e684ccfSStephan Aßmus double fOldXScale; 680e684ccfSStephan Aßmus double fOldYScale; 690e684ccfSStephan Aßmus double fOldWidth; 700e684ccfSStephan Aßmus double fOldHeight; 710e684ccfSStephan Aßmus agg::trans_affine fMatrix; 720e684ccfSStephan Aßmus BPoint fOldOffset; 730e684ccfSStephan Aßmus }; 740e684ccfSStephan Aßmus 750e684ccfSStephan Aßmus class DragSideState : public DragState { 760e684ccfSStephan Aßmus public: 770e684ccfSStephan Aßmus enum { 780e684ccfSStephan Aßmus LEFT_SIDE, 790e684ccfSStephan Aßmus TOP_SIDE, 800e684ccfSStephan Aßmus RIGHT_SIDE, 810e684ccfSStephan Aßmus BOTTOM_SIDE, 820e684ccfSStephan Aßmus }; 83a75a222bSZardshard DragSideState(TransformBox* parent, uint32 side); ~DragSideState()840e684ccfSStephan Aßmus virtual ~DragSideState() {} 850e684ccfSStephan Aßmus 860e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 870e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 880e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 890e684ccfSStephan Aßmus 900e684ccfSStephan Aßmus virtual const char* ActionName() const; 910e684ccfSStephan Aßmus 920e684ccfSStephan Aßmus private: 930e684ccfSStephan Aßmus uint32 fSide; 940e684ccfSStephan Aßmus 950e684ccfSStephan Aßmus float fOffsetFromSide; 960e684ccfSStephan Aßmus double fOldXScale; 970e684ccfSStephan Aßmus double fOldYScale; 980e684ccfSStephan Aßmus double fOldSideDist; 990e684ccfSStephan Aßmus agg::trans_affine fMatrix; 1000e684ccfSStephan Aßmus BPoint fOldOffset; 1010e684ccfSStephan Aßmus }; 1020e684ccfSStephan Aßmus 1030e684ccfSStephan Aßmus // translate state 1040e684ccfSStephan Aßmus class DragBoxState : public DragState { 1050e684ccfSStephan Aßmus public: DragBoxState(TransformBox * parent)1060e684ccfSStephan Aßmus DragBoxState(TransformBox* parent) 1070e684ccfSStephan Aßmus : DragState(parent) {} ~DragBoxState()1080e684ccfSStephan Aßmus virtual ~DragBoxState() {} 1090e684ccfSStephan Aßmus 1100e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 1110e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 1120e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 1130e684ccfSStephan Aßmus 1140e684ccfSStephan Aßmus virtual const char* ActionName() const; 1150e684ccfSStephan Aßmus 1160e684ccfSStephan Aßmus private: 1170e684ccfSStephan Aßmus BPoint fOldTranslation; 1180e684ccfSStephan Aßmus }; 1190e684ccfSStephan Aßmus 1200e684ccfSStephan Aßmus // rotate state 1210e684ccfSStephan Aßmus class RotateBoxState : public DragState { 1220e684ccfSStephan Aßmus public: 1230e684ccfSStephan Aßmus RotateBoxState(TransformBox* parent); ~RotateBoxState()1240e684ccfSStephan Aßmus virtual ~RotateBoxState() {} 1250e684ccfSStephan Aßmus 1260e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 1270e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 1280e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 1290e684ccfSStephan Aßmus 1300e684ccfSStephan Aßmus virtual const char* ActionName() const; 1310e684ccfSStephan Aßmus 1320e684ccfSStephan Aßmus private: 1330e684ccfSStephan Aßmus double fOldAngle; 1340e684ccfSStephan Aßmus }; 1350e684ccfSStephan Aßmus 1360e684ccfSStephan Aßmus // offset center state 1370e684ccfSStephan Aßmus class OffsetCenterState : public DragState { 1380e684ccfSStephan Aßmus public: OffsetCenterState(TransformBox * parent)1390e684ccfSStephan Aßmus OffsetCenterState(TransformBox* parent) 1400e684ccfSStephan Aßmus : DragState(parent) {} ~OffsetCenterState()1410e684ccfSStephan Aßmus virtual ~OffsetCenterState() {} 1420e684ccfSStephan Aßmus 1430e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 1440e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 1450e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 1460e684ccfSStephan Aßmus 1470e684ccfSStephan Aßmus virtual const char* ActionName() const; 1480e684ccfSStephan Aßmus }; 1490e684ccfSStephan Aßmus 150*c6c2c042SZardshard } // TransformBoxStates namespace 151*c6c2c042SZardshard 1520e684ccfSStephan Aßmus #endif // TRANSFORM_BOX_STATES_H 153