| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_svx.hxx" |
| #include <svx/svdview.hxx> |
| #include <svx/svddrag.hxx> |
| |
| void SdrDragStat::Clear(FASTBOOL bLeaveOne) |
| { |
| void* pP=aPnts.First(); |
| while (pP!=NULL) { |
| delete (Point*)pP; |
| pP=aPnts.Next(); |
| } |
| if (pUser!=NULL) delete pUser; |
| pUser=NULL; |
| aPnts.Clear(); |
| if (bLeaveOne) { |
| aPnts.Insert(new Point,CONTAINER_APPEND); |
| } |
| } |
| |
| void SdrDragStat::Reset() |
| { |
| pView=NULL; |
| pPageView=NULL; |
| bShown=sal_False; |
| nMinMov=1; |
| bMinMoved=sal_False; |
| bHorFixed=sal_False; |
| bVerFixed=sal_False; |
| bWantNoSnap=sal_False; |
| pHdl=NULL; |
| bOrtho4=sal_False; |
| bOrtho8=sal_False; |
| pDragMethod=NULL; |
| bEndDragChangesAttributes=sal_False; |
| bEndDragChangesGeoAndAttributes=sal_False; |
| bMouseIsUp=sal_False; |
| Clear(sal_True); |
| aActionRect=Rectangle(); |
| } |
| |
| void SdrDragStat::Reset(const Point& rPnt) |
| { |
| Reset(); |
| Start()=rPnt; |
| aPos0=rPnt; |
| aRealPos0=rPnt; |
| RealNow()=rPnt; |
| } |
| |
| void SdrDragStat::NextMove(const Point& rPnt) |
| { |
| aRealPos0=GetRealNow(); |
| aPos0=GetNow(); |
| RealNow()=rPnt; |
| Point aBla=KorregPos(GetRealNow(),GetPrev()); |
| Now()=aBla; |
| } |
| |
| void SdrDragStat::NextPoint(FASTBOOL bSaveReal) |
| { |
| Point aPnt(GetNow()); |
| if (bSaveReal) aPnt=aRealNow; |
| aPnts.Insert(new Point(KorregPos(GetRealNow(),aPnt)),CONTAINER_APPEND); |
| Prev()=aPnt; |
| } |
| |
| void SdrDragStat::PrevPoint() |
| { |
| if (aPnts.Count()>=2) { // einer muss immer da bleiben |
| Point* pPnt=(Point*)(aPnts.GetObject(aPnts.Count()-2)); |
| aPnts.Remove(aPnts.Count()-2); |
| delete pPnt; |
| Now()=KorregPos(GetRealNow(),GetPrev()); |
| } |
| } |
| |
| Point SdrDragStat::KorregPos(const Point& rNow, const Point& /*rPrev*/) const |
| { |
| Point aRet(rNow); |
| return aRet; |
| } |
| |
| FASTBOOL SdrDragStat::CheckMinMoved(const Point& rPnt) |
| { |
| if (!bMinMoved) { |
| long dx=rPnt.X()-GetPrev().X(); if (dx<0) dx=-dx; |
| long dy=rPnt.Y()-GetPrev().Y(); if (dy<0) dy=-dy; |
| if (dx>=long(nMinMov) || dy>=long(nMinMov)) |
| bMinMoved=sal_True; |
| } |
| return bMinMoved; |
| } |
| |
| Fraction SdrDragStat::GetXFact() const |
| { |
| long nMul=GetNow().X()-aRef1.X(); |
| long nDiv=GetPrev().X()-aRef1.X(); |
| if (nDiv==0) nDiv=1; |
| if (bHorFixed) { nMul=1; nDiv=1; } |
| return Fraction(nMul,nDiv); |
| } |
| |
| Fraction SdrDragStat::GetYFact() const |
| { |
| long nMul=GetNow().Y()-aRef1.Y(); |
| long nDiv=GetPrev().Y()-aRef1.Y(); |
| if (nDiv==0) nDiv=1; |
| if (bVerFixed) { nMul=1; nDiv=1; } |
| return Fraction(nMul,nDiv); |
| } |
| |
| void SdrDragStat::TakeCreateRect(Rectangle& rRect) const |
| { |
| rRect=Rectangle(GetStart(),GetNow()); |
| if (GetPointAnz()>=2) { |
| Point aBtmRgt(GetPoint(1)); |
| rRect.Right()=aBtmRgt.X(); |
| rRect.Bottom()=aBtmRgt.Y(); |
| } |
| if (pView!=NULL && pView->IsCreate1stPointAsCenter()) { |
| rRect.Top()+=rRect.Top()-rRect.Bottom(); |
| rRect.Left()+=rRect.Left()-rRect.Right(); |
| } |
| } |
| |