xref: /AOO41X/main/svx/source/svdraw/svddrag.cxx (revision f6e50924346d0b8c0b07c91832a97665dd718b0c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svx.hxx"
26 #include <svx/svdview.hxx>
27 #include <svx/svddrag.hxx>
28 
Clear(FASTBOOL bLeaveOne)29 void SdrDragStat::Clear(FASTBOOL bLeaveOne)
30 {
31     void* pP=aPnts.First();
32     while (pP!=NULL) {
33         delete (Point*)pP;
34         pP=aPnts.Next();
35     }
36     if (pUser!=NULL) delete pUser;
37     pUser=NULL;
38     aPnts.Clear();
39     if (bLeaveOne) {
40         aPnts.Insert(new Point,CONTAINER_APPEND);
41     }
42 }
43 
Reset()44 void SdrDragStat::Reset()
45 {
46     pView=NULL;
47     pPageView=NULL;
48     bShown=sal_False;
49     nMinMov=1;
50     bMinMoved=sal_False;
51     bHorFixed=sal_False;
52     bVerFixed=sal_False;
53     bWantNoSnap=sal_False;
54     pHdl=NULL;
55     bOrtho4=sal_False;
56     bOrtho8=sal_False;
57     pDragMethod=NULL;
58     bEndDragChangesAttributes=sal_False;
59     bEndDragChangesGeoAndAttributes=sal_False;
60     bMouseIsUp=sal_False;
61     Clear(sal_True);
62     aActionRect=Rectangle();
63 }
64 
Reset(const Point & rPnt)65 void SdrDragStat::Reset(const Point& rPnt)
66 {
67     Reset();
68     Start()=rPnt;
69     aPos0=rPnt;
70     aRealPos0=rPnt;
71     RealNow()=rPnt;
72 }
73 
NextMove(const Point & rPnt)74 void SdrDragStat::NextMove(const Point& rPnt)
75 {
76     aRealPos0=GetRealNow();
77     aPos0=GetNow();
78     RealNow()=rPnt;
79     Point aBla=KorregPos(GetRealNow(),GetPrev());
80     Now()=aBla;
81 }
82 
NextPoint(FASTBOOL bSaveReal)83 void SdrDragStat::NextPoint(FASTBOOL bSaveReal)
84 {
85     Point aPnt(GetNow());
86     if (bSaveReal) aPnt=aRealNow;
87     aPnts.Insert(new Point(KorregPos(GetRealNow(),aPnt)),CONTAINER_APPEND);
88     Prev()=aPnt;
89 }
90 
PrevPoint()91 void SdrDragStat::PrevPoint()
92 {
93     if (aPnts.Count()>=2) { // einer muss immer da bleiben
94         Point* pPnt=(Point*)(aPnts.GetObject(aPnts.Count()-2));
95         aPnts.Remove(aPnts.Count()-2);
96         delete pPnt;
97         Now()=KorregPos(GetRealNow(),GetPrev());
98     }
99 }
100 
KorregPos(const Point & rNow,const Point &) const101 Point SdrDragStat::KorregPos(const Point& rNow, const Point& /*rPrev*/) const
102 {
103     Point aRet(rNow);
104     return aRet;
105 }
106 
CheckMinMoved(const Point & rPnt)107 FASTBOOL SdrDragStat::CheckMinMoved(const Point& rPnt)
108 {
109     if (!bMinMoved) {
110         long dx=rPnt.X()-GetPrev().X(); if (dx<0) dx=-dx;
111         long dy=rPnt.Y()-GetPrev().Y(); if (dy<0) dy=-dy;
112         if (dx>=long(nMinMov) || dy>=long(nMinMov))
113             bMinMoved=sal_True;
114     }
115     return bMinMoved;
116 }
117 
GetXFact() const118 Fraction SdrDragStat::GetXFact() const
119 {
120     long nMul=GetNow().X()-aRef1.X();
121     long nDiv=GetPrev().X()-aRef1.X();
122     if (nDiv==0) nDiv=1;
123     if (bHorFixed) { nMul=1; nDiv=1; }
124     return Fraction(nMul,nDiv);
125 }
126 
GetYFact() const127 Fraction SdrDragStat::GetYFact() const
128 {
129     long nMul=GetNow().Y()-aRef1.Y();
130     long nDiv=GetPrev().Y()-aRef1.Y();
131     if (nDiv==0) nDiv=1;
132     if (bVerFixed) { nMul=1; nDiv=1; }
133     return Fraction(nMul,nDiv);
134 }
135 
TakeCreateRect(Rectangle & rRect) const136 void SdrDragStat::TakeCreateRect(Rectangle& rRect) const
137 {
138     rRect=Rectangle(GetStart(),GetNow());
139     if (GetPointAnz()>=2) {
140         Point aBtmRgt(GetPoint(1));
141         rRect.Right()=aBtmRgt.X();
142         rRect.Bottom()=aBtmRgt.Y();
143     }
144     if (pView!=NULL && pView->IsCreate1stPointAsCenter()) {
145         rRect.Top()+=rRect.Top()-rRect.Bottom();
146         rRect.Left()+=rRect.Left()-rRect.Right();
147     }
148 }
149 
150