1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 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/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 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 . 18 */ 19 20 #ifndef INCLUDED_SVX_SVDOGRAF_HXX 21 #define INCLUDED_SVX_SVDOGRAF_HXX 22 23 #include <com/sun/star/io/XInputStream.hpp> 24 #include <com/sun/star/graphic/XGraphic.hpp> 25 #include <com/sun/star/drawing/QRCode.hpp> 26 #include <com/sun/star/uno/Sequence.hxx> 27 #include <vcl/graph.hxx> 28 #include <svx/svdorect.hxx> 29 #include <vcl/GraphicObject.hxx> 30 #include <svx/svxdllapi.h> 31 #include <o3tl/typed_flags_set.hxx> 32 #include <memory> 33 #include <cstddef> 34 35 namespace sdr 36 { 37 namespace properties 38 { 39 class GraphicProperties; 40 } // end of namespace properties 41 namespace contact 42 { 43 class ViewObjectContactOfGraphic; 44 } // end of namespace contact 45 } // end of namespace sdr 46 47 /** 48 * Options for GetTransformedGraphic() 49 */ 50 enum class SdrGrafObjTransformsAttrs 51 { 52 NONE = 0x00, 53 MIRROR = 0x01, 54 ROTATE = 0x02, 55 ALL = 0x03, 56 }; 57 namespace o3tl 58 { 59 template<> struct typed_flags<SdrGrafObjTransformsAttrs> : is_typed_flags<SdrGrafObjTransformsAttrs, 0x03> {}; 60 } 61 62 class SdrGrafObjGeoData final : public SdrTextObjGeoData 63 { 64 public: 65 bool bMirrored; 66 SdrGrafObjGeoData()67 SdrGrafObjGeoData() 68 : bMirrored(false) 69 { 70 } 71 }; 72 73 class GraphicObject; 74 class SdrGraphicLink; 75 76 /** 77 * This class represents an embedded or linked bitmap graphic object. 78 */ 79 class SVX_DLLPUBLIC SdrGrafObj : public SdrRectObj 80 { 81 private: 82 // to allow sdr::properties::GraphicProperties access to SetXPolyDirty() 83 friend class sdr::properties::GraphicProperties; 84 85 // to allow sdr::contact::ViewObjectContactOfGraphic access to ImpUpdateGraphicLink() 86 friend class sdr::contact::ViewObjectContactOfGraphic; 87 friend class SdrExchangeView; // Only for a ForceSwapIn() call. 88 friend class SdrGraphicLink; 89 90 virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override; 91 virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; 92 93 void ImpSetAttrToGrafInfo(); // Copy values from the pool 94 GraphicAttr aGrafInfo; 95 96 OUString aFileName; // If it's a Link, the filename can be found in here 97 OUString aReferer; 98 OUString aFilterName; 99 std::unique_ptr<GraphicObject> mpGraphicObject; // In order to speed up output of bitmaps, especially rotated ones 100 std::unique_ptr<GraphicObject> mpReplacementGraphicObject; 101 SdrGraphicLink* pGraphicLink; // And here a pointer for linked graphics 102 bool bMirrored:1; // True: the graphic is horizontal, which means it's mirrored along the y-axis 103 104 // Flag for allowing text animation. Default is true. 105 bool mbGrafAnimationAllowed:1; 106 107 bool mbIsSignatureLine; 108 OUString maSignatureLineId; 109 OUString maSignatureLineSuggestedSignerName; 110 OUString maSignatureLineSuggestedSignerTitle; 111 OUString maSignatureLineSuggestedSignerEmail; 112 OUString maSignatureLineSigningInstructions; 113 bool mbIsSignatureLineShowSignDate; 114 bool mbIsSignatureLineCanAddComment; 115 bool mbSignatureLineIsSigned; 116 css::uno::Reference<css::graphic::XGraphic> mpSignatureLineUnsignedGraphic; 117 118 std::unique_ptr<css::drawing::QRCode> mpQrCode; 119 void ImpRegisterLink(); 120 void ImpDeregisterLink(); 121 void ImpSetLinkedGraphic( const Graphic& rGraphic ); 122 DECL_LINK( ImpSwapHdl, const GraphicObject*, SvStream* ); 123 DECL_LINK( ReplacementSwapHdl, const GraphicObject*, SvStream* ); 124 void onGraphicChanged(); 125 GDIMetaFile GetMetaFile(GraphicType &rGraphicType) const; 126 127 protected: 128 // protected destructor 129 virtual ~SdrGrafObj() override; 130 131 public: 132 SdrGrafObj(SdrModel& rSdrModel); 133 SdrGrafObj( 134 SdrModel& rSdrModel, 135 const Graphic& rGrf); 136 SdrGrafObj( 137 SdrModel& rSdrModel, 138 const Graphic& rGrf, 139 const tools::Rectangle& rRect); 140 141 void SetGraphicObject( const GraphicObject& rGrfObj ); 142 const GraphicObject& GetGraphicObject(bool bForceSwapIn = false) const; 143 const GraphicObject* GetReplacementGraphicObject() const; 144 145 void NbcSetGraphic(const Graphic& rGrf); 146 void SetGraphic(const Graphic& rGrf); 147 const Graphic& GetGraphic() const; 148 149 Graphic GetTransformedGraphic( SdrGrafObjTransformsAttrs nTransformFlags = SdrGrafObjTransformsAttrs::ALL ) const; 150 151 GraphicType GetGraphicType() const; 152 153 GraphicAttr GetGraphicAttr( SdrGrafObjTransformsAttrs nTransformFlags = SdrGrafObjTransformsAttrs::ALL ) const; 154 155 // Keep ATM for SD. 156 bool IsAnimated() const; 157 bool IsEPS() const; 158 159 MapMode GetGrafPrefMapMode() const; 160 Size GetGrafPrefSize() const; 161 162 void SetGrafStreamURL( const OUString& rGraphicStreamURL ); 163 OUString const & GetGrafStreamURL() const; 164 Size getOriginalSize() const; 165 166 private: 167 void ForceSwapIn() const; 168 169 public: 170 void SetGraphicLink(const OUString& rFileName, const OUString& rReferer, const OUString& rFilterName); 171 void ReleaseGraphicLink(); 172 bool IsLinkedGraphic() const; 173 GetFileName() const174 const OUString& GetFileName() const { return aFileName;} 175 176 void StartAnimation(); 177 178 virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override; 179 virtual sal_uInt16 GetObjIdentifier() const override; 180 181 virtual OUString TakeObjNameSingul() const override; 182 virtual OUString TakeObjNamePlural() const override; 183 184 virtual SdrGrafObj* CloneSdrObject(SdrModel& rTargetModel) const override; 185 SdrGrafObj& operator=(const SdrGrafObj& rObj); 186 187 virtual sal_uInt32 GetHdlCount() const override; 188 virtual void AddToHdlList(SdrHdlList& rHdlList) const override; 189 190 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override; 191 virtual void NbcMirror(const Point& rRef1, const Point& rRef2) override; 192 virtual SdrObjGeoData* NewGeoData() const override; 193 virtual void SaveGeoData(SdrObjGeoData& rGeo) const override; 194 virtual void RestGeoData(const SdrObjGeoData& rGeo) override; 195 196 bool HasGDIMetaFile() const; 197 198 // react on model/page change 199 virtual void handlePageChange(SdrPage* pOldPage, SdrPage* pNewPage) override; 200 201 bool isEmbeddedVectorGraphicData() const; 202 GDIMetaFile getMetafileFromEmbeddedVectorGraphicData() const; 203 204 bool isEmbeddedPdfData() const; 205 const std::shared_ptr<std::vector<sal_Int8>> & getEmbeddedPdfData() const; 206 /// Returns the page number of the embedded data (typically to re-render or import it). 207 sal_Int32 getEmbeddedPageNumber() const; 208 209 virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override; 210 211 virtual void AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrinkOnly = false ) override; 212 213 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; 214 IsMirrored() const215 bool IsMirrored() const { return bMirrored;} 216 void SetMirrored( bool _bMirrored ); 217 shouldKeepAspectRatio() const218 virtual bool shouldKeepAspectRatio() const override { return true; } 219 220 // Access to GrafAnimationAllowed flag 221 void SetGrafAnimationAllowed(bool bNew); 222 223 css::uno::Reference< css::io::XInputStream > getInputStream() const; 224 225 // #i103116# FullDrag support 226 virtual SdrObjectUniquePtr getFullDragClone() const override; 227 228 // add handles for crop mode when selected 229 virtual void addCropHandles(SdrHdlList& rTarget) const override; 230 231 // Signature Line setIsSignatureLine(bool bIsSignatureLine)232 void setIsSignatureLine(bool bIsSignatureLine) { mbIsSignatureLine = bIsSignatureLine; }; isSignatureLine() const233 bool isSignatureLine() const { return mbIsSignatureLine; }; setSignatureLineId(const OUString & rSignatureLineId)234 void setSignatureLineId(const OUString& rSignatureLineId) 235 { 236 maSignatureLineId = rSignatureLineId; 237 }; getSignatureLineId() const238 const OUString& getSignatureLineId() const { return maSignatureLineId; }; setSignatureLineSuggestedSignerName(const OUString & rSuggestedSignerName)239 void setSignatureLineSuggestedSignerName(const OUString& rSuggestedSignerName) 240 { 241 maSignatureLineSuggestedSignerName = rSuggestedSignerName; 242 }; getSignatureLineSuggestedSignerName() const243 const OUString& getSignatureLineSuggestedSignerName() const 244 { 245 return maSignatureLineSuggestedSignerName; 246 }; setSignatureLineSuggestedSignerTitle(const OUString & rSuggestedSignerTitle)247 void setSignatureLineSuggestedSignerTitle(const OUString& rSuggestedSignerTitle) 248 { 249 maSignatureLineSuggestedSignerTitle = rSuggestedSignerTitle; 250 }; getSignatureLineSuggestedSignerTitle() const251 const OUString& getSignatureLineSuggestedSignerTitle() const 252 { 253 return maSignatureLineSuggestedSignerTitle; 254 }; setSignatureLineSuggestedSignerEmail(const OUString & rSuggestedSignerEmail)255 void setSignatureLineSuggestedSignerEmail(const OUString& rSuggestedSignerEmail) 256 { 257 maSignatureLineSuggestedSignerEmail = rSuggestedSignerEmail; 258 }; getSignatureLineSuggestedSignerEmail() const259 const OUString& getSignatureLineSuggestedSignerEmail() const 260 { 261 return maSignatureLineSuggestedSignerEmail; 262 }; setSignatureLineSigningInstructions(const OUString & rSigningInstructions)263 void setSignatureLineSigningInstructions(const OUString& rSigningInstructions) 264 { 265 maSignatureLineSigningInstructions = rSigningInstructions; 266 }; getSignatureLineSigningInstructions() const267 const OUString& getSignatureLineSigningInstructions() const 268 { 269 return maSignatureLineSigningInstructions; 270 }; setSignatureLineShowSignDate(bool bIsSignatureLineShowSignDate)271 void setSignatureLineShowSignDate(bool bIsSignatureLineShowSignDate) 272 { 273 mbIsSignatureLineShowSignDate = bIsSignatureLineShowSignDate; 274 }; isSignatureLineShowSignDate() const275 bool isSignatureLineShowSignDate() const { return mbIsSignatureLineShowSignDate; }; setSignatureLineCanAddComment(bool bIsSignatureCanAddComment)276 void setSignatureLineCanAddComment(bool bIsSignatureCanAddComment) 277 { 278 mbIsSignatureLineCanAddComment = bIsSignatureCanAddComment; 279 }; isSignatureLineCanAddComment() const280 bool isSignatureLineCanAddComment() const { return mbIsSignatureLineCanAddComment; }; getSignatureLineUnsignedGraphic() const281 css::uno::Reference<css::graphic::XGraphic> const & getSignatureLineUnsignedGraphic() const 282 { 283 return mpSignatureLineUnsignedGraphic; 284 }; setSignatureLineUnsignedGraphic(css::uno::Reference<css::graphic::XGraphic> rGraphic)285 void setSignatureLineUnsignedGraphic(css::uno::Reference<css::graphic::XGraphic> rGraphic) 286 { 287 mpSignatureLineUnsignedGraphic = rGraphic; 288 }; isSignatureLineSigned() const289 bool isSignatureLineSigned() const { return mbSignatureLineIsSigned; }; setSignatureLineIsSigned(bool bIsSigned)290 void setSignatureLineIsSigned(bool bIsSigned) { mbSignatureLineIsSigned = bIsSigned; } 291 292 // Qr Code setQrCode(css::drawing::QRCode & rQrCode)293 void setQrCode(css::drawing::QRCode& rQrCode) 294 { 295 mpQrCode = std::make_unique<css::drawing::QRCode>(rQrCode); 296 }; 297 getQrCode() const298 css::drawing::QRCode* getQrCode() const 299 { 300 return mpQrCode.get(); 301 }; 302 }; 303 304 #endif // INCLUDED_SVX_SVDOGRAF_HXX 305 306 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 307