blob: 148e766a71ba7538e150f2e8aa6c9c501829c98e [file] [log] [blame]
/**************************************************************
*
* 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/svdhlpln.hxx>
#include <tools/color.hxx>
#include <vcl/outdev.hxx>
#include <vcl/window.hxx>
#include <tools/poly.hxx>
#include <vcl/lineinfo.hxx>
////////////////////////////////////////////////////////////////////////////////////////////////////
Pointer SdrHelpLine::GetPointer() const
{
switch (eKind) {
case SDRHELPLINE_VERTICAL : return Pointer(POINTER_ESIZE);
case SDRHELPLINE_HORIZONTAL: return Pointer(POINTER_SSIZE);
default : return Pointer(POINTER_MOVE);
} // switch
}
FASTBOOL SdrHelpLine::IsHit(const Point& rPnt, sal_uInt16 nTolLog, const OutputDevice& rOut) const
{
Size a1Pix(rOut.PixelToLogic(Size(1,1)));
FASTBOOL bXHit=rPnt.X()>=aPos.X()-nTolLog && rPnt.X()<=aPos.X()+nTolLog+a1Pix.Width();
FASTBOOL bYHit=rPnt.Y()>=aPos.Y()-nTolLog && rPnt.Y()<=aPos.Y()+nTolLog+a1Pix.Height();
switch (eKind) {
case SDRHELPLINE_VERTICAL : return bXHit;
case SDRHELPLINE_HORIZONTAL: return bYHit;
case SDRHELPLINE_POINT: {
if (bXHit || bYHit) {
Size aRad(rOut.PixelToLogic(Size(SDRHELPLINE_POINT_PIXELSIZE,SDRHELPLINE_POINT_PIXELSIZE)));
return rPnt.X()>=aPos.X()-aRad.Width() && rPnt.X()<=aPos.X()+aRad.Width()+a1Pix.Width() &&
rPnt.Y()>=aPos.Y()-aRad.Height() && rPnt.Y()<=aPos.Y()+aRad.Height()+a1Pix.Height();
}
} break;
} // switch
return sal_False;
}
Rectangle SdrHelpLine::GetBoundRect(const OutputDevice& rOut) const
{
Rectangle aRet(aPos,aPos);
Point aOfs(rOut.GetMapMode().GetOrigin());
Size aSiz(rOut.GetOutputSize());
switch (eKind) {
case SDRHELPLINE_VERTICAL : aRet.Top()=-aOfs.Y(); aRet.Bottom()=-aOfs.Y()+aSiz.Height(); break;
case SDRHELPLINE_HORIZONTAL: aRet.Left()=-aOfs.X(); aRet.Right()=-aOfs.X()+aSiz.Width(); break;
case SDRHELPLINE_POINT : {
Size aRad(rOut.PixelToLogic(Size(SDRHELPLINE_POINT_PIXELSIZE,SDRHELPLINE_POINT_PIXELSIZE)));
aRet.Left() -=aRad.Width();
aRet.Right() +=aRad.Width();
aRet.Top() -=aRad.Height();
aRet.Bottom()+=aRad.Height();
} break;
} // switch
return aRet;
}
bool SdrHelpLine::IsVisibleEqual( const SdrHelpLine& rHelpLine, const OutputDevice& rOut ) const
{
if( eKind == rHelpLine.eKind)
{
Point aPt1(rOut.LogicToPixel(aPos)), aPt2(rOut.LogicToPixel(rHelpLine.aPos));
switch( eKind )
{
case SDRHELPLINE_POINT:
return aPt1 == aPt2;
case SDRHELPLINE_VERTICAL:
return aPt1.X() == aPt2.X();
case SDRHELPLINE_HORIZONTAL:
return aPt1.Y() == aPt2.Y();
}
}
return false;
}
void SdrHelpLineList::Clear()
{
sal_uInt16 nAnz=GetCount();
for (sal_uInt16 i=0; i<nAnz; i++) {
delete GetObject(i);
}
aList.Clear();
}
void SdrHelpLineList::operator=(const SdrHelpLineList& rSrcList)
{
Clear();
sal_uInt16 nAnz=rSrcList.GetCount();
for (sal_uInt16 i=0; i<nAnz; i++) {
Insert(rSrcList[i]);
}
}
bool SdrHelpLineList::operator==(const SdrHelpLineList& rSrcList) const
{
FASTBOOL bEqual=sal_False;
sal_uInt16 nAnz=GetCount();
if (nAnz==rSrcList.GetCount()) {
bEqual=sal_True;
for (sal_uInt16 i=0; i<nAnz && bEqual; i++) {
if (*GetObject(i)!=*rSrcList.GetObject(i)) {
bEqual=sal_False;
}
}
}
return bEqual;
}
sal_uInt16 SdrHelpLineList::HitTest(const Point& rPnt, sal_uInt16 nTolLog, const OutputDevice& rOut) const
{
sal_uInt16 nAnz=GetCount();
for (sal_uInt16 i=nAnz; i>0;) {
i--;
if (GetObject(i)->IsHit(rPnt,nTolLog,rOut)) return i;
}
return SDRHELPLINE_NOTFOUND;
}
// eof