office-gobmx/svx/source/svdraw/svdhlpln.cxx
Vladimir Glazounov 46b832f2b0 INTEGRATION: CWS aw033 (1.15.84); FILE MERGED
2008/05/27 14:50:01 aw 1.15.84.3: #i39532# changes DEV300 m12 resync corrections
2008/05/14 14:03:37 aw 1.15.84.2: RESYNC: (1.15-1.16); FILE MERGED
2008/01/22 12:29:31 aw 1.15.84.1: adaptions and 1st stripping
2008-08-19 22:21:10 +00:00

152 lines
5 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: svdhlpln.cxx,v $
* $Revision: 1.17 $
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 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, USHORT 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 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()
{
USHORT nAnz=GetCount();
for (USHORT i=0; i<nAnz; i++) {
delete GetObject(i);
}
aList.Clear();
}
void SdrHelpLineList::operator=(const SdrHelpLineList& rSrcList)
{
Clear();
USHORT nAnz=rSrcList.GetCount();
for (USHORT i=0; i<nAnz; i++) {
Insert(rSrcList[i]);
}
}
bool SdrHelpLineList::operator==(const SdrHelpLineList& rSrcList) const
{
FASTBOOL bEqual=FALSE;
USHORT nAnz=GetCount();
if (nAnz==rSrcList.GetCount()) {
bEqual=TRUE;
for (USHORT i=0; i<nAnz && bEqual; i++) {
if (*GetObject(i)!=*rSrcList.GetObject(i)) {
bEqual=FALSE;
}
}
}
return bEqual;
}
USHORT SdrHelpLineList::HitTest(const Point& rPnt, USHORT nTolLog, const OutputDevice& rOut) const
{
USHORT nAnz=GetCount();
for (USHORT i=nAnz; i>0;) {
i--;
if (GetObject(i)->IsHit(rPnt,nTolLog,rOut)) return i;
}
return SDRHELPLINE_NOTFOUND;
}
// eof