1*0e684ccfSStephan Aßmus /* 2*0e684ccfSStephan Aßmus * Copyright 2006, Haiku. 3*0e684ccfSStephan Aßmus * Distributed under the terms of the MIT License. 4*0e684ccfSStephan Aßmus * 5*0e684ccfSStephan Aßmus * Authors: 6*0e684ccfSStephan Aßmus * Stephan Aßmus <superstippi@gmx.de> 7*0e684ccfSStephan Aßmus */ 8*0e684ccfSStephan Aßmus 9*0e684ccfSStephan Aßmus #ifndef TRANSFORM_BOX_STATES_H 10*0e684ccfSStephan Aßmus #define TRANSFORM_BOX_STATES_H 11*0e684ccfSStephan Aßmus 12*0e684ccfSStephan Aßmus #include <Point.h> 13*0e684ccfSStephan Aßmus 14*0e684ccfSStephan Aßmus #include <agg_trans_affine.h> 15*0e684ccfSStephan Aßmus 16*0e684ccfSStephan Aßmus class BView; 17*0e684ccfSStephan Aßmus class TransformBox; 18*0e684ccfSStephan Aßmus 19*0e684ccfSStephan Aßmus // TODO: remove and replace with translation string indices once multiple 20*0e684ccfSStephan Aßmus // languages are supported 21*0e684ccfSStephan Aßmus #define TRANSFORMATION 0 22*0e684ccfSStephan Aßmus #define ROTATE 0 23*0e684ccfSStephan Aßmus #define MOVE 0 24*0e684ccfSStephan Aßmus #define SCALE 0 25*0e684ccfSStephan Aßmus #define MOVE_PIVOT 0 26*0e684ccfSStephan Aßmus // 27*0e684ccfSStephan Aßmus 28*0e684ccfSStephan Aßmus // base class 29*0e684ccfSStephan Aßmus class DragState { 30*0e684ccfSStephan Aßmus public: 31*0e684ccfSStephan Aßmus DragState(TransformBox* parent); 32*0e684ccfSStephan Aßmus virtual ~DragState() {} 33*0e684ccfSStephan Aßmus 34*0e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 35*0e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers) = 0; 36*0e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const = 0; 37*0e684ccfSStephan Aßmus 38*0e684ccfSStephan Aßmus virtual const char* ActionName() const; 39*0e684ccfSStephan Aßmus virtual uint32 ActionNameIndex() const; 40*0e684ccfSStephan Aßmus 41*0e684ccfSStephan Aßmus protected: 42*0e684ccfSStephan Aßmus void _SetViewCursor(BView* view, 43*0e684ccfSStephan Aßmus const uchar* cursorData) const; 44*0e684ccfSStephan Aßmus 45*0e684ccfSStephan Aßmus BPoint fOrigin; 46*0e684ccfSStephan Aßmus TransformBox* fParent; 47*0e684ccfSStephan Aßmus }; 48*0e684ccfSStephan Aßmus 49*0e684ccfSStephan Aßmus // scaling states 50*0e684ccfSStephan Aßmus class DragCornerState : public DragState { 51*0e684ccfSStephan Aßmus public: 52*0e684ccfSStephan Aßmus enum { 53*0e684ccfSStephan Aßmus LEFT_TOP_CORNER, 54*0e684ccfSStephan Aßmus RIGHT_TOP_CORNER, 55*0e684ccfSStephan Aßmus LEFT_BOTTOM_CORNER, 56*0e684ccfSStephan Aßmus RIGHT_BOTTOM_CORNER, 57*0e684ccfSStephan Aßmus }; 58*0e684ccfSStephan Aßmus DragCornerState(TransformBox* parent, 59*0e684ccfSStephan Aßmus uint32 corner); 60*0e684ccfSStephan Aßmus virtual ~DragCornerState() {} 61*0e684ccfSStephan Aßmus 62*0e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 63*0e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 64*0e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 65*0e684ccfSStephan Aßmus 66*0e684ccfSStephan Aßmus virtual const char* ActionName() const; 67*0e684ccfSStephan Aßmus virtual uint32 ActionNameIndex() const; 68*0e684ccfSStephan Aßmus 69*0e684ccfSStephan Aßmus private: 70*0e684ccfSStephan Aßmus uint32 fCorner; 71*0e684ccfSStephan Aßmus 72*0e684ccfSStephan Aßmus float fXOffsetFromCorner; 73*0e684ccfSStephan Aßmus float fYOffsetFromCorner; 74*0e684ccfSStephan Aßmus double fOldXScale; 75*0e684ccfSStephan Aßmus double fOldYScale; 76*0e684ccfSStephan Aßmus double fOldWidth; 77*0e684ccfSStephan Aßmus double fOldHeight; 78*0e684ccfSStephan Aßmus agg::trans_affine fMatrix; 79*0e684ccfSStephan Aßmus BPoint fOldOffset; 80*0e684ccfSStephan Aßmus }; 81*0e684ccfSStephan Aßmus 82*0e684ccfSStephan Aßmus class DragSideState : public DragState { 83*0e684ccfSStephan Aßmus public: 84*0e684ccfSStephan Aßmus enum { 85*0e684ccfSStephan Aßmus LEFT_SIDE, 86*0e684ccfSStephan Aßmus TOP_SIDE, 87*0e684ccfSStephan Aßmus RIGHT_SIDE, 88*0e684ccfSStephan Aßmus BOTTOM_SIDE, 89*0e684ccfSStephan Aßmus }; 90*0e684ccfSStephan Aßmus DragSideState(TransformBox* parent, 91*0e684ccfSStephan Aßmus uint32 side); 92*0e684ccfSStephan Aßmus virtual ~DragSideState() {} 93*0e684ccfSStephan Aßmus 94*0e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 95*0e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 96*0e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 97*0e684ccfSStephan Aßmus 98*0e684ccfSStephan Aßmus virtual const char* ActionName() const; 99*0e684ccfSStephan Aßmus virtual uint32 ActionNameIndex() const; 100*0e684ccfSStephan Aßmus 101*0e684ccfSStephan Aßmus private: 102*0e684ccfSStephan Aßmus uint32 fSide; 103*0e684ccfSStephan Aßmus 104*0e684ccfSStephan Aßmus float fOffsetFromSide; 105*0e684ccfSStephan Aßmus double fOldXScale; 106*0e684ccfSStephan Aßmus double fOldYScale; 107*0e684ccfSStephan Aßmus double fOldSideDist; 108*0e684ccfSStephan Aßmus agg::trans_affine fMatrix; 109*0e684ccfSStephan Aßmus BPoint fOldOffset; 110*0e684ccfSStephan Aßmus }; 111*0e684ccfSStephan Aßmus 112*0e684ccfSStephan Aßmus // translate state 113*0e684ccfSStephan Aßmus class DragBoxState : public DragState { 114*0e684ccfSStephan Aßmus public: 115*0e684ccfSStephan Aßmus DragBoxState(TransformBox* parent) 116*0e684ccfSStephan Aßmus : DragState(parent) {} 117*0e684ccfSStephan Aßmus virtual ~DragBoxState() {} 118*0e684ccfSStephan Aßmus 119*0e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 120*0e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 121*0e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 122*0e684ccfSStephan Aßmus 123*0e684ccfSStephan Aßmus virtual const char* ActionName() const; 124*0e684ccfSStephan Aßmus virtual uint32 ActionNameIndex() const; 125*0e684ccfSStephan Aßmus 126*0e684ccfSStephan Aßmus private: 127*0e684ccfSStephan Aßmus BPoint fOldTranslation; 128*0e684ccfSStephan Aßmus }; 129*0e684ccfSStephan Aßmus 130*0e684ccfSStephan Aßmus // rotate state 131*0e684ccfSStephan Aßmus class RotateBoxState : public DragState { 132*0e684ccfSStephan Aßmus public: 133*0e684ccfSStephan Aßmus RotateBoxState(TransformBox* parent); 134*0e684ccfSStephan Aßmus virtual ~RotateBoxState() {} 135*0e684ccfSStephan Aßmus 136*0e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 137*0e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 138*0e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 139*0e684ccfSStephan Aßmus 140*0e684ccfSStephan Aßmus virtual const char* ActionName() const; 141*0e684ccfSStephan Aßmus virtual uint32 ActionNameIndex() const; 142*0e684ccfSStephan Aßmus 143*0e684ccfSStephan Aßmus private: 144*0e684ccfSStephan Aßmus double fOldAngle; 145*0e684ccfSStephan Aßmus }; 146*0e684ccfSStephan Aßmus 147*0e684ccfSStephan Aßmus // offset center state 148*0e684ccfSStephan Aßmus class OffsetCenterState : public DragState { 149*0e684ccfSStephan Aßmus public: 150*0e684ccfSStephan Aßmus OffsetCenterState(TransformBox* parent) 151*0e684ccfSStephan Aßmus : DragState(parent) {} 152*0e684ccfSStephan Aßmus virtual ~OffsetCenterState() {} 153*0e684ccfSStephan Aßmus 154*0e684ccfSStephan Aßmus virtual void SetOrigin(BPoint origin); 155*0e684ccfSStephan Aßmus virtual void DragTo(BPoint current, uint32 modifiers); 156*0e684ccfSStephan Aßmus virtual void UpdateViewCursor(BView* view, BPoint current) const; 157*0e684ccfSStephan Aßmus 158*0e684ccfSStephan Aßmus virtual const char* ActionName() const; 159*0e684ccfSStephan Aßmus virtual uint32 ActionNameIndex() const; 160*0e684ccfSStephan Aßmus 161*0e684ccfSStephan Aßmus }; 162*0e684ccfSStephan Aßmus 163*0e684ccfSStephan Aßmus #endif // TRANSFORM_BOX_STATES_H 164