1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #ifndef INCLUDED_SVX_SOURCE_SVDRAW_SVDDRGM1_HXX
21 #define INCLUDED_SVX_SOURCE_SVDRAW_SVDDRGM1_HXX
22 
23 #include <svx/xpoly.hxx>
24 #include <svx/svdhdl.hxx>
25 #include <svx/svddrgv.hxx>
26 #include <svx/svddrgmt.hxx>
27 
28 class SdrDragView;
29 
30 class SdrDragMovHdl : public SdrDragMethod
31 {
32 protected:
33     // define nothing, override to do so
34     virtual void createSdrDragEntries() override;
35 
36 public:
37     explicit SdrDragMovHdl(SdrDragView& rNewView);
38 
39     virtual OUString GetSdrDragComment() const override;
40     virtual bool BeginSdrDrag() override;
41     virtual void MoveSdrDrag(const Point& rPnt) override;
42     virtual bool EndSdrDrag(bool bCopy) override;
43     virtual void CancelSdrDrag() override;
44     virtual PointerStyle GetSdrDragPointer() const override;
45 };
46 
47 class SdrDragRotate : public SdrDragMethod
48 {
49 private:
50     double                      nSin;
51     double                      nCos;
52     long                        nAngle0;
53     long                        nAngle;
54     bool                        bRight;
55 
56 public:
57     explicit SdrDragRotate(SdrDragView& rNewView);
58 
59     virtual OUString GetSdrDragComment() const override;
60     virtual bool BeginSdrDrag() override;
61     virtual void MoveSdrDrag(const Point& rPnt) override;
62     virtual bool EndSdrDrag(bool bCopy) override;
63     virtual PointerStyle GetSdrDragPointer() const override;
64 
65     virtual basegfx::B2DHomMatrix getCurrentTransformation() override;
66     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
67 };
68 
69 class SdrDragShear : public SdrDragMethod
70 {
71 private:
72     Fraction                    aFact;
73     long                        nAngle0;
74     long                        nAngle;
75     double                      nTan;
76     bool                        bVertical;   // contort vertically
77     bool                        bResize;     // shear and resize
78     bool                        bUpSideDown; // mirror and shear/slant
79     bool const                  bSlant;
80 
81 public:
82     SdrDragShear(SdrDragView& rNewView,bool bSlant1);
83 
84     virtual OUString GetSdrDragComment() const override;
85     virtual bool BeginSdrDrag() override;
86     virtual void MoveSdrDrag(const Point& rPnt) override;
87     virtual bool EndSdrDrag(bool bCopy) override;
88     virtual PointerStyle GetSdrDragPointer() const override;
89 
90     virtual basegfx::B2DHomMatrix getCurrentTransformation() override;
91     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
92 };
93 
94 class SdrDragMirror : public SdrDragMethod
95 {
96 private:
97     Point                       aDif;
98     long                        nAngle;
99     bool                        bMirrored;
100     bool                        bSide0;
101 
102     bool ImpCheckSide(const Point& rPnt) const;
103 
104 public:
105     explicit SdrDragMirror(SdrDragView& rNewView);
106 
107     virtual OUString GetSdrDragComment() const override;
108     virtual bool BeginSdrDrag() override;
109     virtual void MoveSdrDrag(const Point& rPnt) override;
110     virtual bool EndSdrDrag(bool bCopy) override;
111     virtual PointerStyle GetSdrDragPointer() const override;
112 
113     virtual basegfx::B2DHomMatrix getCurrentTransformation() override;
114     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
115 };
116 
117 class SdrDragGradient : public SdrDragMethod
118 {
119 private:
120     // Handles to work on
121     SdrHdlGradient*             pIAOHandle;
122 
123     // is this for gradient (or for transparency)?
124     bool const                  bIsGradient : 1;
125 
126 public:
127     SdrDragGradient(SdrDragView& rNewView, bool bGrad = true);
128 
IsGradient() const129     bool IsGradient() const { return bIsGradient; }
130 
131     virtual OUString GetSdrDragComment() const override;
132     virtual bool BeginSdrDrag() override;
133     virtual void MoveSdrDrag(const Point& rPnt) override;
134     virtual bool EndSdrDrag(bool bCopy) override;
135     virtual PointerStyle GetSdrDragPointer() const override;
136     virtual void CancelSdrDrag() override;
137 };
138 
139 class SdrDragCrook : public SdrDragMethod
140 {
141 private:
142     tools::Rectangle                   aMarkRect;
143     Point                       aMarkCenter;
144     Point                       aCenter;
145     Point                       aStart;
146     Fraction                    aFact;
147     Point                       aRad;
148     bool                        bContortionAllowed;
149     bool                        bNoContortionAllowed;
150     bool                        bContortion;
151     bool                        bResizeAllowed;
152     bool                        bResize;
153     bool                        bRotateAllowed;
154     bool                        bRotate;
155     bool                        bVertical;
156     bool                        bValid;
157     bool                        bLft;
158     bool                        bRgt;
159     bool                        bUpr;
160     bool                        bLwr;
161     bool                        bAtCenter;
162     long                        nAngle;
163     long                        nMarkSize;
164     SdrCrookMode                eMode;
165 
166     // helpers for applyCurrentTransformationToPolyPolygon
167     void MovAllPoints(basegfx::B2DPolyPolygon& rTarget);
168     void MovCrookPoint(Point& rPnt, Point* pC1, Point* pC2);
169 
170 protected:
171     // needs to add drag geometry to the default
172     virtual void createSdrDragEntries() override;
173 
174 public:
175     explicit SdrDragCrook(SdrDragView& rNewView);
176 
177     virtual OUString GetSdrDragComment() const override;
178     virtual bool BeginSdrDrag() override;
179     virtual void MoveSdrDrag(const Point& rPnt) override;
180     virtual bool EndSdrDrag(bool bCopy) override;
181     virtual PointerStyle GetSdrDragPointer() const override;
182 
183     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
184     virtual void applyCurrentTransformationToPolyPolygon(basegfx::B2DPolyPolygon& rTarget) override;
185 };
186 
187 class SdrDragDistort : public SdrDragMethod
188 {
189 private:
190     tools::Rectangle                   aMarkRect;
191     XPolygon                    aDistortedRect;
192     sal_uInt16                  nPolyPt;
193     bool                        bContortionAllowed;
194     bool                        bNoContortionAllowed;
195     bool                        bContortion;
196 
197     // helper for applyCurrentTransformationToPolyPolygon
198     void MovAllPoints(basegfx::B2DPolyPolygon& rTarget);
199 
200 protected:
201     // needs to add drag geometry to the default
202     virtual void createSdrDragEntries() override;
203 
204 public:
205     explicit SdrDragDistort(SdrDragView& rNewView);
206 
207     virtual OUString GetSdrDragComment() const override;
208     virtual bool BeginSdrDrag() override;
209     virtual void MoveSdrDrag(const Point& rPnt) override;
210     virtual bool EndSdrDrag(bool bCopy) override;
211     virtual PointerStyle GetSdrDragPointer() const override;
212 
213     virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
214     virtual void applyCurrentTransformationToPolyPolygon(basegfx::B2DPolyPolygon& rTarget) override;
215 };
216 
217 // derive from SdrDragObjOwn to have handles aligned to object when it
218 // is sheared or rotated
219 class SdrDragCrop : public SdrDragObjOwn
220 {
221 public:
222     explicit SdrDragCrop(SdrDragView& rNewView);
223 
224     virtual OUString GetSdrDragComment() const override;
225     virtual bool BeginSdrDrag() override;
226     virtual bool EndSdrDrag(bool bCopy) override;
227     virtual PointerStyle GetSdrDragPointer() const override;
228 };
229 
230 #endif // INCLUDED_SVX_SOURCE_SVDRAW_SVDDRGM1_HXX
231 
232 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
233