21 #include <com/sun/star/awt/XWindow.hpp>
22 #include <com/sun/star/beans/XPropertySet.hpp>
23 #include <com/sun/star/awt/PosSize.hpp>
24 #include <com/sun/star/util/XModeChangeBroadcaster.hpp>
61 mpObjectContact(nullptr),
62 mrPageView(rPageView),
63 mpPaintWindow(&rPaintWindow),
64 mpOriginalPaintWindow(nullptr)
72 if (!
mpImpl->mxControlContainer.is() && _bCreateIfNecessary)
90 uno::Reference< awt::XControl > xControl(
mpImpl->mxControlContainer, uno::UNO_QUERY);
93 uno::Reference< uno::XInterface > xContext = xControl->getContext();
96 xControl->createPeer( uno::Reference<awt::XToolkit>(), uno::Reference<awt::XWindowPeer>() );
104 const_cast< SdrPageWindow*
>( this )->
mpImpl->mxControlContainer.set(xFactory->createInstance(
"com.sun.star.awt.UnoControlContainer"), uno::UNO_QUERY);
105 uno::Reference< awt::XControlModel >
xModel(xFactory->createInstance(
"com.sun.star.awt.UnoControlContainerModel"), uno::UNO_QUERY);
106 uno::Reference< awt::XControl > xControl(
mpImpl->mxControlContainer, uno::UNO_QUERY);
108 xControl->setModel(
xModel);
114 uno::Reference< awt::XWindow > xContComp(
mpImpl->mxControlContainer, uno::UNO_QUERY);
116 xContComp->setPosSize(aPosPix.
X(), aPosPix.
Y(), aSizePix.
Width(), aSizePix.
Height(), awt::PosSize::POSSIZE);
120 if ( pViewAsFormView )
123 return mpImpl->mxControlContainer;
127 mpImpl(new
Impl(rPageView, rPaintWindow))
136 if (
mpImpl->mxControlContainer.is())
142 if ( pViewAsFormView )
146 uno::Reference< lang::XComponent >
xComponent(
mpImpl->mxControlContainer, uno::UNO_QUERY);
147 xComponent->dispose();
153 return mpImpl->mrPageView;
158 return *
mpImpl->mpPaintWindow;
163 return mpImpl->mpOriginalPaintWindow;
175 mpImpl->mpPaintWindow = &rPaintWindow;
180 DBG_ASSERT(
mpImpl->mpOriginalPaintWindow,
"SdrPageWindow::unpatchPaintWindow: paint window not patched!" );
181 if (
mpImpl->mpOriginalPaintWindow)
184 mpImpl->mpOriginalPaintWindow =
nullptr;
230 if(aCandidate.areControlPointsUsed())
235 if(aCandidate.count())
237 const sal_uInt32 nLoopCount(aCandidate.isClosed() ? aCandidate.count() : aCandidate.count() - 1);
241 for(sal_uInt32
a(0);
a < nLoopCount;
a++)
244 const basegfx::B2DPoint aBEnd(aCandidate.getB2DPoint((a + 1) % aCandidate.count()));
259 if(dynamic_cast<const SdrPathObj*>( pObjA))
270 if(dynamic_cast<const SdrPathObj*>( pObjB))
274 aPolyB.
append(aCandidate);
278 if(aPolyA.count() && aPolyA.isClosed() && aPolyB.
count())
284 for(
auto const& rPolygon : aResult)
289 Color aColor(nR, nG, nB);
290 impPaintStrokePolygon(rPolygon, rOutDev, aColor);
297 #endif // CLIPPER_TEST
311 SdrLayerIDSet aProcessLayers = bPrinter ?
mpImpl->mrPageView.GetPrintableLayers() :
mpImpl->mrPageView.GetVisibleLayers();
323 aProcessLayers.
Clear(nControlLayerId);
349 #endif // CLIPPER_TEST
365 SdrLayerIDSet aProcessLayers = bPrinter ?
mpImpl->mrPageView.GetPrintableLayers() :
mpImpl->mrPageView.GetVisibleLayers();
368 if(aProcessLayers.
IsSet(*pId))
373 const bool bControlLayerProcessingActive(nControlLayerId == *pId);
386 aProcessLayers.
Set(*pId);
424 aDiscreteRange.
grow(1.0);
428 static_cast<long>(floor(aDiscreteRange.
getMinX())),
429 static_cast<long>(floor(aDiscreteRange.
getMinY())),
430 static_cast<long>(ceil(aDiscreteRange.
getMaxX())),
431 static_cast<long>(ceil(aDiscreteRange.
getMaxY())));
444 static_cast<long>(floor(rRange.
getMinX())),
445 static_cast<long>(floor(rRange.
getMinY())),
446 static_cast<long>(ceil(rRange.
getMaxX())),
447 static_cast<long>(ceil(rRange.
getMaxY())));
459 if (!
mpImpl->mpObjectContact)
462 const_cast<SdrPageWindow&>(*
this),
463 "svx::svdraw::SdrPageWindow mpObjectContact");
466 return *
mpImpl->mpObjectContact;
471 if (!
mpImpl->mpObjectContact)
475 "svx::svdraw::SdrPageWindow mpObjectContact" );
478 return *
mpImpl->mpObjectContact;
483 return mpImpl->mpObjectContact !=
nullptr;
489 if (
mpImpl->mpObjectContact)
491 delete mpImpl->mpObjectContact;
492 mpImpl->mpObjectContact =
nullptr;
499 DBG_ASSERT( pOC,
"SdrPageWindow::SetDesignMode: invalid object contact!" );
rtl::Reference< sdr::overlay::OverlayManager > const & GetOverlayManager() const
SdrPaintWindow * mpOriginalPaintWindow
const SdrPaintWindow * GetOriginalPaintWindow() const
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
void unpatchPaintWindow()
bool IsMapModeEnabled() const
SdrObject * GetObj(size_t nNum) const
css::uno::Reference< css::awt::XControlContainer > const & GetControlContainer(bool _bCreateIfNecessary=true) const
size_t GetObjCount() const
sdr::contact::ObjectContact * mpObjectContact
const MapMode & GetMapMode() const
static css::uno::Reference< css::awt::XControlContainer > CreateControlContainer(vcl::Window *pWindow)
void EnableMapMode(bool bEnable=true)
B2DPolyPolygon clipPolyPolygonOnPolyPolygon(const B2DPolyPolygon &rCandidate, const B2DPolyPolygon &rClip, bool bInside, bool bStroke)
void SetRedrawRegion(const vcl::Region &rNew)
void RedrawLayer(const SdrLayerID *pId, sdr::contact::ViewObjectContactRedirector *pRedirector, basegfx::B2IRectangle const *)
static void notifyInvalidation(SfxViewShell const *pThisView, const OString &rPayload)
BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix &rMatrix)
bool OutputToWindow() const
bool IsPagePaintingAllowed() const
static SfxViewShell * Current()
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)
css::uno::Reference< css::lang::XComponent > xComponent
void ResetObjectContact()
const OUString & GetControlLayerName() const
#define DBG_ASSERT(sCon, aError)
Impl(SdrPageView &rPageView, SdrPaintWindow &rPaintWindow)
const vcl::Region & GetRedrawRegion() const
Size GetOutputSizePixel() const
const sdr::contact::ObjectContact & GetObjectContact() const
virtual sdr::contact::ObjectContact * createViewSpecificObjectContact(SdrPageWindow &rPageWindow, const sal_Char *pDebugName) const
void RedrawAll(sdr::contact::ViewObjectContactRedirector *pRedirector)
void PrepareRedraw(const vcl::Region &rReg)
void patchPaintWindow(SdrPaintWindow &rPaintWindow)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
bool IsSet(SdrLayerID a) const
Reference< XMultiServiceFactory > getProcessServiceFactory()
SdrPageWindow(const SdrPageWindow &)=delete
B2DPolygon adaptiveSubdivideByAngle(const B2DPolygon &rCandidate, double fAngleBound)
SdrPage * GetPage() const
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
bool IsPrintPreview() const
const Point & GetOrigin() const
bool IsAntiAliasing() const
Reference< XSingleServiceFactory > xFactory
Reference< XModel > xModel
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
B2DPolyPolygon correctOrientations(const B2DPolyPolygon &rCandidate)
const SdrLayerAdmin & GetLayerAdmin() const
virtual void InvalidateOneWin(OutputDevice &rWin)
If the View should not call Invalidate() on the windows, override the following 2 methods and do some...
SdrLayerID GetLayerID(const OUString &rName) const
basegfx::B2DHomMatrix GetViewTransformation() const
SdrModel * GetModel() const
OutputDevice & GetOutputDevice() const
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