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 27 #include <svx/svdhlpln.hxx> 28 #include <tools/color.hxx> 29 30 #include <vcl/outdev.hxx> 31 #include <vcl/window.hxx> 32 #include <tools/poly.hxx> 33 #include <vcl/lineinfo.hxx> 34 35 //////////////////////////////////////////////////////////////////////////////////////////////////// 36 37 Pointer SdrHelpLine::GetPointer() const 38 { 39 switch (eKind) { 40 case SDRHELPLINE_VERTICAL : return Pointer(POINTER_ESIZE); 41 case SDRHELPLINE_HORIZONTAL: return Pointer(POINTER_SSIZE); 42 default : return Pointer(POINTER_MOVE); 43 } // switch 44 } 45 46 FASTBOOL SdrHelpLine::IsHit(const Point& rPnt, sal_uInt16 nTolLog, const OutputDevice& rOut) const 47 { 48 Size a1Pix(rOut.PixelToLogic(Size(1,1))); 49 FASTBOOL bXHit=rPnt.X()>=aPos.X()-nTolLog && rPnt.X()<=aPos.X()+nTolLog+a1Pix.Width(); 50 FASTBOOL bYHit=rPnt.Y()>=aPos.Y()-nTolLog && rPnt.Y()<=aPos.Y()+nTolLog+a1Pix.Height(); 51 switch (eKind) { 52 case SDRHELPLINE_VERTICAL : return bXHit; 53 case SDRHELPLINE_HORIZONTAL: return bYHit; 54 case SDRHELPLINE_POINT: { 55 if (bXHit || bYHit) { 56 Size aRad(rOut.PixelToLogic(Size(SDRHELPLINE_POINT_PIXELSIZE,SDRHELPLINE_POINT_PIXELSIZE))); 57 return rPnt.X()>=aPos.X()-aRad.Width() && rPnt.X()<=aPos.X()+aRad.Width()+a1Pix.Width() && 58 rPnt.Y()>=aPos.Y()-aRad.Height() && rPnt.Y()<=aPos.Y()+aRad.Height()+a1Pix.Height(); 59 } 60 } break; 61 } // switch 62 return sal_False; 63 } 64 65 Rectangle SdrHelpLine::GetBoundRect(const OutputDevice& rOut) const 66 { 67 Rectangle aRet(aPos,aPos); 68 Point aOfs(rOut.GetMapMode().GetOrigin()); 69 Size aSiz(rOut.GetOutputSize()); 70 switch (eKind) { 71 case SDRHELPLINE_VERTICAL : aRet.Top()=-aOfs.Y(); aRet.Bottom()=-aOfs.Y()+aSiz.Height(); break; 72 case SDRHELPLINE_HORIZONTAL: aRet.Left()=-aOfs.X(); aRet.Right()=-aOfs.X()+aSiz.Width(); break; 73 case SDRHELPLINE_POINT : { 74 Size aRad(rOut.PixelToLogic(Size(SDRHELPLINE_POINT_PIXELSIZE,SDRHELPLINE_POINT_PIXELSIZE))); 75 aRet.Left() -=aRad.Width(); 76 aRet.Right() +=aRad.Width(); 77 aRet.Top() -=aRad.Height(); 78 aRet.Bottom()+=aRad.Height(); 79 } break; 80 } // switch 81 return aRet; 82 } 83 84 bool SdrHelpLine::IsVisibleEqual( const SdrHelpLine& rHelpLine, const OutputDevice& rOut ) const 85 { 86 if( eKind == rHelpLine.eKind) 87 { 88 Point aPt1(rOut.LogicToPixel(aPos)), aPt2(rOut.LogicToPixel(rHelpLine.aPos)); 89 switch( eKind ) 90 { 91 case SDRHELPLINE_POINT: 92 return aPt1 == aPt2; 93 case SDRHELPLINE_VERTICAL: 94 return aPt1.X() == aPt2.X(); 95 case SDRHELPLINE_HORIZONTAL: 96 return aPt1.Y() == aPt2.Y(); 97 } 98 } 99 return false; 100 } 101 102 void SdrHelpLineList::Clear() 103 { 104 sal_uInt16 nAnz=GetCount(); 105 for (sal_uInt16 i=0; i<nAnz; i++) { 106 delete GetObject(i); 107 } 108 aList.Clear(); 109 } 110 111 void SdrHelpLineList::operator=(const SdrHelpLineList& rSrcList) 112 { 113 Clear(); 114 sal_uInt16 nAnz=rSrcList.GetCount(); 115 for (sal_uInt16 i=0; i<nAnz; i++) { 116 Insert(rSrcList[i]); 117 } 118 } 119 120 bool SdrHelpLineList::operator==(const SdrHelpLineList& rSrcList) const 121 { 122 FASTBOOL bEqual=sal_False; 123 sal_uInt16 nAnz=GetCount(); 124 if (nAnz==rSrcList.GetCount()) { 125 bEqual=sal_True; 126 for (sal_uInt16 i=0; i<nAnz && bEqual; i++) { 127 if (*GetObject(i)!=*rSrcList.GetObject(i)) { 128 bEqual=sal_False; 129 } 130 } 131 } 132 return bEqual; 133 } 134 135 sal_uInt16 SdrHelpLineList::HitTest(const Point& rPnt, sal_uInt16 nTolLog, const OutputDevice& rOut) const 136 { 137 sal_uInt16 nAnz=GetCount(); 138 for (sal_uInt16 i=nAnz; i>0;) { 139 i--; 140 if (GetObject(i)->IsHit(rPnt,nTolLog,rOut)) return i; 141 } 142 return SDRHELPLINE_NOTFOUND; 143 } 144 145 // eof 146