1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
23 #include <vcl/dllapi.h>
24 #include <tools/solar.h>
25 #include <rtl/ustring.hxx>
26 #include <vcl/bitmapex.hxx>
27 #include <vcl/animate/Animation.hxx>
28 #include <vcl/gfxlink.hxx>
29 #include <com/sun/star/uno/Reference.hxx>
30 #include <vcl/vectorgraphicdata.hxx>
31 #include <basegfx/vector/b2dsize.hxx>
32 #include <vcl/GraphicExternalLink.hxx>
34 enum class GraphicType
42 namespace com::sun::star::graphic
{ class XGraphic
; }
43 namespace vcl
{ class Font
; }
52 class SAL_WARN_UNUSED VCL_DLLPUBLIC GraphicConversionParameters
55 Size maSizePixel
; // default is (0,0)
57 bool mbUnlimitedSize
: 1; // default is false
58 bool mbAntiAliase
: 1; // default is false
59 bool mbSnapHorVerLines
: 1; // default is false
62 GraphicConversionParameters(
63 const Size
& rSizePixel
= Size(),
64 bool bUnlimitedSize
= false,
65 bool bAntiAliase
= false,
66 bool bSnapHorVerLines
= false)
67 : maSizePixel(rSizePixel
),
68 mbUnlimitedSize(bUnlimitedSize
),
69 mbAntiAliase(bAntiAliase
),
70 mbSnapHorVerLines(bSnapHorVerLines
)
75 const Size
& getSizePixel() const { return maSizePixel
; }
76 bool getUnlimitedSize() const { return mbUnlimitedSize
; }
77 bool getAntiAliase() const { return mbAntiAliase
; }
78 bool getSnapHorVerLines() const { return mbSnapHorVerLines
; }
82 class VCL_DLLPUBLIC Graphic
85 std::shared_ptr
<ImpGraphic
> mxImpGraphic
;
86 SAL_DLLPRIVATE
void ImplTestRefCount();
89 SAL_DLLPRIVATE ImpGraphic
* ImplGetImpGraphic() const { return mxImpGraphic
.get(); }
92 Graphic(std::shared_ptr
<GfxLink
> const & rGfxLink
, sal_Int32 nPageIndex
= 0);
93 Graphic( const GraphicExternalLink
& rGraphicLink
);
94 Graphic( const Graphic
& rGraphic
);
95 Graphic( Graphic
&& rGraphic
) noexcept
;
96 Graphic( const Image
& rImage
);
97 Graphic( const BitmapEx
& rBmpEx
);
98 Graphic( const std::shared_ptr
<VectorGraphicData
>& rVectorGraphicDataPtr
);
99 Graphic( const Animation
& rAnimation
);
100 Graphic( const GDIMetaFile
& rMtf
);
101 Graphic( const css::uno::Reference
< css::graphic::XGraphic
>& rxGraphic
);
103 Graphic
& operator=( const Graphic
& rGraphic
);
104 Graphic
& operator=( Graphic
&& rGraphic
) noexcept
;
105 bool operator==( const Graphic
& rGraphic
) const;
106 bool operator!=( const Graphic
& rGraphic
) const;
112 GraphicType
GetType() const;
113 void SetDefaultType();
114 bool IsSupportedGraphic() const;
116 bool IsTransparent() const;
117 bool IsAlpha() const;
118 bool IsAnimated() const;
121 bool isAvailable() const;
122 bool makeAvailable();
124 // #i102089# Access of Bitmap potentially will have to rasterconvert the Graphic
125 // if it is a MetaFile. To be able to control this conversion it is necessary to
126 // allow giving parameters which control AntiAliasing and LineSnapping of the
127 // MetaFile when played. Defaults will use a no-AAed, not snapped conversion as
129 BitmapEx
GetBitmapEx(const GraphicConversionParameters
& rParameters
= GraphicConversionParameters()) const;
130 /// Gives direct access to the contained BitmapEx.
131 const BitmapEx
& GetBitmapExRef() const;
133 Animation
GetAnimation() const;
134 const GDIMetaFile
& GetGDIMetaFile() const;
136 css::uno::Reference
< css::graphic::XGraphic
> GetXGraphic() const;
138 Size
GetPrefSize() const;
139 void SetPrefSize( const Size
& rPrefSize
);
141 MapMode
GetPrefMapMode() const;
142 void SetPrefMapMode( const MapMode
& rPrefMapMode
);
144 basegfx::B2DSize
GetPPI() const;
146 Size
GetSizePixel( const OutputDevice
* pRefDevice
= nullptr ) const;
148 sal_uLong
GetSizeBytes() const;
150 void Draw(OutputDevice
& rOutDev
, const Point
& rDestPt
) const;
151 void Draw(OutputDevice
& rOutDev
, const Point
& rDestPt
,
152 const Size
& rDestSize
) const;
153 static void DrawEx(OutputDevice
& rOutDev
, const OUString
& rText
,
154 vcl::Font
& rFont
, const BitmapEx
& rBitmap
,
155 const Point
& rDestPt
, const Size
& rDestSize
);
157 void StartAnimation(OutputDevice
& rOutDev
,
158 const Point
& rDestPt
,
159 const Size
& rDestSize
,
160 tools::Long nExtraData
= 0,
161 OutputDevice
* pFirstFrameOutDev
= nullptr);
162 void StopAnimation( const OutputDevice
* pOutputDevice
,
163 tools::Long nExtraData
);
165 void SetAnimationNotifyHdl( const Link
<Animation
*,void>& rLink
);
166 Link
<Animation
*,void> GetAnimationNotifyHdl() const;
168 sal_uInt32
GetAnimationLoopCount() const;
170 BitmapChecksum
GetChecksum() const;
172 OUString
getOriginURL() const;
173 void setOriginURL(OUString
const & rOriginURL
);
175 OString
getUniqueID() const;
177 std::shared_ptr
<GraphicReader
>& GetReaderContext();
178 void SetReaderContext( const std::shared_ptr
<GraphicReader
> &pReader
);
179 void SetDummyContext(bool value
);
180 bool IsDummyContext() const;
182 void SetGfxLink(const std::shared_ptr
<GfxLink
>& rGfxLink
);
183 const std::shared_ptr
<GfxLink
> & GetSharedGfxLink() const;
184 GfxLink
GetGfxLink() const;
185 bool IsGfxLink() const;
187 const std::shared_ptr
<VectorGraphicData
>& getVectorGraphicData() const;
189 /// Get the page number of the multi-page source this Graphic is rendered from.
190 sal_Int32
getPageNumber() const;
198 std::size_t operator()(Graphic
const & rGraphic
) const
200 return static_cast<std::size_t>(rGraphic
.GetChecksum());
204 } // end namespace std
206 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */