LibreOffice Module svx (master) 1
svdoashp.hxx
Go to the documentation of this file.
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#pragma once
21
22#include <svx/svdobj.hxx>
23#include <svx/svdotext.hxx>
24#include <svx/svdhdl.hxx>
25#include <vector>
26#include <com/sun/star/uno/Reference.h>
27#include <com/sun/star/drawing/XCustomShapeEngine.hpp>
28#include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp>
29#include <svx/svxdllapi.h>
31
32namespace sdr
33{
34 namespace properties
35 {
36 class CustomShapeProperties;
37 }
38}
39
41{
42public:
46
47 css::uno::Sequence< css::drawing::EnhancedCustomShapeAdjustmentValue > aAdjustmentSeq;
48};
49
51{
52 NONE = 0,
53 RESIZE_FIXED = 1,
54 CREATE_FIXED = 2,
57 MOVE_SHAPE = 16,
58 ORTHO4 = 32,
60};
61
62namespace o3tl
63{
64 template<> struct typed_flags<CustomShapeHandleModes> : is_typed_flags<CustomShapeHandleModes, 127> {};
65}
66
68{
69 css::uno::Reference< css::drawing::XCustomShapeHandle > xInteraction;
70 css::awt::Point aPosition;
72};
73
75{
76private:
77 // fObjectRotation is containing the object rotation in degrees.
80
81protected:
82 virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
83 virtual void setUnoShape(const css::uno::Reference<css::drawing::XShape>& rxUnoShape) override;
84
85public:
86 virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
87
88 // to allow sdr::properties::CustomShapeProperties access
90
91 css::uno::Reference< css::drawing::XShape > mXRenderedCustomShape;
92
93 mutable css::uno::Reference< css::drawing::XCustomShapeEngine > mxCustomShapeEngine;
94
95 // #i37011# render geometry shadow
97
98 css::uno::Reference< css::drawing::XCustomShapeEngine > const & GetCustomShapeEngine() const;
99
100 std::vector< SdrCustomShapeInteraction > GetInteractionHandles() const; // needed in unit test
101 SVX_DLLPRIVATE void DragCreateObject( SdrDragStat& rDrag );
102 SVX_DLLPRIVATE void DragResizeCustomShape( const tools::Rectangle& rNewRect );
103 void DragMoveCustomShapeHdl( const Point& rDestination,
104 const sal_uInt16 nCustomShapeHdlNum, bool bMoveCalloutRectangle ); // needed in unit test
105
106 // #i37011# centralize throw-away of render geometry
107 void InvalidateRenderGeometry();
108
109 // #i38892#
110 void ImpCheckCustomGluePointsAreAdded();
111
112 // returns the new text rect that corresponds to the current logic rect, the return value can be empty if nothing changed.
113 tools::Rectangle ImpCalculateTextFrame( const bool bHgt, const bool bWdt );
114
115public:
116 // #i37011#
117 const SdrObject* GetSdrObjectFromCustomShape() const;
118 const SdrObject* GetSdrObjectShadowFromCustomShape() const;
119 bool GetTextBounds( tools::Rectangle& rTextBound ) const;
120 virtual bool IsTextPath() const override;
121 basegfx::B2DPolyPolygon GetLineGeometry( const bool bBezierAllowed ) const;
122
123protected:
124 // #115391# new method for SdrObjCustomShape and SdrTextObj to correctly handle and set
125 // SdrTextMinFrameWidthItem and SdrTextMinFrameHeightItem based on all settings, necessities
126 // and object sizes
127 virtual void AdaptTextMinSize() override;
128
130
131 virtual void InternalSetStyleSheet( SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr, bool bBroadcast ) override;
132
133public:
134 bool UseNoFillStyle() const;
135
136 bool IsMirroredX() const;
137 bool IsMirroredY() const;
138 void SetMirroredX( const bool bMirroredX );
139 void SetMirroredY( const bool bMirroredY );
140
141 double GetObjectRotation() const { return fObjectRotation;}
142 double GetExtraTextRotation( const bool bPreRotation = false ) const;
143
144 SdrObjCustomShape(SdrModel& rSdrModel);
145 SdrObjCustomShape(SdrModel& rSdrModel, SdrObjCustomShape const & rSource);
146 virtual ~SdrObjCustomShape() override;
147
148 /* is merging default attributes from type-shape into the SdrCustomShapeGeometryItem. If pType
149 is NULL then the type is being taken from the "Type" property of the SdrCustomShapeGeometryItem.
150 MergeDefaultAttributes is called when creating CustomShapes via UI and after importing */
151 void MergeDefaultAttributes( const OUString* pType = nullptr );
152
153 /* the method is checking if the geometry data is unchanged/default, in this case the data might not be stored */
154 enum class DefaultType
155 {
156 Path,
157 Viewbox,
158 Segments,
159 Gluepoints,
160 StretchX,
161 StretchY,
162 Equations,
163 TextFrames
164 };
165 bool IsDefaultGeometry( const DefaultType eDefaultType ) const;
166
167 virtual SdrObjKind GetObjIdentifier() const override;
168 virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
169
170 virtual void Move(const Size& rSiz) override;
171 virtual void Shear(const Point& rRef, Degree100 nAngle, double tn, bool bVShear) override;
172 virtual void SetSnapRect(const tools::Rectangle& rRect) override;
173 virtual void SetLogicRect(const tools::Rectangle& rRect) override;
174 virtual void AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrinkOnly = false ) override;
175
176 virtual void NbcMove(const Size& rSiz) override;
177 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
178 virtual void NbcRotate(const Point& rRef, Degree100 nAngle, double sn, double cs) override;
179 virtual void NbcMirror(const Point& rRef1, const Point& rRef2) override;
180 virtual void NbcShear(const Point& rRef, Degree100 nAngle, double tn, bool bVShear) override;
181 virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
182 virtual void NbcSetLogicRect(const tools::Rectangle& rRect) override;
183
184 virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const override;
185
186 // special drag methods
187 virtual bool hasSpecialDrag() const override;
188 virtual bool beginSpecialDrag(SdrDragStat& rDrag) const override;
189 virtual bool applySpecialDrag(SdrDragStat& rDrag) override;
190
191 virtual bool MovCreate(SdrDragStat& rStat) override; // #i37448#
192 virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) override;
193
199 void SuggestTextFrameSize(Size aSuggestedTextFrameSize);
200 virtual bool AdjustTextFrameWidthAndHeight(tools::Rectangle& rR, bool bHgt = true, bool bWdt = true) const override;
201 virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true) override;
202 virtual bool AdjustTextFrameWidthAndHeight() override;
203 virtual bool IsAutoGrowHeight() const override;
204 virtual bool IsAutoGrowWidth() const override;
205 virtual void SetVerticalWriting(bool bVertical) override;
206 virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, tools::Rectangle* pViewInit, tools::Rectangle* pViewMin) const override;
207 virtual void EndTextEdit( SdrOutliner& rOutl ) override;
208 virtual void TakeTextAnchorRect( tools::Rectangle& rAnchorRect ) const override;
209 virtual void TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRect, bool bNoEditText,
210 tools::Rectangle* pAnchorRect, bool bLineWidth = true ) const override;
211 virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
212
213 virtual OUString TakeObjNameSingul() const override;
214 virtual OUString TakeObjNamePlural() const override;
215
216 virtual basegfx::B2DPolyPolygon TakeCreatePoly( const SdrDragStat& rDrag) const override;
217
218 virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
219 virtual basegfx::B2DPolyPolygon TakeContour() const override;
220
221 virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject) override;
222
223 virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
224
225 // react on model/page change
226 virtual void handlePageChange(SdrPage* pOldPage, SdrPage* pNewPage) override;
227
228 virtual std::unique_ptr<SdrObjGeoData> NewGeoData() const override;
229 virtual void SaveGeoData(SdrObjGeoData &rGeo) const override;
230 virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override;
231
232 // need to take fObjectRotation instead of aGeo.nAngle, replace it temporary
233 virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const override;
234 virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon) override;
235
236 virtual const SdrGluePointList* GetGluePointList() const override;
237 //virtual SdrGluePointList* GetGluePointList();
238 virtual SdrGluePointList* ForceGluePointList() override;
239
240 virtual sal_uInt32 GetHdlCount() const override;
241 virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
242
243 // #i33136#
244 static bool doConstructOrthogonal(std::u16string_view rName);
245
247
248 OUString GetCustomShapeName() const;
249};
250
251/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
css::uno::Sequence< css::drawing::EnhancedCustomShapeAdjustmentValue > aAdjustmentSeq
Definition: svdoashp.hxx:47
double fObjectRotation
Definition: svdoashp.hxx:45
double GetObjectRotation() const
Definition: svdoashp.hxx:141
double fObjectRotation
Definition: svdoashp.hxx:78
bool mbAdjustingTextFrameWidthAndHeight
Definition: svdoashp.hxx:79
rtl::Reference< SdrObject > mpLastShadowGeometry
Definition: svdoashp.hxx:96
css::uno::Reference< css::drawing::XShape > mXRenderedCustomShape
Definition: svdoashp.hxx:91
Size m_aSuggestedTextFrameSize
Definition: svdoashp.hxx:129
css::uno::Reference< css::drawing::XCustomShapeEngine > mxCustomShapeEngine
Definition: svdoashp.hxx:93
All geometrical data of an arbitrary object for use in undo/redo.
Definition: svdobj.hxx:174
Provides information about various ZObject properties.
Definition: svdobj.hxx:196
Abstract DrawObject.
Definition: svdobj.hxx:260
virtual SdrGluePointList * ForceGluePointList()
Definition: svdobj.cxx:2319
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const
Definition: svdobj.cxx:1347
virtual void Shear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear)
Definition: svdobj.cxx:1596
virtual void InternalSetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr, bool bBroadcast)
Definition: svdobj.cxx:2267
virtual void setUnoShape(const css::uno::Reference< css::drawing::XShape > &_rxUnoShape)
Sets a new UNO representation of the shape.
Definition: svdobj.cxx:2824
virtual void Move(const Size &rSiz)
Definition: svdobj.cxx:1531
virtual void SetLogicRect(const tools::Rectangle &rRect)
Definition: svdobj.cxx:1696
virtual void AdjustToMaxRect(const tools::Rectangle &rMaxRect, bool bShrinkOnly=false)
Definition: svdobj.cxx:1682
virtual bool IsTextPath() const
Definition: svdobj.hxx:766
virtual const SdrGluePointList * GetGluePointList() const
Definition: svdobj.cxx:2312
virtual void SetSnapRect(const tools::Rectangle &rRect)
Definition: svdobj.cxx:1687
virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const
Definition: svdobj.cxx:2275
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
Definition: svdpage.hxx:379
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
Definition: svdotext.cxx:64
virtual rtl::Reference< SdrObject > CloneSdrObject(SdrModel &rTargetModel) const override
Definition: svdotext.cxx:1095
virtual std::unique_ptr< SdrObjGeoData > NewGeoData() const override
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
Definition: svdotext.cxx:1494
virtual void AdaptTextMinSize()
Definition: svdotext.cxx:507
virtual bool IsAutoGrowWidth() const
Definition: svdotext.cxx:319
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
Definition: svdotext.cxx:1499
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
Definition: svdotxtr.cxx:238
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
Definition: svdotxtr.cxx:43
friend class SdrObjCustomShape
Definition: svdotext.hxx:161
virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override
Definition: svdotext.cxx:1507
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
Definition: svdotxtr.cxx:214
virtual void NbcMove(const Size &rSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
Definition: svdotxtr.cxx:95
virtual bool applySpecialDrag(SdrDragStat &rDrag) override
Definition: svdotxdr.cxx:152
virtual bool MovCreate(SdrDragStat &rStat) override
Definition: svdotxdr.cxx:195
virtual void TakeTextEditArea(Size *pPaperMin, Size *pPaperMax, tools::Rectangle *pViewInit, tools::Rectangle *pViewMin) const
Definition: svdotxed.cxx:131
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
Definition: svdotxdr.cxx:36
virtual OUString TakeObjNameSingul() const override
Definition: svdotext.cxx:1018
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
Definition: svdotext.cxx:429
virtual void TakeTextAnchorRect(::tools::Rectangle &rAnchorRect) const
Definition: svdotext.cxx:656
virtual OUString TakeObjNamePlural() const override
Definition: svdotext.cxx:1077
virtual basegfx::B2DPolyPolygon TakeContour() const override
contour for TextToContour
Definition: svdotext.cxx:1113
virtual bool IsAutoGrowHeight() const
Definition: svdotext.cxx:294
virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix &rMatrix, const basegfx::B2DPolyPolygon &rPolyPolygon) override
Definition: svdotext.cxx:1689
virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt=true, bool bWdt=true)
Definition: svdotxat.cxx:241
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
Definition: svdotext.cxx:1100
virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat &rDrag) const override
Polygon dragged by the user when creating the object.
Definition: svdotxdr.cxx:235
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
Definition: svdotext.cxx:70
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
Definition: svdotext.cxx:480
virtual void SetVerticalWriting(bool bVertical)
Definition: svdotext.cxx:1568
virtual void TakeTextRect(SdrOutliner &rOutliner, tools::Rectangle &rTextRect, bool bNoEditText, tools::Rectangle *pAnchorRect, bool bLineWidth=true) const
Definition: svdotext.cxx:680
virtual bool AdjustTextFrameWidthAndHeight()
Definition: svdotxat.cxx:259
virtual void NbcSetOutlinerParaObject(std::optional< OutlinerParaObject > pTextObject) override
Definition: svdotext.cxx:1421
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
Definition: svdotxdr.cxx:41
virtual SdrObjKind GetObjIdentifier() const override
Definition: svdotext.cxx:453
virtual rtl::Reference< SdrObject > DoConvertToPolyObj(bool bBezier, bool bAddText) const override
Definition: svdotxtr.cxx:410
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
Definition: svdotxtr.cxx:103
virtual bool EndCreate(SdrDragStat &rStat, SdrCreateCmd eCmd) override
Definition: svdotxdr.cxx:210
virtual void EndTextEdit(SdrOutliner &rOutl)
Definition: svdotxed.cxx:264
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const override
Definition: svdotext.cxx:1654
virtual bool hasSpecialDrag() const override
The standard transformations (Move,Resize,Rotate,Mirror,Shear) are taken over by the View (TakeXorPol...
Definition: svdotxdr.cxx:70
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
Definition: svdotxtr.cxx:75
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
Definition: svdotxtr.cxx:190
NONE
css::awt::Point aPosition
Definition: svdoashp.hxx:70
css::uno::Reference< css::drawing::XCustomShapeHandle > xInteraction
Definition: svdoashp.hxx:69
CustomShapeHandleModes nMode
Definition: svdoashp.hxx:71
CustomShapeHandleModes
Definition: svdoashp.hxx:51
SdrObjKind
Definition: svdobjkind.hxx:25
SdrCreateCmd
Definition: svdtypes.hxx:27
#define SVX_DLLPRIVATE
Definition: svxdllapi.h:30
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35