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 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 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 65 void SdrDragStat::Reset(const Point& rPnt) 66 { 67 Reset(); 68 Start()=rPnt; 69 aPos0=rPnt; 70 aRealPos0=rPnt; 71 RealNow()=rPnt; 72 } 73 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 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 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 101 Point SdrDragStat::KorregPos(const Point& rNow, const Point& /*rPrev*/) const 102 { 103 Point aRet(rNow); 104 return aRet; 105 } 106 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 118 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 127 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 136 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