| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _SVDGLUE_HXX |
| #define _SVDGLUE_HXX |
| |
| class Window; |
| class OutputDevice; |
| class SvStream; |
| class SdrObject; |
| |
| #include <tools/contnr.hxx> |
| #include <tools/gen.hxx> |
| #include "svx/svxdllapi.h" |
| |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| #define SDRESC_SMART 0x0000 |
| #define SDRESC_LEFT 0x0001 |
| #define SDRESC_RIGHT 0x0002 |
| #define SDRESC_TOP 0x0004 |
| #define SDRESC_BOTTOM 0x0008 |
| #define SDRESC_LO 0x0010 /* ni */ |
| #define SDRESC_LU 0x0020 /* ni */ |
| #define SDRESC_RO 0x0040 /* ni */ |
| #define SDRESC_RU 0x0080 /* ni */ |
| #define SDRESC_HORZ (SDRESC_LEFT|SDRESC_RIGHT) |
| #define SDRESC_VERT (SDRESC_TOP|SDRESC_BOTTOM) |
| #define SDRESC_ALL 0x00FF |
| |
| #define SDRHORZALIGN_CENTER 0x0000 |
| #define SDRHORZALIGN_LEFT 0x0001 |
| #define SDRHORZALIGN_RIGHT 0x0002 |
| #define SDRHORZALIGN_DONTCARE 0x0010 |
| #define SDRVERTALIGN_CENTER 0x0000 |
| #define SDRVERTALIGN_TOP 0x0100 |
| #define SDRVERTALIGN_BOTTOM 0x0200 |
| #define SDRVERTALIGN_DONTCARE 0x1000 |
| |
| class SVX_DLLPUBLIC SdrGluePoint { |
| // Bezugspunkt ist SdrObject::GetSnapRect().Center() |
| // bNoPercent=FALSE: Position ist -5000..5000 (1/100)% bzw. 0..10000 (je nach Align) |
| // bNoPercent=sal_True : Position ist in log Einh, rel zum Bezugspunkt |
| Point aPos; |
| sal_uInt16 nEscDir; |
| sal_uInt16 nId; |
| sal_uInt16 nAlign; |
| FASTBOOL bNoPercent:1; |
| FASTBOOL bReallyAbsolute:1; // Temporaer zu setzen fuer Transformationen am Bezugsobjekt |
| FASTBOOL bUserDefined:1; // #i38892# |
| public: |
| SdrGluePoint(): nEscDir(SDRESC_SMART),nId(0),nAlign(0) { bNoPercent=sal_False; bReallyAbsolute=sal_False; bUserDefined=sal_True; } |
| SdrGluePoint(const Point& rNewPos, FASTBOOL bNewPercent=sal_True, sal_uInt16 nNewAlign=0): aPos(rNewPos),nEscDir(SDRESC_SMART),nId(0),nAlign(nNewAlign) { bNoPercent=!bNewPercent; bReallyAbsolute=sal_False; bUserDefined=sal_True; } |
| bool operator==(const SdrGluePoint& rCmpGP) const { return aPos==rCmpGP.aPos && nEscDir==rCmpGP.nEscDir && nId==rCmpGP.nId && nAlign==rCmpGP.nAlign && bNoPercent==rCmpGP.bNoPercent && bReallyAbsolute==rCmpGP.bReallyAbsolute && bUserDefined==rCmpGP.bUserDefined; } |
| bool operator!=(const SdrGluePoint& rCmpGP) const { return !operator==(rCmpGP); } |
| const Point& GetPos() const { return aPos; } |
| void SetPos(const Point& rNewPos) { aPos=rNewPos; } |
| sal_uInt16 GetEscDir() const { return nEscDir; } |
| void SetEscDir(sal_uInt16 nNewEsc) { nEscDir=nNewEsc; } |
| sal_uInt16 GetId() const { return nId; } |
| void SetId(sal_uInt16 nNewId) { nId=nNewId; } |
| bool IsPercent() const { return !bNoPercent; } |
| void SetPercent(FASTBOOL bOn) { bNoPercent=!bOn; } |
| // Temporaer zu setzen fuer Transformationen am Bezugsobjekt |
| FASTBOOL IsReallyAbsolute() const { return bReallyAbsolute; } |
| void SetReallyAbsolute(FASTBOOL bOn, const SdrObject& rObj); |
| |
| // #i38892# |
| FASTBOOL IsUserDefined() const { return bUserDefined; } |
| void SetUserDefined(FASTBOOL bNew) { bUserDefined = bNew; } |
| |
| sal_uInt16 GetAlign() const { return nAlign; } |
| void SetAlign(sal_uInt16 nAlg) { nAlign=nAlg; } |
| sal_uInt16 GetHorzAlign() const { return nAlign&0x00FF; } |
| void SetHorzAlign(sal_uInt16 nAlg) { nAlign=(nAlign&0xFF00)|(nAlg&0x00FF); } |
| sal_uInt16 GetVertAlign() const { return nAlign&0xFF00; } |
| void SetVertAlign(sal_uInt16 nAlg) { nAlign=(nAlign&0x00FF)|(nAlg&0xFF00); } |
| void Draw(OutputDevice& rOut, const SdrObject* pObj) const; |
| FASTBOOL IsHit(const Point& rPnt, const OutputDevice& rOut, const SdrObject* pObj) const; |
| void Invalidate(Window& rWin, const SdrObject* pObj) const; |
| Point GetAbsolutePos(const SdrObject& rObj) const; |
| void SetAbsolutePos(const Point& rNewPos, const SdrObject& rObj); |
| long GetAlignAngle() const; |
| void SetAlignAngle(long nWink); |
| long EscDirToAngle(sal_uInt16 nEsc) const; |
| sal_uInt16 EscAngleToDir(long nWink) const; |
| void Rotate(const Point& rRef, long nWink, double sn, double cs, const SdrObject* pObj); |
| void Mirror(const Point& rRef1, const Point& rRef2, const SdrObject* pObj); |
| void Mirror(const Point& rRef1, const Point& rRef2, long nWink, const SdrObject* pObj); |
| void Shear (const Point& rRef, long nWink, double tn, FASTBOOL bVShear, const SdrObject* pObj); |
| }; |
| |
| #define SDRGLUEPOINT_NOTFOUND 0xFFFF |
| |
| class SVX_DLLPUBLIC SdrGluePointList { |
| Container aList; |
| protected: |
| SdrGluePoint* GetObject(sal_uInt16 i) const { return (SdrGluePoint*)(aList.GetObject(i)); } |
| public: |
| SdrGluePointList(): aList(1024,4,4) {} |
| SdrGluePointList(const SdrGluePointList& rSrcList): aList(1024,4,4) { *this=rSrcList; } |
| ~SdrGluePointList() { Clear(); } |
| void Clear(); |
| void operator=(const SdrGluePointList& rSrcList); |
| sal_uInt16 GetCount() const { return sal_uInt16(aList.Count()); } |
| // Beim Insert wird dem Objekt (also dem GluePoint) automatisch eine Id zugewiesen. |
| // ReturnCode ist der Index des neuen GluePoints in der Liste |
| sal_uInt16 Insert(const SdrGluePoint& rGP); |
| void Delete(sal_uInt16 nPos) { delete (SdrGluePoint*)aList.Remove(nPos); } |
| SdrGluePoint& operator[](sal_uInt16 nPos) { return *GetObject(nPos); } |
| const SdrGluePoint& operator[](sal_uInt16 nPos) const { return *GetObject(nPos); } |
| sal_uInt16 FindGluePoint(sal_uInt16 nId) const; |
| sal_uInt16 HitTest(const Point& rPnt, const OutputDevice& rOut, const SdrObject* pObj, FASTBOOL bBack=sal_False, FASTBOOL bNext=sal_False, sal_uInt16 nId0=0) const; |
| void Invalidate(Window& rWin, const SdrObject* pObj) const; |
| // Temporaer zu setzen fuer Transformationen am Bezugsobjekt |
| void SetReallyAbsolute(FASTBOOL bOn, const SdrObject& rObj); |
| void Rotate(const Point& rRef, long nWink, double sn, double cs, const SdrObject* pObj); |
| void Mirror(const Point& rRef1, const Point& rRef2, const SdrObject* pObj); |
| void Mirror(const Point& rRef1, const Point& rRef2, long nWink, const SdrObject* pObj); |
| void Shear (const Point& rRef, long nWink, double tn, FASTBOOL bVShear, const SdrObject* pObj); |
| }; |
| |
| |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| #endif //_SVDGLUE_HXX |
| |