LibreOffice Module sd (master) 1
fuconbez.cxx
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#include <com/sun/star/presentation/EffectNodeType.hpp>
21
22#include <fuconbez.hxx>
23#include <svx/svdopath.hxx>
24#include <svl/intitem.hxx>
25#include <sfx2/dispatch.hxx>
26#include <svx/svdobj.hxx>
27#include <sfx2/bindings.hxx>
28#include <sfx2/request.hxx>
29#include <sfx2/viewfrm.hxx>
30#include <osl/diagnose.h>
31
32#include <svx/svxids.hrc>
33#include <svx/svdpagv.hxx>
34#include <svx/xlnclit.hxx>
35#include <svx/xlntrit.hxx>
36#include <svx/xlnwtit.hxx>
37
38#include <app.hrc>
39#include <ViewShell.hxx>
40#include <ViewShellBase.hxx>
41#include <View.hxx>
42#include <Window.hxx>
43#include <ToolBarManager.hxx>
44#include <drawdoc.hxx>
45#include <sdpage.hxx>
46
49
51
52using namespace ::com::sun::star::uno;
53
54namespace sd {
55
56/*//Extra attributes coming from parameters
57 sal_uInt16 mnTransparence; // Default: 0
58 OUString msColor; // Default: ""
59 sal_uInt16 mnWidth; // Default: 0
60 OUString msShapeName; // Default: ""*/
62 ViewShell* pViewSh,
63 ::sd::Window* pWin,
64 ::sd::View* pView,
65 SdDrawDocument* pDoc,
66 SfxRequest& rReq)
67 : FuConstruct(pViewSh, pWin, pView, pDoc, rReq),
68 nEditMode(SID_BEZIER_MOVE),
69 mnTransparence(0),
70 mnWidth(0)
71{
72}
73
74namespace{
75
78bool isSticky(const SfxRequest& rReq)
79{
80 const SfxItemSet *pArgs = rReq.GetArgs ();
81 if (pArgs)
82 {
83 const SfxBoolItem* pIsSticky = rReq.GetArg<SfxBoolItem>(FN_PARAM_4);
84 if (pIsSticky && pIsSticky->GetValue())
85 return true;
86 }
87
88 return false;
89}
90
91}
92
94{
96 rtl::Reference<FuPoor> xFunc( pFunc = new FuConstructBezierPolygon( pViewSh, pWin, pView, pDoc, rReq ) );
97 xFunc->DoExecute(rReq);
98 pFunc->SetPermanent(bPermanent || isSticky(rReq));
99 return xFunc;
100}
101
103{
105
106 const SfxItemSet* pArgs = rReq.GetArgs();
107
108 if( !pArgs )
109 return;
110
111 const SfxUnoAnyItem* pPoolItem = pArgs->GetItemIfSet( SID_ADD_MOTION_PATH );
112 if( pPoolItem )
113 maTargets = pPoolItem->GetValue();
114
115 if (nSlotId != SID_DRAW_FREELINE_NOFILL)
116 return;
117
118 const SfxUInt16Item* pTransparence = rReq.GetArg<SfxUInt16Item>(FN_PARAM_1);
119 const SfxStringItem* pColor = rReq.GetArg<SfxStringItem>(FN_PARAM_2);
120 const SfxUInt16Item* pWidth = rReq.GetArg<SfxUInt16Item>(FN_PARAM_3);
121 const SfxStringItem* pShapeName = rReq.GetArg<SfxStringItem>(SID_SHAPE_NAME);
122
123 if (pTransparence && pTransparence->GetValue() > 0)
124 {
125 mnTransparence = pTransparence->GetValue();
126 }
127 if (pColor && !pColor->GetValue().isEmpty())
128 {
129 msColor = pColor->GetValue();
130 }
131 if (pWidth && pWidth->GetValue() > 0)
132 {
133 mnWidth = pWidth->GetValue();
134 }
135 if (pShapeName && !pShapeName->GetValue().isEmpty())
136 {
137 msShapeName = pShapeName->GetValue();
138 }
139}
140
142{
143 bool bReturn = FuConstruct::MouseButtonDown(rMEvt);
144
145 SdrViewEvent aVEvt;
146 SdrHitKind eHit = mpView->PickAnything(rMEvt, SdrMouseEventKind::BUTTONDOWN, aVEvt);
147
148 if (eHit == SdrHitKind::Handle || rMEvt.IsMod1())
149 {
150 mpView->SetEditMode(SdrViewEditMode::Edit);
151 }
152 else
153 {
154 mpView->SetEditMode(SdrViewEditMode::Create);
155 }
156
157 if (aVEvt.meEvent == SdrEventKind::BeginTextEdit)
158 {
159 // here, we do not allow text input
160 aVEvt.meEvent = SdrEventKind::BeginDragObj;
162 }
163 else
164 {
166 }
167
168 if (eHit == SdrHitKind::MarkedObject && nEditMode == SID_BEZIER_INSERT)
169 {
170 // insert gluepoint
172 }
173 else
174 {
175 mpView->MouseButtonDown(rMEvt, mpWindow->GetOutDev());
176
177 SdrObject* pObj = mpView->GetCreateObj();
178
179 if (pObj)
180 {
181 SfxItemSet aAttr(mpDoc->GetPool());
182 SetStyleSheet(aAttr, pObj);
183 SetAttributes(aAttr, pObj);
184 pObj->SetMergedItemSet(aAttr);
185 }
186 }
187
188 return bReturn;
189}
190
192{
194 return false;
195
196 bool bReturn = false;
197 bool bCreated = false;
198
199 SdrViewEvent aVEvt;
200 mpView->PickAnything(rMEvt, SdrMouseEventKind::BUTTONUP, aVEvt);
201
202 const size_t nCount = mpView->GetSdrPageView()->GetObjList()->GetObjCount();
203
204 if (mpView->IsInsObjPoint())
205 {
206 mpView->EndInsObjPoint(SdrCreateCmd::ForceEnd);
207 }
208 else
209 {
210 mpView->MouseButtonUp(rMEvt, mpWindow->GetOutDev());
211 }
212
213 if (aVEvt.meEvent == SdrEventKind::EndCreate)
214 {
215 bReturn = true;
216
218 {
219 bCreated = true;
220 }
221
222 // trick to suppress FuDraw::DoubleClick
223 bMBDown = false;
224
225 }
226
227 bReturn = FuConstruct::MouseButtonUp(rMEvt) || bReturn;
228
229 bool bDeleted = false;
230 if( bCreated && maTargets.hasValue() )
231 {
232 SdrPathObj* pPathObj = dynamic_cast< SdrPathObj* >( mpView->GetSdrPageView()->GetObjList()->GetObj( nCount ) );
233 SdPage* pPage = dynamic_cast< SdPage* >( pPathObj ? pPathObj->getSdrPageFromSdrObject() : nullptr );
234 if( pPage )
235 {
236 std::shared_ptr< sd::MainSequence > pMainSequence( pPage->getMainSequence() );
237 if( pMainSequence )
238 {
239 Sequence< Any > aTargets;
240 maTargets >>= aTargets;
241
242 sal_Int32 nTCount = aTargets.getLength();
243 if( nTCount > 1 )
244 {
245 const Any* pTarget = aTargets.getConstArray();
246 double fDuration = 0.0;
247 *pTarget++ >>= fDuration;
248 bool bFirst = true;
249
250 OUString sPresetId;
251 switch(nSlotId)
252 {
253 case SID_DRAW_BEZIER_NOFILL:
254 sPresetId = "libo-motionpath-curve";
255 break;
256 case SID_DRAW_POLYGON_NOFILL:
257 sPresetId = "libo-motionpath-polygon";
258 break;
259 case SID_DRAW_FREELINE_NOFILL:
260 sPresetId = "libo-motionpath-freeform-line";
261 break;
262 }
263
264 while( --nTCount )
265 {
266 CustomAnimationEffectPtr pCreated( pMainSequence->append( *pPathObj, *pTarget++, fDuration, sPresetId) );
267 if( bFirst )
268 bFirst = false;
269 else
270 pCreated->setNodeType( css::presentation::EffectNodeType::WITH_PREVIOUS );
271 }
272 }
273 }
274 }
276 bDeleted = true;
277 }
278
279 if ((!bPermanent && bCreated) || bDeleted)
280 {
281 mpViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SfxCallMode::ASYNCHRON);
282 }
283
284 return bReturn;
285}
286
288{
290
291 SdrObjKind eKind;
292
293 switch (nSlotId)
294 {
295 case SID_DRAW_POLYGON_NOFILL:
296 case SID_DRAW_XPOLYGON_NOFILL:
297 {
298 eKind = SdrObjKind::PolyLine;
299 }
300 break;
301
302 case SID_DRAW_POLYGON:
303 case SID_DRAW_XPOLYGON:
304 {
305 eKind = SdrObjKind::Polygon;
306 }
307 break;
308
309 case SID_DRAW_BEZIER_NOFILL:
310 {
311 eKind = SdrObjKind::PathLine;
312 }
313 break;
314
315 case SID_DRAW_BEZIER_FILL:
316 {
317 eKind = SdrObjKind::PathFill;
318 }
319 break;
320
321 case SID_DRAW_FREELINE_NOFILL:
322 {
323 eKind = SdrObjKind::FreehandLine;
324 }
325 break;
326
327 case SID_DRAW_FREELINE:
328 {
329 eKind = SdrObjKind::FreehandFill;
330 }
331 break;
332
333 default:
334 {
335 eKind = SdrObjKind::PathLine;
336 }
337 break;
338 }
339
340 mpView->SetCurrentObj(eKind);
341
343}
344
346{
348
350}
351
353{
355
356 mpViewShell->GetViewShellBase().GetToolBarManager()->SelectionHasChanged(
358 *mpView);
359}
360
361namespace {
364Color strToColor(std::u16string_view sColor)
365{
366 Color aColor = COL_AUTO;
367
368 if (sColor == u"COL_GRAY")
369 aColor = COL_GRAY;
370 else if (sColor == u"COL_GRAY3")
371 aColor = COL_GRAY3;
372 else if (sColor == u"COL_GRAY7")
373 aColor = COL_GRAY7;
374
375 return aColor;
376}
377}
378
380{
381 if (nSlotId == SID_DRAW_FREELINE_NOFILL)
382 {
383 if (mnTransparence > 0 && mnTransparence <= 100)
385 if (!msColor.isEmpty())
386 rAttr.Put(XLineColorItem(OUString(), strToColor(msColor)));
387 if (mnWidth > 0)
388 rAttr.Put(XLineWidthItem(mnWidth));
389 if (!msShapeName.isEmpty())
390 pObj->SetName(msShapeName);
391 }
392}
393
398{
399 nEditMode = nMode;
400 ForcePointer();
401
403 rBindings.Invalidate(SID_BEZIER_MOVE);
404 rBindings.Invalidate(SID_BEZIER_INSERT);
405}
406
407rtl::Reference<SdrObject> FuConstructBezierPolygon::CreateDefaultObject(const sal_uInt16 nID, const ::tools::Rectangle& rRectangle)
408{
409 // case SID_DRAW_POLYGON:
410 // case SID_DRAW_POLYGON_NOFILL:
411 // case SID_DRAW_XPOLYGON:
412 // case SID_DRAW_XPOLYGON_NOFILL:
413 // case SID_DRAW_FREELINE:
414 // case SID_DRAW_FREELINE_NOFILL:
415 // case SID_DRAW_BEZIER_FILL: // BASIC
416 // case SID_DRAW_BEZIER_NOFILL: // BASIC
417
422
423 if(pObj)
424 {
425 if( auto pPathObj = dynamic_cast< SdrPathObj *>( pObj.get() ) )
426 {
428
429 switch(nID)
430 {
431 case SID_DRAW_BEZIER_FILL:
432 {
433 const sal_Int32 nWdt(rRectangle.GetWidth() / 2);
434 const sal_Int32 nHgt(rRectangle.GetHeight() / 2);
435 const basegfx::B2DPolygon aInnerPoly(basegfx::utils::createPolygonFromEllipse(basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Center().Y()), nWdt, nHgt));
436
437 aPoly.append(aInnerPoly);
438 break;
439 }
440 case SID_DRAW_BEZIER_NOFILL:
441 {
442 basegfx::B2DPolygon aInnerPoly;
443
444 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left(), rRectangle.Bottom()));
445
446 const basegfx::B2DPoint aCenterBottom(rRectangle.Center().X(), rRectangle.Bottom());
447 aInnerPoly.appendBezierSegment(
448 aCenterBottom,
449 aCenterBottom,
450 basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Center().Y()));
451
452 const basegfx::B2DPoint aCenterTop(rRectangle.Center().X(), rRectangle.Top());
453 aInnerPoly.appendBezierSegment(
454 aCenterTop,
455 aCenterTop,
456 basegfx::B2DPoint(rRectangle.Right(), rRectangle.Top()));
457
458 aPoly.append(aInnerPoly);
459 break;
460 }
461 case SID_DRAW_FREELINE:
462 case SID_DRAW_FREELINE_NOFILL:
463 {
464 basegfx::B2DPolygon aInnerPoly;
465
466 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left(), rRectangle.Bottom()));
467
468 aInnerPoly.appendBezierSegment(
469 basegfx::B2DPoint(rRectangle.Left(), rRectangle.Top()),
470 basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Top()),
471 basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Center().Y()));
472
473 aInnerPoly.appendBezierSegment(
474 basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Bottom()),
475 basegfx::B2DPoint(rRectangle.Right(), rRectangle.Bottom()),
476 basegfx::B2DPoint(rRectangle.Right(), rRectangle.Top()));
477
478 if(SID_DRAW_FREELINE == nID)
479 {
480 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Right(), rRectangle.Bottom()));
481 }
482 else
483 {
484 aInnerPoly.setClosed(true);
485 }
486
487 aPoly.append(aInnerPoly);
488 break;
489 }
490 case SID_DRAW_XPOLYGON:
491 case SID_DRAW_XPOLYGON_NOFILL:
492 {
493 basegfx::B2DPolygon aInnerPoly;
494
495 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left(), rRectangle.Bottom()));
496 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left(), rRectangle.Top()));
497 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Top()));
498 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Center().Y()));
499 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Right(), rRectangle.Center().Y()));
500 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Right(), rRectangle.Bottom()));
501
502 if(SID_DRAW_XPOLYGON_NOFILL == nID)
503 {
504 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Bottom()));
505 }
506 else
507 {
508 aInnerPoly.setClosed(true);
509 }
510
511 aPoly.append(aInnerPoly);
512 break;
513 }
514 case SID_DRAW_POLYGON:
515 case SID_DRAW_POLYGON_NOFILL:
516 {
517 basegfx::B2DPolygon aInnerPoly;
518 const sal_Int32 nWdt(rRectangle.GetWidth());
519 const sal_Int32 nHgt(rRectangle.GetHeight());
520
521 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left(), rRectangle.Bottom()));
522 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left() + (nWdt * 30) / 100, rRectangle.Top() + (nHgt * 70) / 100));
523 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left(), rRectangle.Top() + (nHgt * 15) / 100));
524 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left() + (nWdt * 65) / 100, rRectangle.Top()));
525 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left() + nWdt, rRectangle.Top() + (nHgt * 30) / 100));
526 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left() + (nWdt * 80) / 100, rRectangle.Top() + (nHgt * 50) / 100));
527 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Left() + (nWdt * 80) / 100, rRectangle.Top() + (nHgt * 75) / 100));
528 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Bottom(), rRectangle.Right()));
529
530 if(SID_DRAW_POLYGON_NOFILL == nID)
531 {
532 aInnerPoly.append(basegfx::B2DPoint(rRectangle.Center().X(), rRectangle.Bottom()));
533 }
534 else
535 {
536 aInnerPoly.setClosed(true);
537 }
538
539 aPoly.append(aInnerPoly);
540 break;
541 }
542 }
543
544 pPathObj->SetPathPoly(aPoly);
545 }
546 else
547 {
548 OSL_FAIL("Object is NO path object");
549 }
550
551 pObj->SetLogicRect(rRectangle);
552 }
553
554 return pObj;
555}
556
557} // end of namespace sd
558
559/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
sal_uInt16 GetValue() const
virtual bool MouseButtonDown(const MouseEvent &_rMEvt, OutputDevice *_pWin) override
bool IsMod1() const
bool IsLeft() const
SAL_DLLPRIVATE SfxItemPool & GetPool()
Definition: drawdoc.hxx:237
std::shared_ptr< sd::MainSequence > const & getMainSequence()
returns a helper class to manipulate effects inside the main sequence
void SetEditMode(SdrViewEditMode eMode)
SdrInventor GetCurrentObjInventor() const
SdrObjKind GetCurrentObjIdentifier() const
void SetCurrentObj(SdrObjKind nIdent, SdrInventor nInvent=SdrInventor::Default)
SdrObject * GetCreateObj() const
bool IsInsObjPoint() const
bool BegInsObjPoint(const Point &rPnt, bool bNewObj)
bool EndInsObjPoint(SdrCreateCmd eCmd)
static rtl::Reference< SdrObject > MakeNewObject(SdrModel &rSdrModel, SdrInventor nInventor, SdrObjKind nObjIdentifier, const tools::Rectangle *pSnapRect=nullptr)
SdrObject * GetObj(size_t nNum) const
size_t GetObjCount() const
void SetMergedItemSet(const SfxItemSet &rSet, bool bClearAllItems=false)
SdrPage * getSdrPageFromSdrObject() const
virtual void SetName(const OUString &rStr, const bool bSetChanged=true)
SdrObjList * GetObjList() const
SdrModel & getSdrModelFromSdrView() const
SdrPageView * GetSdrPageView() const
void EnableExtendedMouseEventDispatcher(bool bOn)
virtual void DeleteMarked()
virtual bool MouseButtonUp(const MouseEvent &rMEvt, OutputDevice *pWin) override
SdrHitKind PickAnything(const MouseEvent &rMEvt, SdrMouseEventKind nMouseDownOrMoveOrUp, SdrViewEvent &rVEvt) const
void Invalidate(sal_uInt16 nId)
bool GetValue() const
const SfxPoolItem * Execute(sal_uInt16 nSlot, SfxCallMode nCall=SfxCallMode::SLOT, const SfxPoolItem **pArgs=nullptr, sal_uInt16 nModi=0, const SfxPoolItem **pInternalArgs=nullptr)
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxItemSet * GetArgs() const
const T * GetArg(sal_uInt16 nSlotId) const
const css::uno::Any & GetValue() const
SfxBindings & GetBindings()
SfxDispatcher * GetDispatcher()
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
void setClosed(bool bNew)
void appendBezierSegment(const basegfx::B2DPoint &rNextControlPoint, const basegfx::B2DPoint &rPrevControlPoint, const basegfx::B2DPoint &rPoint)
FuConstructBezierPolygon(ViewShell *pViewSh, ::sd::Window *pWin, ::sd::View *pView, SdDrawDocument *pDoc, SfxRequest &rReq)
Definition: fuconbez.cxx:61
virtual rtl::Reference< SdrObject > CreateDefaultObject(const sal_uInt16 nID, const ::tools::Rectangle &rRectangle) override
Definition: fuconbez.cxx:407
virtual void Deactivate() override
deactivates the function
Definition: fuconbez.cxx:345
virtual void Activate() override
activates the function
Definition: fuconbez.cxx:287
void DoExecute(SfxRequest &rReq) override
Definition: fuconbez.cxx:102
virtual void SelectionHasChanged() override
Definition: fuconbez.cxx:352
virtual bool MouseButtonUp(const MouseEvent &rMEvt) override
Definition: fuconbez.cxx:191
void SetAttributes(SfxItemSet &rAttr, SdrObject *pObj)
set attribute for the object to be created
Definition: fuconbez.cxx:379
static rtl::Reference< FuPoor > Create(ViewShell *pViewSh, ::sd::Window *pWin, ::sd::View *pView, SdDrawDocument *pDoc, SfxRequest &rReq, bool bPermanent)
Definition: fuconbez.cxx:93
virtual bool MouseButtonDown(const MouseEvent &rMEvt) override
Definition: fuconbez.cxx:141
void SetEditMode(sal_uInt16 nMode)
Set current bezier edit mode.
Definition: fuconbez.cxx:397
virtual bool MouseButtonUp(const MouseEvent &rMEvt) override
Definition: fuconstr.cxx:128
virtual bool MouseButtonDown(const MouseEvent &rMEvt) override
Definition: fuconstr.cxx:64
virtual void Deactivate() override
deactivates the function
Definition: fuconstr.cxx:227
virtual void Activate() override
activates the function
Definition: fuconstr.cxx:221
void SetStyleSheet(SfxItemSet &rAttr, SdrObject *pObj)
set style sheet for the object to be created
Definition: fuconstr.cxx:249
bool IsIgnoreUnexpectedMouseButtonUp()
Definition: fuconstr.cxx:233
bool bPermanent
Definition: fudraw.hxx:76
void SetPermanent(bool bSet)
Definition: fudraw.hxx:52
bool bMBDown
Definition: fudraw.hxx:73
virtual void ForcePointer(const MouseEvent *pMEvt=nullptr)
Toggle mouse-pointer.
Definition: fudraw.cxx:450
SdDrawDocument * mpDoc
Definition: fupoor.hxx:148
VclPtr< ::sd::Window > mpWindow
Definition: fupoor.hxx:146
Point aMDPos
position of MouseButtonDown
Definition: fupoor.hxx:159
ViewShell * mpViewShell
Definition: fupoor.hxx:145
virtual void SelectionHasChanged()
Definition: fupoor.cxx:868
sal_uInt16 nSlotId
Definition: fupoor.hxx:150
::sd::View * mpView
Definition: fupoor.hxx:144
virtual void DoExecute(SfxRequest &rReq)
Definition: fupoor.cxx:1129
std::shared_ptr< ToolBarManager > const & GetToolBarManager() const
Base class of the stacked shell hierarchy.
Definition: ViewShell.hxx:92
SD_DLLPUBLIC ViewShellBase & GetViewShellBase() const
Definition: viewshel.cxx:1397
SD_DLLPUBLIC SfxViewFrame * GetViewFrame() const
Definition: viewshel.cxx:118
An SdWindow contains the actual working area of ViewShell.
Definition: Window.hxx:45
constexpr ::Color COL_GRAY(0x80, 0x80, 0x80)
constexpr ::Color COL_GRAY3(0xCC, 0xCC, 0xCC)
constexpr ::Color COL_GRAY7(0x66, 0x66, 0x66)
constexpr ::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
int nCount
B2DPolygon createPolygonFromEllipse(const B2DPoint &rCenter, double fRadiusX, double fRadiusY, sal_uInt32 nStartQuadrant=0)
std::shared_ptr< CustomAnimationEffect > CustomAnimationEffectPtr
double mnWidth
SdrEventKind meEvent
SdrHitKind
SdrObjKind