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_SVDOCAPT_HXX 21 #define INCLUDED_SVX_SVDOCAPT_HXX 22 23 #include <svx/svdorect.hxx> 24 #include <svx/svxdllapi.h> 25 26 27 // Forward Declarations 28 class ImpCaptParams; 29 30 namespace sdr { namespace properties { 31 class CaptionProperties; 32 }} 33 34 // Helper Class SdrCaptObjGeoData 35 class SdrCaptObjGeoData final : public SdrTextObjGeoData 36 { 37 public: 38 tools::Polygon aTailPoly; 39 }; 40 41 // SdrCaptionObj 42 class SVX_DLLPUBLIC SdrCaptionObj final : public SdrRectObj 43 { 44 private: 45 // to allow sdr::properties::CaptionProperties access to ImpRecalcTail() 46 friend class sdr::properties::CaptionProperties; 47 friend class SdrTextObj; // for ImpRecalcTail() during AutoGrow 48 49 // tdf#118662 exclusive friend function and setter for SuppressGetBitmap 50 friend void setSuppressGetBitmapFromXclObjComment(SdrCaptionObj* pSdrCaptionObj, bool bValue); setSuppressGetBitmap(bool bNew)51 void setSuppressGetBitmap(bool bNew) 52 { 53 mbSuppressGetBitmap = bNew; 54 } 55 56 virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; 57 virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override; 58 59 tools::Polygon aTailPoly; // the whole tail polygon 60 bool mbSpecialTextBoxShadow; // for calc special shadow, default FALSE 61 bool mbFixedTail; // for calc note box fixed tail, default FALSE 62 bool mbSuppressGetBitmap; // tdf#118662 63 Point maFixedTailPos; // for calc note box fixed tail position. 64 65 SVX_DLLPRIVATE void ImpGetCaptParams(ImpCaptParams& rPara) const; 66 SVX_DLLPRIVATE static void ImpCalcTail1(const ImpCaptParams& rPara, tools::Polygon& rPoly, tools::Rectangle const & rRect); 67 SVX_DLLPRIVATE static void ImpCalcTail2(const ImpCaptParams& rPara, tools::Polygon& rPoly, tools::Rectangle const & rRect); 68 SVX_DLLPRIVATE static void ImpCalcTail3(const ImpCaptParams& rPara, tools::Polygon& rPoly, tools::Rectangle const & rRect); 69 SVX_DLLPRIVATE static void ImpCalcTail (const ImpCaptParams& rPara, tools::Polygon& rPoly, tools::Rectangle const & rRect); 70 SVX_DLLPRIVATE void ImpRecalcTail(); 71 72 // protected destructor 73 virtual ~SdrCaptionObj() override; 74 75 public: 76 SdrCaptionObj(SdrModel& rSdrModel); 77 SdrCaptionObj( 78 SdrModel& rSdrModel, 79 const tools::Rectangle& rRect, 80 const Point& rTail); 81 82 // tdf#118662 getter for SuppressGetBitmap isSuppressGetBitmap() const83 bool isSuppressGetBitmap() const { return mbSuppressGetBitmap; } 84 85 virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override; 86 virtual sal_uInt16 GetObjIdentifier() const override; 87 virtual SdrCaptionObj* CloneSdrObject(SdrModel& rTargetModel) const override; 88 89 // implemented mainly for the purposes of Clone() 90 SdrCaptionObj& operator=(const SdrCaptionObj& rObj); 91 92 // for calc: special shadow only for text box SetSpecialTextBoxShadow()93 void SetSpecialTextBoxShadow() { mbSpecialTextBoxShadow = true; } GetSpecialTextBoxShadow() const94 bool GetSpecialTextBoxShadow() const { return mbSpecialTextBoxShadow; } 95 96 // for calc: fixed note tail position. SetFixedTail()97 void SetFixedTail() { mbFixedTail = true; } 98 99 virtual OUString TakeObjNameSingul() const override; 100 virtual OUString TakeObjNamePlural() const override; 101 102 virtual basegfx::B2DPolyPolygon TakeXorPoly() const override; 103 virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override; 104 105 virtual sal_uInt32 GetHdlCount() const override; 106 virtual void AddToHdlList(SdrHdlList& rHdlList) const override; 107 108 // special drag methods 109 virtual bool hasSpecialDrag() const override; 110 virtual bool beginSpecialDrag(SdrDragStat& rDrag) const override; 111 virtual bool applySpecialDrag(SdrDragStat& rDrag) override; 112 virtual OUString getSpecialDragComment(const SdrDragStat& rDrag) const override; 113 114 virtual bool BegCreate(SdrDragStat& rStat) override; 115 virtual bool MovCreate(SdrDragStat& rStat) override; 116 virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) override; 117 virtual bool BckCreate(SdrDragStat& rStat) override; 118 virtual void BrkCreate(SdrDragStat& rStat) override; 119 virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const override; 120 virtual PointerStyle GetCreatePointer() const override; 121 122 virtual void NbcMove(const Size& rSiz) override; 123 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override; 124 125 virtual void NbcSetRelativePos(const Point& rPnt) override; 126 virtual Point GetRelativePos() const override; 127 128 virtual const tools::Rectangle& GetLogicRect() const override; 129 virtual void NbcSetLogicRect(const tools::Rectangle& rRect) override; 130 131 virtual sal_uInt32 GetSnapPointCount() const override; 132 virtual Point GetSnapPoint(sal_uInt32 i) const override; 133 134 private: 135 virtual SdrObjGeoData* NewGeoData() const override; 136 virtual void SaveGeoData(SdrObjGeoData& rGeo) const override; 137 virtual void RestGeoData(const SdrObjGeoData& rGeo) override; 138 139 public: 140 virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override; 141 142 const Point& GetTailPos() const; 143 void SetTailPos(const Point& rPos); 144 void NbcSetTailPos(const Point& rPos); 145 146 // #i32599# 147 // Add own implementation for TRSetBaseGeometry to handle TailPos over changes 148 virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon) override; 149 GetFixedTailPos() const150 const Point& GetFixedTailPos() const {return maFixedTailPos;} 151 152 // geometry access 153 ::basegfx::B2DPolygon getTailPolygon() const; 154 }; 155 156 157 #endif //_SVDOCAPT_HXX 158 159 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 160