LibreOffice Module sd (master) 1
PresenterCanvas.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
23#include <com/sun/star/awt/Point.hpp>
24#include <com/sun/star/awt/XWindowListener.hpp>
25#include <com/sun/star/rendering/XSpriteCanvas.hpp>
26#include <com/sun/star/rendering/XBitmap.hpp>
28#include <memory>
29
30namespace sd::presenter { class CanvasUpdateRequester; }
31namespace com::sun::star::awt { class XWindow; }
32namespace com::sun::star::geometry { struct AffineMatrix2D; }
33
34namespace sd::presenter {
35
37 css::rendering::XSpriteCanvas,
38 css::rendering::XBitmap,
39 css::awt::XWindowListener
41
56{
57public:
86 const css::uno::Reference<css::rendering::XSpriteCanvas>& rxUpdateCanvas,
87 const css::uno::Reference<css::awt::XWindow>& rxUpdateWindow,
88 const css::uno::Reference<css::rendering::XCanvas>& rxSharedCanvas,
89 const css::uno::Reference<css::awt::XWindow>& rxSharedWindow,
90 const css::uno::Reference<css::awt::XWindow>& rxWindow);
91 virtual ~PresenterCanvas() override;
94
95 virtual void disposing(std::unique_lock<std::mutex>&) override;
96
97 css::awt::Point GetOffset (const css::uno::Reference<css::awt::XWindow>& rxBaseWindow);
98
102 css::rendering::ViewState MergeViewState (
103 const css::rendering::ViewState& rViewState,
104 const css::awt::Point& raOffset);
105
112 css::uno::Reference<css::rendering::XPolyPolygon2D> UpdateSpriteClip (
113 const css::uno::Reference<css::rendering::XPolyPolygon2D>& rxOriginalClip,
114 const css::geometry::RealPoint2D& rLocation);
115
116 // XCanvas
117
118 virtual void SAL_CALL clear() override;
119
120 virtual void SAL_CALL drawPoint (
121 const css::geometry::RealPoint2D& aPoint,
122 const css::rendering::ViewState& aViewState,
123 const css::rendering::RenderState& aRenderState) override;
124
125 virtual void SAL_CALL drawLine (
126 const css::geometry::RealPoint2D& aStartPoint,
127 const css::geometry::RealPoint2D& aEndPoint,
128 const css::rendering::ViewState& aViewState,
129 const css::rendering::RenderState& aRenderState) override;
130
131 virtual void SAL_CALL drawBezier (
132 const css::geometry::RealBezierSegment2D& aBezierSegment,
133 const css::geometry::RealPoint2D& aEndPoint,
134 const css::rendering::ViewState& aViewState,
135 const css::rendering::RenderState& aRenderState) override;
136
137 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL drawPolyPolygon (
138 const css::uno::Reference< css::rendering::XPolyPolygon2D >& xPolyPolygon,
139 const css::rendering::ViewState& aViewState,
140 const css::rendering::RenderState& aRenderState) override;
141
142 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL strokePolyPolygon (
143 const css::uno::Reference< css::rendering::XPolyPolygon2D >& xPolyPolygon,
144 const css::rendering::ViewState& aViewState,
145 const css::rendering::RenderState& aRenderState,
146 const css::rendering::StrokeAttributes& aStrokeAttributes) override;
147
148 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
150 const css::uno::Reference< css::rendering::XPolyPolygon2D >& xPolyPolygon,
151 const css::rendering::ViewState& aViewState,
152 const css::rendering::RenderState& aRenderState,
153 const css::uno::Sequence< css::rendering::Texture >& aTextures,
154 const css::rendering::StrokeAttributes& aStrokeAttributes) override;
155
156 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
158 const css::uno::Reference<css::rendering::XPolyPolygon2D >& xPolyPolygon,
159 const css::rendering::ViewState& aViewState,
160 const css::rendering::RenderState& aRenderState,
161 const css::uno::Sequence<css::rendering::Texture>& aTextures,
162 const css::uno::Reference<css::geometry::XMapping2D>& xMapping,
163 const css::rendering::StrokeAttributes& aStrokeAttributes) override;
164
165 virtual css::uno::Reference<css::rendering::XPolyPolygon2D> SAL_CALL
167 const css::uno::Reference<css::rendering::XPolyPolygon2D>& xPolyPolygon,
168 const css::rendering::ViewState& aViewState,
169 const css::rendering::RenderState& aRenderState,
170 const css::rendering::StrokeAttributes& aStrokeAttributes) override;
171
172 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
174 const css::uno::Reference<css::rendering::XPolyPolygon2D>& xPolyPolygon,
175 const css::rendering::ViewState& aViewState,
176 const css::rendering::RenderState& aRenderState) override;
177
178 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
180 const css::uno::Reference<css::rendering::XPolyPolygon2D>& xPolyPolygon,
181 const css::rendering::ViewState& aViewState,
182 const css::rendering::RenderState& aRenderState,
183 const css::uno::Sequence<css::rendering::Texture>& xTextures) override;
184
185 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
187 const css::uno::Reference< css::rendering::XPolyPolygon2D >& xPolyPolygon,
188 const css::rendering::ViewState& aViewState,
189 const css::rendering::RenderState& aRenderState,
190 const css::uno::Sequence< css::rendering::Texture >& xTextures,
191 const css::uno::Reference< css::geometry::XMapping2D >& xMapping) override;
192
193 virtual css::uno::Reference<css::rendering::XCanvasFont> SAL_CALL
195 const css::rendering::FontRequest& aFontRequest,
196 const css::uno::Sequence< css::beans::PropertyValue >& aExtraFontProperties,
197 const css::geometry::Matrix2D& aFontMatrix) override;
198
199 virtual css::uno::Sequence<css::rendering::FontInfo> SAL_CALL
201 const css::rendering::FontInfo& aFilter,
202 const css::uno::Sequence< css::beans::PropertyValue >& aFontProperties) override;
203
204 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
205 drawText(
206 const css::rendering::StringContext& aText,
207 const css::uno::Reference< css::rendering::XCanvasFont >& xFont,
208 const css::rendering::ViewState& aViewState,
209 const css::rendering::RenderState& aRenderState,
210 ::sal_Int8 nTextDirection) override;
211
212 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
214 const css::uno::Reference< css::rendering::XTextLayout >& xLayoutetText,
215 const css::rendering::ViewState& aViewState,
216 const css::rendering::RenderState& aRenderState) override;
217
218 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
220 const css::uno::Reference< css::rendering::XBitmap >& xBitmap,
221 const css::rendering::ViewState& aViewState,
222 const css::rendering::RenderState& aRenderState) override;
223
224 virtual css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL
226 const css::uno::Reference< css::rendering::XBitmap>& xBitmap,
227 const css::rendering::ViewState& aViewState,
228 const css::rendering::RenderState& aRenderState) override;
229
230 virtual css::uno::Reference<css::rendering::XGraphicDevice> SAL_CALL
231 getDevice() override;
232
233 // XSpriteCanvas
234
235 css::uno::Reference< css::rendering::XAnimatedSprite > SAL_CALL
237 const css::uno::Reference< css::rendering::XAnimation >& animation) override;
238
239 css::uno::Reference< css::rendering::XAnimatedSprite > SAL_CALL
241 const css::uno::Sequence<
242 css::uno::Reference< css::rendering::XBitmap > >& animationBitmaps,
243 ::sal_Int8 interpolationMode) override;
244
245 css::uno::Reference< css::rendering::XCustomSprite > SAL_CALL
247 const css::geometry::RealSize2D& spriteSize) override;
248
249 css::uno::Reference< css::rendering::XSprite > SAL_CALL
251 const css::uno::Reference< css::rendering::XSprite >& original) override;
252
253 sal_Bool SAL_CALL updateScreen (sal_Bool bUpdateAll) override;
254
255 // XEventListener
256
257 virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent) override;
258
259 // XWindowListener
260
261 virtual void SAL_CALL windowResized (const css::awt::WindowEvent& rEvent) override;
262
263 virtual void SAL_CALL windowMoved (const css::awt::WindowEvent& rEvent) override;
264
265 virtual void SAL_CALL windowShown (const css::lang::EventObject& rEvent) override;
266
267 virtual void SAL_CALL windowHidden (const css::lang::EventObject& rEvent) override;
268
269 // XBitmap
270
271 virtual css::geometry::IntegerSize2D SAL_CALL getSize() override;
272
273 virtual sal_Bool SAL_CALL hasAlpha() override;
274
275 virtual css::uno::Reference<css::rendering::XBitmap> SAL_CALL getScaledBitmap(
276 const css::geometry::RealSize2D& rNewSize,
277 sal_Bool bFast) override;
278
279private:
280 css::uno::Reference<css::rendering::XSpriteCanvas> mxUpdateCanvas;
281 css::uno::Reference<css::awt::XWindow> mxUpdateWindow;
282 css::uno::Reference<css::rendering::XCanvas> mxSharedCanvas;
283 css::uno::Reference<css::awt::XWindow> mxSharedWindow;
284
287 css::uno::Reference<css::awt::XWindow> mxWindow;
288
291 css::awt::Point maOffset;
292
296 std::shared_ptr<CanvasUpdateRequester> m_pUpdateRequester;
297
305
307 const css::geometry::AffineMatrix2D& rViewTransform,
308 const css::awt::Point& rOffset);
309
310 css::rendering::ViewState MergeViewState (const css::rendering::ViewState& rViewState);
311
315 void ThrowIfDisposed();
316};
317
318} // end of namespace ::sd::presenter
319
320/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Wrapper around a shared canvas that forwards most of its methods to the shared canvas.
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL drawBitmapModulated(const css::uno::Reference< css::rendering::XBitmap > &xBitmap, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState) override
virtual void SAL_CALL drawPoint(const css::geometry::RealPoint2D &aPoint, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState) override
css::uno::Reference< css::awt::XWindow > mxSharedWindow
virtual void SAL_CALL drawLine(const css::geometry::RealPoint2D &aStartPoint, const css::geometry::RealPoint2D &aEndPoint, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState) override
virtual void SAL_CALL windowMoved(const css::awt::WindowEvent &rEvent) override
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL strokePolyPolygon(const css::uno::Reference< css::rendering::XPolyPolygon2D > &xPolyPolygon, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState, const css::rendering::StrokeAttributes &aStrokeAttributes) override
css::uno::Reference< css::awt::XWindow > mxWindow
The window for which a canvas is emulated.
bool mbOffsetUpdatePending
When this flag is true (it is set to true after every call to updateScreen()) then the next call to M...
virtual css::geometry::IntegerSize2D SAL_CALL getSize() override
css::uno::Reference< css::awt::XWindow > mxUpdateWindow
css::uno::Reference< css::rendering::XAnimatedSprite > SAL_CALL createSpriteFromAnimation(const css::uno::Reference< css::rendering::XAnimation > &animation) override
virtual css::uno::Reference< css::rendering::XBitmap > SAL_CALL getScaledBitmap(const css::geometry::RealSize2D &rNewSize, sal_Bool bFast) override
virtual void SAL_CALL windowResized(const css::awt::WindowEvent &rEvent) override
virtual void disposing(std::unique_lock< std::mutex > &) override
css::uno::Reference< css::rendering::XSpriteCanvas > mxUpdateCanvas
css::uno::Reference< css::rendering::XAnimatedSprite > SAL_CALL createSpriteFromBitmaps(const css::uno::Sequence< css::uno::Reference< css::rendering::XBitmap > > &animationBitmaps, ::sal_Int8 interpolationMode) override
PresenterCanvas(const css::uno::Reference< css::rendering::XSpriteCanvas > &rxUpdateCanvas, const css::uno::Reference< css::awt::XWindow > &rxUpdateWindow, const css::uno::Reference< css::rendering::XCanvas > &rxSharedCanvas, const css::uno::Reference< css::awt::XWindow > &rxSharedWindow, const css::uno::Reference< css::awt::XWindow > &rxWindow)
This constructor is used when a PresenterCanvas object is created directly, typically by the Presente...
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL drawBitmap(const css::uno::Reference< css::rendering::XBitmap > &xBitmap, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState) override
virtual void SAL_CALL windowHidden(const css::lang::EventObject &rEvent) override
css::uno::Reference< css::rendering::XSprite > SAL_CALL createClonedSprite(const css::uno::Reference< css::rendering::XSprite > &original) override
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL fillTextureMappedPolyPolygon(const css::uno::Reference< css::rendering::XPolyPolygon2D > &xPolyPolygon, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState, const css::uno::Sequence< css::rendering::Texture > &xTextures, const css::uno::Reference< css::geometry::XMapping2D > &xMapping) override
virtual sal_Bool SAL_CALL hasAlpha() override
css::awt::Point GetOffset(const css::uno::Reference< css::awt::XWindow > &rxBaseWindow)
virtual css::uno::Reference< css::rendering::XCanvasFont > SAL_CALL createFont(const css::rendering::FontRequest &aFontRequest, const css::uno::Sequence< css::beans::PropertyValue > &aExtraFontProperties, const css::geometry::Matrix2D &aFontMatrix) override
css::uno::Reference< css::rendering::XCustomSprite > SAL_CALL createCustomSprite(const css::geometry::RealSize2D &spriteSize) override
css::rendering::ViewState MergeViewState(const css::rendering::ViewState &rViewState)
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL drawPolyPolygon(const css::uno::Reference< css::rendering::XPolyPolygon2D > &xPolyPolygon, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState) override
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL drawText(const css::rendering::StringContext &aText, const css::uno::Reference< css::rendering::XCanvasFont > &xFont, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState, ::sal_Int8 nTextDirection) override
css::awt::Point maOffset
Offset of the emulated canvas with respect to the shared canvas.
virtual void SAL_CALL clear() override
virtual css::uno::Reference< css::rendering::XPolyPolygon2D > SAL_CALL queryStrokeShapes(const css::uno::Reference< css::rendering::XPolyPolygon2D > &xPolyPolygon, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState, const css::rendering::StrokeAttributes &aStrokeAttributes) override
css::uno::Reference< css::rendering::XCanvas > mxSharedCanvas
virtual css::uno::Reference< css::rendering::XGraphicDevice > SAL_CALL getDevice() override
::basegfx::B2DRectangle GetClipRectangle(const css::geometry::AffineMatrix2D &rViewTransform, const css::awt::Point &rOffset)
PresenterCanvas & operator=(const PresenterCanvas &)=delete
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL drawTextLayout(const css::uno::Reference< css::rendering::XTextLayout > &xLayoutetText, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState) override
css::uno::Reference< css::rendering::XPolyPolygon2D > UpdateSpriteClip(const css::uno::Reference< css::rendering::XPolyPolygon2D > &rxOriginalClip, const css::geometry::RealPoint2D &rLocation)
Called by custom sprites to update their clip polygon so that they are clipped at the borders of the ...
PresenterCanvas(const PresenterCanvas &)=delete
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL strokeTexturedPolyPolygon(const css::uno::Reference< css::rendering::XPolyPolygon2D > &xPolyPolygon, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState, const css::uno::Sequence< css::rendering::Texture > &aTextures, const css::rendering::StrokeAttributes &aStrokeAttributes) override
virtual void SAL_CALL drawBezier(const css::geometry::RealBezierSegment2D &aBezierSegment, const css::geometry::RealPoint2D &aEndPoint, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState) override
virtual void SAL_CALL windowShown(const css::lang::EventObject &rEvent) override
std::shared_ptr< CanvasUpdateRequester > m_pUpdateRequester
The UpdateRequester is used by updateScreen() to schedule updateScreen() calls at the shared canvas.
sal_Bool SAL_CALL updateScreen(sal_Bool bUpdateAll) override
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL fillTexturedPolyPolygon(const css::uno::Reference< css::rendering::XPolyPolygon2D > &xPolyPolygon, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState, const css::uno::Sequence< css::rendering::Texture > &xTextures) override
virtual css::uno::Sequence< css::rendering::FontInfo > SAL_CALL queryAvailableFonts(const css::rendering::FontInfo &aFilter, const css::uno::Sequence< css::beans::PropertyValue > &aFontProperties) override
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL strokeTextureMappedPolyPolygon(const css::uno::Reference< css::rendering::XPolyPolygon2D > &xPolyPolygon, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState, const css::uno::Sequence< css::rendering::Texture > &aTextures, const css::uno::Reference< css::geometry::XMapping2D > &xMapping, const css::rendering::StrokeAttributes &aStrokeAttributes) override
virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL fillPolyPolygon(const css::uno::Reference< css::rendering::XPolyPolygon2D > &xPolyPolygon, const css::rendering::ViewState &aViewState, const css::rendering::RenderState &aRenderState) override
css::rendering::ViewState MergeViewState(const css::rendering::ViewState &rViewState, const css::awt::Point &raOffset)
Merge the given view state with the view state that translates the (virtual) child canvas to the shar...
comphelper::WeakComponentImplHelper< css::rendering::XSpriteCanvas, css::rendering::XBitmap, css::awt::XWindowListener > PresenterCanvasInterfaceBase
unsigned char sal_Bool
signed char sal_Int8