41 #define SCALEPOINT(aPT,aFracX,aFracY) (aPT).setX(tools::Long((aPT).X()*aFracX)); \
42 (aPT).setY(tools::Long((aPT).Y()*aFracY));
55 const OUString& rTarget,
const OUString& rName,
bool bURLActive )
57 , aAltText( rAltText )
61 , bActive( bURLActive )
69 const rtl_TextEncoding eEncoding = osl_getThreadTextEncoding();
82 IMapCompat aCompat( rOStm, StreamMode::WRITE );
98 rtl_TextEncoding nTextEncoding;
111 IMapCompat aCompat( rIStm, StreamMode::READ );
137 const OUString& rURL,
138 const OUString& rAltText,
139 const OUString& rDesc,
140 const OUString& rTarget,
141 const OUString& rName,
143 bool bPixelCoords ) :
144 IMapObject ( rURL, rAltText, rDesc, rTarget, rName, bURLActive )
239 const OUString& rURL,
240 const OUString& rAltText,
241 const OUString& rDesc,
242 const OUString& rTarget,
243 const OUString& rName,
245 bool bPixelCoords ) :
246 IMapObject ( rURL, rAltText, rDesc, rTarget, rName, bURLActive )
255 MapMode aMap100( MapUnit::Map100thMM );
324 if ( static_cast<sal_Int32>(sqrt( static_cast<double>(aPoint.X()) * aPoint.X() +
325 aPoint.Y() * aPoint.Y() )) <=
nRadius )
383 const OUString& rURL,
384 const OUString& rAltText,
385 const OUString& rDesc,
386 const OUString& rTarget,
387 const OUString& rName,
389 bool bPixelCoords ) :
390 IMapObject ( rURL, rAltText, rDesc, rTarget, rName, bURLActive ),
489 for ( sal_uInt16
i = 0;
i < nCount;
i++ )
498 aPoly[ i ] = aScaledPt;
524 const sal_uInt16 nEqCount = rEqPoly.
GetSize();
526 if ( nCount == nEqCount )
528 bool bDifferent =
false;
530 for ( sal_uInt16
i = 0;
i < nCount;
i++ )
532 if (
aPoly[
i ] != rEqPoly[
i ] )
570 for (
size_t i = 0;
i < nCount;
i++ )
630 if (
this != &rImageMap)
636 for (
size_t i = 0;
i < nCount;
i++ )
677 if ( nCount == nEqCount )
679 bool bDifferent = (
aName != rImageMap.
aName );
681 for (
size_t i = 0; (
i < nCount ) && !bDifferent;
i++ )
692 if ( ! static_cast<IMapRectangleObject*>(pObj)->IsEqual( *static_cast<IMapRectangleObject*>(pEqObj) ) )
699 if ( ! static_cast<IMapCircleObject*>(pObj)->IsEqual( *static_cast<IMapCircleObject*>(pEqObj) ) )
706 if ( ! static_cast<IMapPolygonObject*>(pObj)->IsEqual( *static_cast<IMapPolygonObject*>(pEqObj) ) )
735 return !( *
this == rImageMap );
747 switch( rIMapObject.
GetType() )
768 maList.emplace_back( std::move(pNewObject) );
778 const Size& rDisplaySize,
779 const Point& rRelHitPoint,
782 Point aRelPoint( rTotalSize.
Width() * rRelHitPoint.X() / rDisplaySize.
Width(),
783 rTotalSize.
Height() * rRelHitPoint.Y() / rDisplaySize.
Height() );
789 aRelPoint.setX( rTotalSize.
Width() - aRelPoint.X() );
792 aRelPoint.setY( rTotalSize.
Height() - aRelPoint.Y() );
798 if (
i->IsHit( aRelPoint ) ) {
804 return( pObj ? ( pObj->
IsActive() ? pObj : nullptr ) :
nullptr );
811 for (
size_t i = 0;
i < nCount;
i++ )
846 for (
size_t i = 0;
i < nCount;
i++ )
849 pObj->Write( rOStm );
862 const size_t nMinRecordSize = 12;
863 const size_t nMaxRecords = rIStm.
remainingSize() / nMinRecordSize;
865 if (nCount > nMaxRecords)
867 SAL_WARN(
"svtools.misc",
"Parsing error: " << nMaxRecords <<
" max possible entries, but " <<
868 nCount <<
" claimed, truncating");
869 nCount = nMaxRecords;
873 for (
size_t i = 0;
i < nCount; ++
i)
880 switch( static_cast<IMapObjectType>(nType) )
886 maList.emplace_back( pObj );
894 maList.emplace_back( pObj );
902 maList.emplace_back( pObj );
922 OUString aImageName(
GetName() );
925 const rtl_TextEncoding eEncoding = osl_getThreadTextEncoding();
927 rOStm.
SetEndian( SvStreamEndian::LITTLE );
937 pCompat =
new IMapCompat( rOStm, StreamMode::WRITE );
960 rIStm.
SetEndian( SvStreamEndian::LITTLE );
963 if ( !memcmp( cMagic,
IMAPMAGIC,
sizeof( cMagic ) ) )
979 pCompat =
new IMapCompat( rIStm, StreamMode::READ );
bool IsEqual(const IMapPolygonObject &rEqObj)
SvStream & WriteBool(bool b)
void Write(SvStream &rOStm) const
ImageMap & operator=(const ImageMap &rImageMap)
SvStream & WriteUInt16(sal_uInt16 nUInt16)
void ImpWriteImageMap(SvStream &rOStm) const
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
void InsertIMapObject(const IMapObject &rIMapObject)
void Scale(const Fraction &rFractX, const Fraction &rFracY)
#define IMAGE_MAP_VERSION
void ImpConstruct(const Point &rCenter, sal_uLong nRad, bool bPixel)
const OUString & GetName() const
VCL_DLLPRIVATE void ImpConstruct(const tools::Polygon &rPoly, bool bPixel)
virtual IMapObjectType GetType() const override
SvStream & ReadCharAsBool(bool &rBool)
VCL_DLLPRIVATE void ImpConstruct(const tools::Rectangle &rRect, bool bPixel)
SvStream & Write(SvStream &) const
virtual bool IsHit(const Point &rPoint) const override
tools::Rectangle GetRectangle(bool bPixelCoords=true) const
size_t GetIMapObjectCount() const
SVL_DLLPUBLIC OUString simpleNormalizedMakeRelative(OUString const &baseUriReference, OUString const &uriReference)
SvStream & WriteCharPtr(const char *pBuf)
sal_uInt64 SeekRel(sal_Int64 nPos)
void Write(SvStream &rOStm) const
std::vector< std::unique_ptr< IMapObject > > maList
static OutputDevice * GetDefaultDevice()
Get the default "device" (in this case the default window).
OString read_uInt16_lenPrefixed_uInt8s_ToOString(SvStream &rStrm)
Point GetCenter(bool bPixelCoords=true) const
bool operator!=(const ImageMap &rImageMap)
void Scale(const Fraction &rFractX, const Fraction &rFracY)
std::size_t write_uInt16_lenPrefixed_uInt8s_FromOUString(SvStream &rStrm, std::u16string_view rStr, rtl_TextEncoding eEnc)
bool IsEqual(const IMapCircleObject &rEqObj)
virtual bool IsHit(const Point &rPoint) const override
tools::Polygon GetPolygon(bool bPixelCoords=true) const
SvStream & WriteUInt32(sal_uInt32 nUInt32)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
sal_uInt64 remainingSize()
void SetExtraEllipse(const tools::Rectangle &rEllipse)
virtual bool IsHit(const Point &rPoint) const override
SvStream & ReadUInt32(sal_uInt32 &rUInt32)
virtual void WriteIMapObject(SvStream &rOStm) const override
OUString read_uInt16_lenPrefixed_uInt8s_ToOUString(SvStream &rStrm, rtl_TextEncoding eEnc)
bool IsEqual(const IMapRectangleObject &rEqObj)
void Read(SvStream &rIStm)
SVL_DLLPUBLIC Link< OUString *, bool > const & GetMaybeFileHdl()
virtual void ReadIMapObject(SvStream &rIStm)=0
virtual IMapObjectType GetType() const override
tools::Long Width() const
void Scale(const Fraction &rFractX, const Fraction &rFracY)
sal_uLong GetRadius(bool bPixelCoords=true) const
bool IsEqual(const IMapObject &rEqObj)
void SetError(ErrCode nErrorCode)
virtual void ReadIMapObject(SvStream &rIStm) override
std::size_t write_uInt16_lenPrefixed_uInt8s_FromOString(SvStream &rStrm, const OString &rStr)
virtual IMapObjectType GetType() const override
IMapObject * GetHitIMapObject(const Size &rOriginalSize, const Size &rDisplaySize, const Point &rRelHitPoint, sal_uLong nFlags=0)
std::size_t ReadBytes(void *pData, std::size_t nSize)
Point PixelToLogic(const Point &rDevicePt) const
Point LogicToPixel(const Point &rLogicPt) const
virtual void WriteIMapObject(SvStream &rOStm) const override
void Scale(const Fraction &rFractX, const Fraction &rFracY)
SvStreamEndian GetEndian() const
#define SCALEPOINT(aPT, aFracX, aFracY)
sal_Int32 GetDenominator() const
void Read(SvStream &rIStm)
void ImpReadImageMap(SvStream &rIStm, size_t nCount)
void SetEndian(SvStreamEndian SvStreamEndian)
virtual void WriteIMapObject(SvStream &rOStm) const override
tools::Long Height() const
IMapObject * GetIMapObject(size_t nPos) const
virtual IMapObjectType GetType() const =0
#define SAL_WARN(area, stream)
bool operator==(const ImageMap &rImageMap)
tools::Rectangle aEllipse
virtual void ReadIMapObject(SvStream &rIStm) override
virtual void ReadIMapObject(SvStream &rIStm) override
#define SVSTREAM_GENERALERROR
SvxMacroTableDtor aEventList
virtual void WriteIMapObject(SvStream &rOStm) const =0
SVL_DLLPUBLIC OUString SmartRel2Abs(INetURLObject const &rTheBaseURIRef, OUString const &rTheRelURIRef, Link< OUString *, bool > const &rMaybeFileHdl=Link< OUString *, bool >(), bool bCheckFileExists=true, bool bIgnoreFragment=false, INetURLObject::EncodeMechanism eEncodeMechanism=INetURLObject::EncodeMechanism::WasEncoded, INetURLObject::DecodeMechanism eDecodeMechanism=INetURLObject::DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8, FSysStyle eStyle=FSysStyle::Detect)