diff options
Diffstat (limited to 'svx/inc/svx/svdhlpln.hxx')
-rw-r--r-- | svx/inc/svx/svdhlpln.hxx | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/svx/inc/svx/svdhlpln.hxx b/svx/inc/svx/svdhlpln.hxx new file mode 100644 index 000000000000..1d5677ec95f6 --- /dev/null +++ b/svx/inc/svx/svdhlpln.hxx @@ -0,0 +1,107 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * 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. + * + ************************************************************************/ + +#ifndef _SVDHLPLN_HXX +#define _SVDHLPLN_HXX + +#include <sal/types.h> +#include <tools/color.hxx> +#include <tools/gen.hxx> + +#ifndef _POINTR_HXX //autogen +#include <vcl/pointr.hxx> +#endif +#include <tools/contnr.hxx> +#include "svx/svxdllapi.h" + +class OutputDevice; +//////////////////////////////////////////////////////////////////////////////////////////////////// + +enum SdrHelpLineKind {SDRHELPLINE_POINT,SDRHELPLINE_VERTICAL,SDRHELPLINE_HORIZONTAL}; +#define SDRHELPLINE_MIN SDRHELPLINE_POINT +#define SDRHELPLINE_MAX SDRHELPLINE_HORIZONTAL + +#define SDRHELPLINE_POINT_PIXELSIZE 15 /* Tatsaechliche Groesse= PIXELSIZE*2+1 */ + +class SdrHelpLine { + Point aPos; // je nach Wert von eKind ist X oder Y evtl. belanglos + SdrHelpLineKind eKind; + + // #i27493# + // Helper method to draw a hor or ver two-colored dashed line + void ImpDrawDashedTwoColorLine(OutputDevice& rOut, sal_Int32 nStart, sal_Int32 nEnd, sal_Int32 nFixPos, + sal_Int32 nStepWidth, Color aColA, Color aColB, sal_Bool bHorizontal) const; + +public: + SdrHelpLine(SdrHelpLineKind eNewKind=SDRHELPLINE_POINT): eKind(eNewKind) {} + SdrHelpLine(SdrHelpLineKind eNewKind, const Point& rNewPos): aPos(rNewPos), eKind(eNewKind) {} + bool operator==(const SdrHelpLine& rCmp) const { return aPos==rCmp.aPos && eKind==rCmp.eKind; } + bool operator!=(const SdrHelpLine& rCmp) const { return !operator==(rCmp); } + + void SetKind(SdrHelpLineKind eNewKind) { eKind=eNewKind; } + SdrHelpLineKind GetKind() const { return eKind; } + void SetPos(const Point& rPnt) { aPos=rPnt; } + const Point& GetPos() const { return aPos; } + + Pointer GetPointer() const; + FASTBOOL IsHit(const Point& rPnt, USHORT nTolLog, const OutputDevice& rOut) const; + // OutputDevice wird benoetigt, da Fangpunkte eine feste Pixelgroesse haben + Rectangle GetBoundRect(const OutputDevice& rOut) const; + + /* returns true if this and the given help line would be rendered at the same pixel position + of the given OutputDevice. This can be used to avoid drawing multiple help lines with xor + on same position which could render them invisible */ + bool IsVisibleEqual( const SdrHelpLine& rHelpLine, const OutputDevice& rOut ) const; +}; + +#define SDRHELPLINE_NOTFOUND 0xFFFF + +class SVX_DLLPUBLIC SdrHelpLineList { + Container aList; +protected: + SdrHelpLine* GetObject(USHORT i) const { return (SdrHelpLine*)(aList.GetObject(i)); } +public: + SdrHelpLineList(): aList(1024,4,4) {} + SdrHelpLineList(const SdrHelpLineList& rSrcList): aList(1024,4,4) { *this=rSrcList; } + ~SdrHelpLineList() { Clear(); } + void Clear(); + void operator=(const SdrHelpLineList& rSrcList); + bool operator==(const SdrHelpLineList& rCmp) const; + bool operator!=(const SdrHelpLineList& rCmp) const { return !operator==(rCmp); } + USHORT GetCount() const { return USHORT(aList.Count()); } + void Insert(const SdrHelpLine& rHL, USHORT nPos=0xFFFF) { aList.Insert(new SdrHelpLine(rHL),nPos); } + void Delete(USHORT nPos) { delete (SdrHelpLine*)aList.Remove(nPos); } // #i24900# + void Move(USHORT nPos, USHORT nNewPos) { aList.Insert(aList.Remove(nPos),nNewPos); } + SdrHelpLine& operator[](USHORT nPos) { return *GetObject(nPos); } + const SdrHelpLine& operator[](USHORT nPos) const { return *GetObject(nPos); } + USHORT HitTest(const Point& rPnt, USHORT nTolLog, const OutputDevice& rOut) const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDHLPLN_HXX + |