xref: /aoo4110/main/svx/source/svdraw/svddrgm1.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _SVDDRGM1_HXX
25*b1cdbd2cSJim Jagielski #define _SVDDRGM1_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <svx/xpoly.hxx>
28*b1cdbd2cSJim Jagielski #include <svx/svdhdl.hxx>
29*b1cdbd2cSJim Jagielski #include <svx/svddrgv.hxx>
30*b1cdbd2cSJim Jagielski #include <svx/svddrgmt.hxx>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
33*b1cdbd2cSJim Jagielski // predeclarations
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski class SdrDragView;
36*b1cdbd2cSJim Jagielski class SdrDragStat;
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
39*b1cdbd2cSJim Jagielski //   SdrDragMovHdl
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski class SdrDragMovHdl : public SdrDragMethod
42*b1cdbd2cSJim Jagielski {
43*b1cdbd2cSJim Jagielski private:
44*b1cdbd2cSJim Jagielski 	bool					bMirrObjShown;
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski protected:
47*b1cdbd2cSJim Jagielski     // define nothing, overload to do so
48*b1cdbd2cSJim Jagielski     virtual void createSdrDragEntries();
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski public:
51*b1cdbd2cSJim Jagielski 	TYPEINFO();
52*b1cdbd2cSJim Jagielski 	SdrDragMovHdl(SdrDragView& rNewView);
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski 	virtual void TakeSdrDragComment(String& rStr) const;
55*b1cdbd2cSJim Jagielski 	virtual bool BeginSdrDrag();
56*b1cdbd2cSJim Jagielski 	virtual void MoveSdrDrag(const Point& rPnt);
57*b1cdbd2cSJim Jagielski 	virtual bool EndSdrDrag(bool bCopy);
58*b1cdbd2cSJim Jagielski 	virtual void CancelSdrDrag();
59*b1cdbd2cSJim Jagielski 	virtual Pointer GetSdrDragPointer() const;
60*b1cdbd2cSJim Jagielski };
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
63*b1cdbd2cSJim Jagielski //   SdrDragRotate
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski class SdrDragRotate : public SdrDragMethod
66*b1cdbd2cSJim Jagielski {
67*b1cdbd2cSJim Jagielski private:
68*b1cdbd2cSJim Jagielski 	double						nSin;
69*b1cdbd2cSJim Jagielski 	double						nCos;
70*b1cdbd2cSJim Jagielski 	long						nWink0;
71*b1cdbd2cSJim Jagielski 	long						nWink;
72*b1cdbd2cSJim Jagielski 	bool    					bRight;
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski public:
75*b1cdbd2cSJim Jagielski 	TYPEINFO();
76*b1cdbd2cSJim Jagielski 	SdrDragRotate(SdrDragView& rNewView);
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 	virtual void TakeSdrDragComment(String& rStr) const;
79*b1cdbd2cSJim Jagielski 	virtual bool BeginSdrDrag();
80*b1cdbd2cSJim Jagielski 	virtual void MoveSdrDrag(const Point& rPnt);
81*b1cdbd2cSJim Jagielski 	virtual bool EndSdrDrag(bool bCopy);
82*b1cdbd2cSJim Jagielski 	virtual Pointer GetSdrDragPointer() const;
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 	virtual basegfx::B2DHomMatrix getCurrentTransformation();
85*b1cdbd2cSJim Jagielski     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget);
86*b1cdbd2cSJim Jagielski };
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
89*b1cdbd2cSJim Jagielski //   SdrDragShear
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski class SdrDragShear : public SdrDragMethod
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski private:
94*b1cdbd2cSJim Jagielski 	Fraction					aFact;
95*b1cdbd2cSJim Jagielski 	long						nWink0;
96*b1cdbd2cSJim Jagielski 	long						nWink;
97*b1cdbd2cSJim Jagielski 	double						nTan;
98*b1cdbd2cSJim Jagielski 	bool    					bVertical;   // Vertikales verzerren
99*b1cdbd2cSJim Jagielski 	bool    					bResize;     // Shear mit Resize
100*b1cdbd2cSJim Jagielski 	bool    					bUpSideDown; // Beim Shear/Slant gespiegelt
101*b1cdbd2cSJim Jagielski 	bool    					bSlant;
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski public:
104*b1cdbd2cSJim Jagielski 	TYPEINFO();
105*b1cdbd2cSJim Jagielski 	SdrDragShear(SdrDragView& rNewView,bool bSlant1);
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 	virtual void TakeSdrDragComment(String& rStr) const;
108*b1cdbd2cSJim Jagielski 	virtual bool BeginSdrDrag();
109*b1cdbd2cSJim Jagielski 	virtual void MoveSdrDrag(const Point& rPnt);
110*b1cdbd2cSJim Jagielski 	virtual bool EndSdrDrag(bool bCopy);
111*b1cdbd2cSJim Jagielski 	virtual Pointer GetSdrDragPointer() const;
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 	virtual basegfx::B2DHomMatrix getCurrentTransformation();
114*b1cdbd2cSJim Jagielski     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget);
115*b1cdbd2cSJim Jagielski };
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
118*b1cdbd2cSJim Jagielski //   SdrDragMirror
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski class SdrDragMirror : public SdrDragMethod
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski private:
123*b1cdbd2cSJim Jagielski 	Point						aDif;
124*b1cdbd2cSJim Jagielski 	long						nWink;
125*b1cdbd2cSJim Jagielski 	bool    					bMirrored;
126*b1cdbd2cSJim Jagielski 	bool    					bSide0;
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 	bool ImpCheckSide(const Point& rPnt) const;
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski public:
131*b1cdbd2cSJim Jagielski 	TYPEINFO();
132*b1cdbd2cSJim Jagielski 	SdrDragMirror(SdrDragView& rNewView);
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 	virtual void TakeSdrDragComment(String& rStr) const;
135*b1cdbd2cSJim Jagielski 	virtual bool BeginSdrDrag();
136*b1cdbd2cSJim Jagielski 	virtual void MoveSdrDrag(const Point& rPnt);
137*b1cdbd2cSJim Jagielski 	virtual bool EndSdrDrag(bool bCopy);
138*b1cdbd2cSJim Jagielski 	virtual Pointer GetSdrDragPointer() const;
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 	virtual basegfx::B2DHomMatrix getCurrentTransformation();
141*b1cdbd2cSJim Jagielski     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget);
142*b1cdbd2cSJim Jagielski };
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
145*b1cdbd2cSJim Jagielski //   SdrDragGradient
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski class SdrDragGradient : public SdrDragMethod
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski private:
150*b1cdbd2cSJim Jagielski 	// Handles to work on
151*b1cdbd2cSJim Jagielski 	SdrHdlGradient*				pIAOHandle;
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 	// is this for gradient (or for transparence) ?
154*b1cdbd2cSJim Jagielski 	unsigned					bIsGradient : 1;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski public:
157*b1cdbd2cSJim Jagielski 	TYPEINFO();
158*b1cdbd2cSJim Jagielski 	SdrDragGradient(SdrDragView& rNewView, bool bGrad = true);
159*b1cdbd2cSJim Jagielski 
IsGradient() const160*b1cdbd2cSJim Jagielski 	bool IsGradient() const { return bIsGradient; }
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 	virtual void TakeSdrDragComment(String& rStr) const;
163*b1cdbd2cSJim Jagielski 	virtual bool BeginSdrDrag();
164*b1cdbd2cSJim Jagielski 	virtual void MoveSdrDrag(const Point& rPnt);
165*b1cdbd2cSJim Jagielski 	virtual bool EndSdrDrag(bool bCopy);
166*b1cdbd2cSJim Jagielski 	virtual Pointer GetSdrDragPointer() const;
167*b1cdbd2cSJim Jagielski 	virtual void CancelSdrDrag();
168*b1cdbd2cSJim Jagielski };
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
171*b1cdbd2cSJim Jagielski //   SdrDragCrook
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski class SdrDragCrook : public SdrDragMethod
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski private:
176*b1cdbd2cSJim Jagielski 	Rectangle					aMarkRect;
177*b1cdbd2cSJim Jagielski 	Point						aMarkCenter;
178*b1cdbd2cSJim Jagielski 	Point						aCenter;
179*b1cdbd2cSJim Jagielski 	Point						aStart;
180*b1cdbd2cSJim Jagielski 	Fraction					aFact;
181*b1cdbd2cSJim Jagielski 	Point						aRad;
182*b1cdbd2cSJim Jagielski 	bool    					bContortionAllowed;
183*b1cdbd2cSJim Jagielski 	bool    					bNoContortionAllowed;
184*b1cdbd2cSJim Jagielski 	bool    					bContortion;
185*b1cdbd2cSJim Jagielski 	bool    					bResizeAllowed;
186*b1cdbd2cSJim Jagielski 	bool    					bResize;
187*b1cdbd2cSJim Jagielski 	bool    					bRotateAllowed;
188*b1cdbd2cSJim Jagielski 	bool    					bRotate;
189*b1cdbd2cSJim Jagielski 	bool    					bVertical;
190*b1cdbd2cSJim Jagielski 	bool    					bValid;
191*b1cdbd2cSJim Jagielski 	bool    					bLft;
192*b1cdbd2cSJim Jagielski 	bool    					bRgt;
193*b1cdbd2cSJim Jagielski 	bool    					bUpr;
194*b1cdbd2cSJim Jagielski 	bool    					bLwr;
195*b1cdbd2cSJim Jagielski 	bool    					bAtCenter;
196*b1cdbd2cSJim Jagielski 	long						nWink;
197*b1cdbd2cSJim Jagielski 	long						nMarkSize;
198*b1cdbd2cSJim Jagielski 	SdrCrookMode				eMode;
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 	// helpers for applyCurrentTransformationToPolyPolygon
201*b1cdbd2cSJim Jagielski 	void _MovAllPoints(basegfx::B2DPolyPolygon& rTarget);
202*b1cdbd2cSJim Jagielski 	void _MovCrookPoint(Point& rPnt, Point* pC1, Point* pC2);
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski protected:
205*b1cdbd2cSJim Jagielski     // needs to add drag geometry to the default
206*b1cdbd2cSJim Jagielski     virtual void createSdrDragEntries();
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski public:
209*b1cdbd2cSJim Jagielski 	TYPEINFO();
210*b1cdbd2cSJim Jagielski 	SdrDragCrook(SdrDragView& rNewView);
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 	virtual void TakeSdrDragComment(String& rStr) const;
213*b1cdbd2cSJim Jagielski 	virtual bool BeginSdrDrag();
214*b1cdbd2cSJim Jagielski 	virtual void MoveSdrDrag(const Point& rPnt);
215*b1cdbd2cSJim Jagielski 	virtual bool EndSdrDrag(bool bCopy);
216*b1cdbd2cSJim Jagielski 	virtual Pointer GetSdrDragPointer() const;
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 	virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget);
219*b1cdbd2cSJim Jagielski 	virtual void applyCurrentTransformationToPolyPolygon(basegfx::B2DPolyPolygon& rTarget);
220*b1cdbd2cSJim Jagielski };
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
223*b1cdbd2cSJim Jagielski //   SdrDragDistort
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski class SdrDragDistort : public SdrDragMethod
226*b1cdbd2cSJim Jagielski {
227*b1cdbd2cSJim Jagielski private:
228*b1cdbd2cSJim Jagielski 	Rectangle					aMarkRect;
229*b1cdbd2cSJim Jagielski 	XPolygon					aDistortedRect;
230*b1cdbd2cSJim Jagielski 	sal_uInt16					nPolyPt;
231*b1cdbd2cSJim Jagielski 	bool    					bContortionAllowed;
232*b1cdbd2cSJim Jagielski 	bool    					bNoContortionAllowed;
233*b1cdbd2cSJim Jagielski 	bool    					bContortion;
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 	// helper for applyCurrentTransformationToPolyPolygon
236*b1cdbd2cSJim Jagielski 	void _MovAllPoints(basegfx::B2DPolyPolygon& rTarget);
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski protected:
239*b1cdbd2cSJim Jagielski     // needs to add drag geometry to the default
240*b1cdbd2cSJim Jagielski     virtual void createSdrDragEntries();
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski public:
243*b1cdbd2cSJim Jagielski 	TYPEINFO();
244*b1cdbd2cSJim Jagielski 	SdrDragDistort(SdrDragView& rNewView);
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 	virtual void TakeSdrDragComment(String& rStr) const;
247*b1cdbd2cSJim Jagielski 	virtual bool BeginSdrDrag();
248*b1cdbd2cSJim Jagielski 	virtual void MoveSdrDrag(const Point& rPnt);
249*b1cdbd2cSJim Jagielski 	virtual bool EndSdrDrag(bool bCopy);
250*b1cdbd2cSJim Jagielski 	virtual Pointer GetSdrDragPointer() const;
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget);
253*b1cdbd2cSJim Jagielski 	virtual void applyCurrentTransformationToPolyPolygon(basegfx::B2DPolyPolygon& rTarget);
254*b1cdbd2cSJim Jagielski };
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
257*b1cdbd2cSJim Jagielski //   SdrDragCrop
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski // derive from SdrDragObjOwn to have handles aligned to object when it
260*b1cdbd2cSJim Jagielski // is sheared or rotated
261*b1cdbd2cSJim Jagielski class SdrDragCrop : public SdrDragObjOwn
262*b1cdbd2cSJim Jagielski {
263*b1cdbd2cSJim Jagielski public:
264*b1cdbd2cSJim Jagielski     TYPEINFO();
265*b1cdbd2cSJim Jagielski     SdrDragCrop(SdrDragView& rNewView);
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski     virtual void TakeSdrDragComment(String& rStr) const;
268*b1cdbd2cSJim Jagielski     virtual bool BeginSdrDrag();
269*b1cdbd2cSJim Jagielski     virtual bool EndSdrDrag(bool bCopy);
270*b1cdbd2cSJim Jagielski     virtual Pointer GetSdrDragPointer() const;
271*b1cdbd2cSJim Jagielski };
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////////////////////////////
274*b1cdbd2cSJim Jagielski #endif //_SVDDRGM1_HXX
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski // eof
277