xref: /haiku/src/apps/icon-o-matic/transformable/TransformBoxStates.h (revision 0e684ccfed8462d5e8647473765eafcf970899f6)
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