LibreOffice Module svx (master)  1
sdrpagewindow.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 <svx/sdrpagewindow.hxx>
21 #include <com/sun/star/awt/XWindow.hpp>
22 #include <com/sun/star/awt/PosSize.hpp>
23 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
24 #include <comphelper/lok.hxx>
27 #include <svx/svdview.hxx>
28 #include <svx/svdpagv.hxx>
29 #include <svx/sdrpaintwindow.hxx>
32 #include <svx/fmview.hxx>
33 #include <sfx2/lokhelper.hxx>
34 #include <tools/debug.hxx>
35 #include <vcl/window.hxx>
36 
37 using namespace ::com::sun::star;
38 
40 {
41  // #110094# ObjectContact section
43 
44  // the SdrPageView this window belongs to
46 
47  // the PaintWindow to paint on. Here is access to OutDev etc.
48  // #i72752# change to pointer to allow patcing it in DrawLayer() if necessary
51 
52  // UNO stuff for xControls
53  uno::Reference<awt::XControlContainer> mxControlContainer;
54 
55  Impl( SdrPageView& rPageView, SdrPaintWindow& rPaintWindow ) :
56  mpObjectContact(nullptr),
57  mrPageView(rPageView),
58  mpPaintWindow(&rPaintWindow),
59  mpOriginalPaintWindow(nullptr)
60  {
61  }
62 };
63 
64 
65 uno::Reference<awt::XControlContainer> const & SdrPageWindow::GetControlContainer( bool _bCreateIfNecessary ) const
66 {
67  if (!mpImpl->mxControlContainer.is() && _bCreateIfNecessary)
68  {
69  SdrView& rView = GetPageView().GetView();
70 
72  if ( rPaintWindow.OutputToWindow() && !rView.IsPrintPreview() )
73  {
74  vcl::Window* pWindow = rPaintWindow.GetOutputDevice().GetOwnerWindow();
75  const_cast< SdrPageWindow* >( this )->mpImpl->mxControlContainer = VCLUnoHelper::CreateControlContainer( pWindow );
76 
77  // #100394# xC->setVisible triggers window->Show() and this has
78  // problems when the view is not completely constructed which may
79  // happen when loading. This leads to accessibility broadcasts which
80  // throw asserts due to the not finished view. All this chain can be avoided
81  // since xC->setVisible is here called only for the side effect in
82  // UnoControlContainer::setVisible(...) which calls createPeer(...).
83  // This will now be called directly from here.
84 
85  uno::Reference< awt::XControl > xControl(mpImpl->mxControlContainer, uno::UNO_QUERY);
86  if(xControl.is())
87  {
88  uno::Reference< uno::XInterface > xContext = xControl->getContext();
89  if(!xContext.is())
90  {
91  xControl->createPeer( uno::Reference<awt::XToolkit>(), uno::Reference<awt::XWindowPeer>() );
92  }
93  }
94  }
95  else
96  {
97  // Printer and VirtualDevice, or rather: no OutDev
98  uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
99  const_cast< SdrPageWindow* >( this )->mpImpl->mxControlContainer.set(xFactory->createInstance("com.sun.star.awt.UnoControlContainer"), uno::UNO_QUERY);
100  uno::Reference< awt::XControlModel > xModel(xFactory->createInstance("com.sun.star.awt.UnoControlContainerModel"), uno::UNO_QUERY);
101  uno::Reference< awt::XControl > xControl(mpImpl->mxControlContainer, uno::UNO_QUERY);
102  if (xControl.is())
103  xControl->setModel(xModel);
104 
105  OutputDevice& rOutDev = rPaintWindow.GetOutputDevice();
106  Point aPosPix = rOutDev.GetMapMode().GetOrigin();
107  Size aSizePix = rOutDev.GetOutputSizePixel();
108 
109  uno::Reference< awt::XWindow > xContComp(mpImpl->mxControlContainer, uno::UNO_QUERY);
110  if( xContComp.is() )
111  xContComp->setPosSize(aPosPix.X(), aPosPix.Y(), aSizePix.Width(), aSizePix.Height(), awt::PosSize::POSSIZE);
112  }
113 
114  FmFormView* pViewAsFormView = dynamic_cast< FmFormView* >( &rView );
115  if ( pViewAsFormView )
116  pViewAsFormView->InsertControlContainer(mpImpl->mxControlContainer);
117  }
118  return mpImpl->mxControlContainer;
119 }
120 
122  mpImpl(new Impl(rPageView, rPaintWindow))
123 {
124 }
125 
127 {
128  // #i26631#
130 
131  if (!mpImpl->mxControlContainer.is())
132  return;
133 
134  auto & rView = static_cast<SdrPaintView &>(GetPageView().GetView());
135 
136  // notify derived views
137  FmFormView* pViewAsFormView = dynamic_cast< FmFormView* >( &rView );
138  if ( pViewAsFormView )
139  pViewAsFormView->RemoveControlContainer(mpImpl->mxControlContainer);
140 
141  // dispose the control container
142  uno::Reference< lang::XComponent > xComponent(mpImpl->mxControlContainer, uno::UNO_QUERY);
143  xComponent->dispose();
144 }
145 
147 {
148  return mpImpl->mrPageView;
149 }
150 
152 {
153  return *mpImpl->mpPaintWindow;
154 }
155 
157 {
158  return mpImpl->mpOriginalPaintWindow;
159 }
160 
161 // OVERLAY MANAGER
163 {
165 }
166 
168 {
169  if (!mpImpl->mpOriginalPaintWindow)
170  {
171  // first patch
172  mpImpl->mpOriginalPaintWindow = mpImpl->mpPaintWindow;
173  mpImpl->mpPaintWindow = &rPaintWindow;
174  mpImpl->mpOriginalPaintWindow->setPatched(&rPaintWindow);
175  return mpImpl->mpOriginalPaintWindow;
176  }
177  else
178  {
179  // second or more patch
180  auto pPreviousPaintWindow = mpImpl->mpPaintWindow;
181  mpImpl->mpPaintWindow = &rPaintWindow;
182  mpImpl->mpOriginalPaintWindow->setPatched(&rPaintWindow);
183  return pPreviousPaintWindow;
184  }
185 }
186 
188 {
189  if (pPreviousPaintWindow == mpImpl->mpOriginalPaintWindow)
190  {
191  // first patch
192  mpImpl->mpPaintWindow = mpImpl->mpOriginalPaintWindow;
193  mpImpl->mpOriginalPaintWindow->setPatched(nullptr);
194  mpImpl->mpOriginalPaintWindow = nullptr;
195  }
196  else
197  {
198  // second or more patch
199  mpImpl->mpPaintWindow = pPreviousPaintWindow;
200  mpImpl->mpOriginalPaintWindow->setPatched(pPreviousPaintWindow);
201  }
202 }
203 
205 {
206  // give OC the chance to do ProcessDisplay preparations
207  if(HasObjectContact())
208  {
210  }
211 }
212 
214 {
215  // give OC the chance to do ProcessDisplay preparations
216  if(HasObjectContact())
217  {
219  }
220 
221  // if necessary, remember changed RedrawArea at PaintWindow for usage with
222  // overlay and PreRenderDevice stuff
224 }
225 
226 
227 // clip test
228 #ifdef CLIPPER_TEST
229 #include <svx/svdopath.hxx>
231 #include <tools/helpers.hxx>
236 
237 // for ::std::sort
238 #include <algorithm>
239 
240 namespace
241 {
242  void impPaintStrokePolygon(const basegfx::B2DPolygon& rCandidate, OutputDevice& rOutDev, Color aColor)
243  {
244  basegfx::B2DPolygon aCandidate(rCandidate);
245 
246  if(aCandidate.areControlPointsUsed())
247  {
248  aCandidate = basegfx::utils::adaptiveSubdivideByAngle(rCandidate);
249  }
250 
251  if(aCandidate.count())
252  {
253  const sal_uInt32 nLoopCount(aCandidate.isClosed() ? aCandidate.count() : aCandidate.count() - 1);
254  rOutDev.SetFillColor();
255  rOutDev.SetLineColor(aColor);
256 
257  for(sal_uInt32 a(0); a < nLoopCount; a++)
258  {
259  const basegfx::B2DPoint aBStart(aCandidate.getB2DPoint(a));
260  const basegfx::B2DPoint aBEnd(aCandidate.getB2DPoint((a + 1) % aCandidate.count()));
261  const Point aStart(FRound(aBStart.getX()), FRound(aBStart.getY()));
262  const Point aEnd(FRound(aBEnd.getX()), FRound(aBEnd.getY()));
263  rOutDev.DrawLine(aStart, aEnd);
264  }
265  }
266  }
267 
268  void impTryTest(const SdrPageView& rPageView, OutputDevice& rOutDev)
269  {
270  if(rPageView.GetPage() && rPageView.GetPage()->GetObjCount() >= 2)
271  {
272  SdrPage* pPage = rPageView.GetPage();
273  SdrObject* pObjA = pPage->GetObj(0);
274 
275  if(dynamic_cast<const SdrPathObj*>( pObjA))
276  {
277  basegfx::B2DPolyPolygon aPolyA(pObjA->GetPathPoly());
278  aPolyA = basegfx::utils::correctOrientations(aPolyA);
279 
281 
282  for(sal_uInt32 a(1); a < rPageView.GetPage()->GetObjCount(); a++)
283  {
284  SdrObject* pObjB = pPage->GetObj(a);
285 
286  if(dynamic_cast<const SdrPathObj*>( pObjB))
287  {
288  basegfx::B2DPolyPolygon aCandidate(pObjB->GetPathPoly());
289  aCandidate = basegfx::utils::correctOrientations(aCandidate);
290  aPolyB.append(aCandidate);
291  }
292  }
293 
294  if(aPolyA.count() && aPolyA.isClosed() && aPolyB.count())
295  {
296  // poly A is the clipregion, clip poly b against it. Algo depends on
297  // poly b being closed.
299 
300  for(auto const& rPolygon : aResult)
301  {
305  Color aColor(nR, nG, nB);
306  impPaintStrokePolygon(rPolygon, rOutDev, aColor);
307  }
308  }
309  }
310  }
311  }
312 } // end of anonymous namespace
313 #endif // CLIPPER_TEST
314 
315 
317 {
318  // set Redirector
320 
321  // set PaintingPageView
322  const SdrView& rView = mpImpl->mrPageView.GetView();
323  SdrModel& rModel = *(rView.GetModel());
324 
325  // get to be processed layers
326  const bool bPrinter(GetPaintWindow().OutputToPrinter());
327  SdrLayerIDSet aProcessLayers = bPrinter ? mpImpl->mrPageView.GetPrintableLayers() : mpImpl->mrPageView.GetVisibleLayers();
328 
329  // create PaintInfoRec; use Rectangle only temporarily
330  const vcl::Region& rRegion = GetPaintWindow().GetRedrawRegion();
331 
332  // create processing data
333  sdr::contact::DisplayInfo aDisplayInfo;
334 
335  // Draw all layers. do NOT draw form layer from CompleteRedraw, this is done separately
336  // as a single layer paint
337  const SdrLayerAdmin& rLayerAdmin = rModel.GetLayerAdmin();
338  const SdrLayerID nControlLayerId = rLayerAdmin.GetLayerID(rLayerAdmin.GetControlLayerName());
339  aProcessLayers.Clear(nControlLayerId);
340 
341  // still something to paint?
342  if(!aProcessLayers.IsEmpty())
343  {
344  aDisplayInfo.SetProcessLayers(aProcessLayers);
345 
346  // Set region as redraw area
347  aDisplayInfo.SetRedrawArea(rRegion);
348 
349  // Draw/Impress
350  aDisplayInfo.SetPageProcessingActive(rView.IsPagePaintingAllowed()); // #i72889#
351 
352  // paint page
353  GetObjectContact().ProcessDisplay(aDisplayInfo);
354  }
355 
356  // reset redirector
358 
359  // LineClip test
360 #ifdef CLIPPER_TEST
361  if(true)
362  {
363  impTryTest(GetPageView(), GetPaintWindow().GetOutputDevice());
364  }
365 #endif // CLIPPER_TEST
366 }
367 
370  basegfx::B2IRectangle const*const pPageFrame)
371 {
372  // set redirector
374 
375  // set PaintingPageView
376  const SdrView& rView = mpImpl->mrPageView.GetView();
377  SdrModel& rModel = *(rView.GetModel());
378 
379  // get the layers to process
380  const bool bPrinter(GetPaintWindow().OutputToPrinter());
381  SdrLayerIDSet aProcessLayers = bPrinter ? mpImpl->mrPageView.GetPrintableLayers() : mpImpl->mrPageView.GetVisibleLayers();
382 
383  // is the given layer visible at all?
384  if(aProcessLayers.IsSet(*pId))
385  {
386  // find out if we are painting the ControlLayer
387  const SdrLayerAdmin& rLayerAdmin = rModel.GetLayerAdmin();
388  const SdrLayerID nControlLayerId = rLayerAdmin.GetLayerID(rLayerAdmin.GetControlLayerName());
389  const bool bControlLayerProcessingActive(nControlLayerId == *pId);
390 
391  // create PaintInfoRec, use Rectangle only temporarily
392  const vcl::Region& rRegion = GetPaintWindow().GetRedrawRegion();
393 
394  // create processing data
395  sdr::contact::DisplayInfo aDisplayInfo;
396 
397  // is it the control layer? If Yes, set flag
398  aDisplayInfo.SetControlLayerProcessingActive(bControlLayerProcessingActive);
399 
400  // Draw just the one given layer
401  aProcessLayers.ClearAll();
402  aProcessLayers.Set(*pId);
403 
404  aDisplayInfo.SetProcessLayers(aProcessLayers);
405 
406  // Set region as redraw area
407  aDisplayInfo.SetRedrawArea(rRegion);
408 
409  // Writer or calc, coming from original RedrawOneLayer.
410  // #i72889# no page painting for layer painting
411  aDisplayInfo.SetPageProcessingActive(false);
412 
413  if (pPageFrame) // Writer page frame for anchor based clipping
414  {
415  aDisplayInfo.SetWriterPageFrame(*pPageFrame);
416  }
417 
418  // paint page
419  GetObjectContact().ProcessDisplay(aDisplayInfo);
420  }
421 
422  // reset redirector
424 }
425 
426 // Invalidate call, used from ObjectContact(OfPageView) in InvalidatePartOfView(...)
428 {
429  if (GetPageView().IsVisible() && GetPaintWindow().OutputToWindow())
430  {
431  const SvtOptionsDrawinglayer aDrawinglayerOpt;
432  OutputDevice& rWindow(GetPaintWindow().GetOutputDevice());
433  basegfx::B2DRange aDiscreteRange(rRange);
434  aDiscreteRange.transform(rWindow.GetViewTransformation());
435 
436  if (aDrawinglayerOpt.IsAntiAliasing())
437  {
438  // invalidate one discrete unit more under the assumption that AA
439  // needs one pixel more
440  aDiscreteRange.grow(1.0);
441  }
442 
443  const tools::Rectangle aVCLDiscreteRectangle(
444  static_cast<tools::Long>(floor(aDiscreteRange.getMinX())),
445  static_cast<tools::Long>(floor(aDiscreteRange.getMinY())),
446  static_cast<tools::Long>(ceil(aDiscreteRange.getMaxX())),
447  static_cast<tools::Long>(ceil(aDiscreteRange.getMaxY())));
448 
449  const bool bWasMapModeEnabled(rWindow.IsMapModeEnabled());
450  rWindow.EnableMapMode(false);
451  GetPageView().GetView().InvalidateOneWin(rWindow, aVCLDiscreteRectangle);
452  rWindow.EnableMapMode(bWasMapModeEnabled);
453  }
455  {
456  // we don't really have to have a paint window with LOK; OTOH we know
457  // that the drawinglayer units are 100ths of mm, so they are easy to
458  // convert to twips
459  const tools::Rectangle aRect100thMM(
460  static_cast<tools::Long>(floor(rRange.getMinX())),
461  static_cast<tools::Long>(floor(rRange.getMinY())),
462  static_cast<tools::Long>(ceil(rRange.getMaxX())),
463  static_cast<tools::Long>(ceil(rRange.getMaxY())));
464 
465  const tools::Rectangle aRectTwips = OutputDevice::LogicToLogic(aRect100thMM, MapMode(MapUnit::Map100thMM), MapMode(MapUnit::MapTwip));
466 
467  if (SfxViewShell* pViewShell = SfxViewShell::Current())
468  SfxLokHelper::notifyInvalidation(pViewShell, aRectTwips.toString());
469  }
470 }
471 
472 // ObjectContact section
474 {
475  if (!mpImpl->mpObjectContact)
476  {
478  const_cast<SdrPageWindow&>(*this),
479  "svx::svdraw::SdrPageWindow mpObjectContact");
480  }
481 
482  return *mpImpl->mpObjectContact;
483 }
484 
486 {
487  if (!mpImpl->mpObjectContact)
488  {
490  *this,
491  "svx::svdraw::SdrPageWindow mpObjectContact" );
492  }
493 
494  return *mpImpl->mpObjectContact;
495 }
496 
498 {
499  return mpImpl->mpObjectContact != nullptr;
500 }
501 
502 // #i26631#
504 {
505  if (mpImpl->mpObjectContact)
506  {
507  delete mpImpl->mpObjectContact;
508  mpImpl->mpObjectContact = nullptr;
509  }
510 }
511 
512 void SdrPageWindow::SetDesignMode( bool _bDesignMode ) const
513 {
515  DBG_ASSERT( pOC, "SdrPageWindow::SetDesignMode: invalid object contact!" );
516  if ( pOC )
517  pOC->SetUNOControlsDesignMode( _bDesignMode );
518 }
519 
520 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
rtl::Reference< sdr::overlay::OverlayManager > const & GetOverlayManager() const
SdrPaintWindow * mpOriginalPaintWindow
void SetWriterPageFrame(basegfx::B2IRectangle const &rPageFrame)
Definition: displayinfo.cxx:47
void Set(SdrLayerID a)
Definition: svdsob.hxx:48
const SdrPaintWindow * GetOriginalPaintWindow() const
virtual void PrepareProcessDisplay()
uno::Reference< awt::XControlContainer > mxControlContainer
rtl::Reference< sdr::overlay::OverlayManager > const & GetOverlayManager() const
Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
SdrView & GetView()
Definition: svdpagv.hxx:135
long Long
bool IsMapModeEnabled() const
SdrObject * GetObj(size_t nNum) const
Definition: svdpage.cxx:770
css::uno::Reference< css::awt::XControlContainer > const & GetControlContainer(bool _bCreateIfNecessary=true) const
size_t GetObjCount() const
Definition: svdpage.cxx:764
sdr::contact::ObjectContact * mpObjectContact
bool IsEmpty() const
Definition: svdlayer.cxx:25
const MapMode & GetMapMode() const
void SetControlLayerProcessingActive(bool bDoPaint)
Definition: displayinfo.cxx:52
static css::uno::Reference< css::awt::XControlContainer > CreateControlContainer(vcl::Window *pWindow)
void EnableMapMode(bool bEnable=true)
double getMaxX() const
B2DPolyPolygon clipPolyPolygonOnPolyPolygon(const B2DPolyPolygon &rCandidate, const B2DPolyPolygon &rClip, bool bInside, bool bStroke)
void SetRedrawRegion(const vcl::Region &rNew)
constexpr tools::Long Width() const
void RedrawLayer(const SdrLayerID *pId, sdr::contact::ViewObjectContactRedirector *pRedirector, basegfx::B2IRectangle const *)
void SetProcessLayers(const SdrLayerIDSet &rSet)
Definition: displayinfo.cxx:36
void RemoveControlContainer(const css::uno::Reference< css::awt::XControlContainer > &xCC)
Definition: fmview.cxx:431
void SetPageProcessingActive(bool bDoPaint)
Definition: displayinfo.cxx:60
BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix &rMatrix)
bool OutputToWindow() const
bool IsPagePaintingAllowed() const
Definition: svdpntv.hxx:208
static SfxViewShell * Current()
void InsertControlContainer(const css::uno::Reference< css::awt::XControlContainer > &xCC)
Definition: fmview.cxx:409
void unpatchPaintWindow(SdrPaintWindow *pPreviousPaintWindow)
double getMaxY() const
void SetUNOControlsDesignMode(bool _bDesignMode) const
sets all UNO controls which are associated with this ObjectContact to design or alive mode...
void DrawLine(const Point &rStartPt, const Point &rEndPt)
void ResetObjectContact()
void grow(double fValue)
void SetLineColor()
SdrPageView & mrPageView
const OUString & GetControlLayerName() const
Definition: svdlayer.hxx:151
#define DBG_ASSERT(sCon, aError)
uno_Any a
SdrPaintWindow * patchPaintWindow(SdrPaintWindow &rPaintWindow)
tools::Long FRound(double fVal)
Impl(SdrPageView &rPageView, SdrPaintWindow &rPaintWindow)
void SetFillColor()
void SetRedrawArea(const vcl::Region &rRegion)
Definition: displayinfo.cxx:42
const vcl::Region & GetRedrawRegion() const
void SetViewObjectContactRedirector(ViewObjectContactRedirector *pNew)
Size GetOutputSizePixel() const
const sdr::contact::ObjectContact & GetObjectContact() const
Abstract DrawObject.
Definition: svdobj.hxx:258
void RedrawAll(sdr::contact::ViewObjectContactRedirector *pRedirector)
void PrepareRedraw(const vcl::Region &rReg)
virtual sdr::contact::ObjectContact * createViewSpecificObjectContact(SdrPageWindow &rPageWindow, const char *pDebugName) const
Definition: svdview.cxx:1526
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
bool IsSet(SdrLayerID a) const
Definition: svdsob.hxx:66
Reference< XMultiServiceFactory > getProcessServiceFactory()
double getMinY() const
sal_uInt32 count() const
SdrPageWindow(const SdrPageWindow &)=delete
B2DPolygon adaptiveSubdivideByAngle(const B2DPolygon &rCandidate, double fAngleBound)
constexpr tools::Long Height() const
SdrPage * GetPage() const
Definition: svdpagv.hxx:171
bool HasObjectContact() const
determines whether there already exists an ObjectContact
int uniform_int_distribution(int a, int b)
SdrPaintWindow * mpPaintWindow
SdrPaintWindow & GetPaintWindow() const
void InvalidatePageWindow(const basegfx::B2DRange &rRange)
std::unique_ptr< Impl > mpImpl
virtual void ProcessDisplay(DisplayInfo &rDisplayInfo)
bool IsPrintPreview() const
Definition: svdpntv.hxx:491
const Point & GetOrigin() const
bool IsAntiAliasing() const
Reference< XSingleServiceFactory > xFactory
Reference< XModel > xModel
double getMinX() const
void ClearAll()
Definition: svdsob.hxx:76
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
Definition: svdpage.hxx:366
B2DPolyPolygon correctOrientations(const B2DPolyPolygon &rCandidate)
const SdrLayerAdmin & GetLayerAdmin() const
Definition: svdmodel.hxx:306
virtual void InvalidateOneWin(OutputDevice &rWin)
If the View should not call Invalidate() on the windows, override the following 2 methods and do some...
Definition: svdpntv.cxx:855
void Clear(SdrLayerID a)
Definition: svdsob.hxx:53
SdrLayerID GetLayerID(const OUString &rName) const
Definition: svdlayer.cxx:228
basegfx::B2DHomMatrix GetViewTransformation() const
SdrModel * GetModel() const
Definition: svdpntv.hxx:265
virtual vcl::Window * GetOwnerWindow() const
OutputDevice & GetOutputDevice() const
static void notifyInvalidation(SfxViewShell const *pThisView, std::string_view rPayload)
void SetDesignMode(bool _bDesignMode) const
sets all elements in the view which support a design and an alive mode into the given mode ...
SdrPageView & GetPageView() const