1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include "precompiled_sd.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include "PresenterCanvas.hxx"
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <basegfx/matrix/b2dhommatrix.hxx>
29*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolygontools.hxx>
30*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolypolygon.hxx>
31*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolygonclipper.hxx>
32*b1cdbd2cSJim Jagielski #include <basegfx/range/b2drectangle.hxx>
33*b1cdbd2cSJim Jagielski #include <basegfx/tools/canvastools.hxx>
34*b1cdbd2cSJim Jagielski #include <canvas/canvastools.hxx>
35*b1cdbd2cSJim Jagielski #include <cppuhelper/basemutex.hxx>
36*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase1.hxx>
37*b1cdbd2cSJim Jagielski #include <rtl/ref.hxx>
38*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
39*b1cdbd2cSJim Jagielski #include <vcl/window.hxx>
40*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
43*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
44*b1cdbd2cSJim Jagielski using ::rtl::OUString;
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski namespace sd { namespace presenter {
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski //===== Service ===============================================================
49*b1cdbd2cSJim Jagielski 
PresenterCanvas_createInstance(const Reference<XComponentContext> & rxContext)50*b1cdbd2cSJim Jagielski Reference<XInterface> SAL_CALL PresenterCanvas_createInstance (
51*b1cdbd2cSJim Jagielski     const Reference<XComponentContext>& rxContext)
52*b1cdbd2cSJim Jagielski {
53*b1cdbd2cSJim Jagielski     (void)rxContext;
54*b1cdbd2cSJim Jagielski     return Reference<XInterface>(static_cast<XWeak*>(new PresenterCanvas()));
55*b1cdbd2cSJim Jagielski }
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski 
PresenterCanvas_getImplementationName(void)60*b1cdbd2cSJim Jagielski ::rtl::OUString PresenterCanvas_getImplementationName (void) throw(RuntimeException)
61*b1cdbd2cSJim Jagielski {
62*b1cdbd2cSJim Jagielski     return OUString::createFromAscii("com.sun.star.comp.Draw.PresenterCanvasFactory");
63*b1cdbd2cSJim Jagielski }
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 
PresenterCanvas_getSupportedServiceNames(void)68*b1cdbd2cSJim Jagielski Sequence<rtl::OUString> SAL_CALL PresenterCanvas_getSupportedServiceNames (void)
69*b1cdbd2cSJim Jagielski     throw (RuntimeException)
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski 	static const ::rtl::OUString sServiceName(
72*b1cdbd2cSJim Jagielski         ::rtl::OUString::createFromAscii("com.sun.star.rendering.Canvas"));
73*b1cdbd2cSJim Jagielski 	return Sequence<rtl::OUString>(&sServiceName, 1);
74*b1cdbd2cSJim Jagielski }
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski //===== PresenterCustomSprite =================================================
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski /** Wrapper around a sprite that is displayed on a PresenterCanvas.
82*b1cdbd2cSJim Jagielski */
83*b1cdbd2cSJim Jagielski namespace {
84*b1cdbd2cSJim Jagielski     typedef ::cppu::WeakComponentImplHelper1 <
85*b1cdbd2cSJim Jagielski         css::rendering::XCustomSprite
86*b1cdbd2cSJim Jagielski     > PresenterCustomSpriteInterfaceBase;
87*b1cdbd2cSJim Jagielski }
88*b1cdbd2cSJim Jagielski class PresenterCustomSprite
89*b1cdbd2cSJim Jagielski     : private ::boost::noncopyable,
90*b1cdbd2cSJim Jagielski       protected ::cppu::BaseMutex,
91*b1cdbd2cSJim Jagielski       public PresenterCustomSpriteInterfaceBase
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski public:
94*b1cdbd2cSJim Jagielski     PresenterCustomSprite (
95*b1cdbd2cSJim Jagielski         const rtl::Reference<PresenterCanvas>& rpCanvas,
96*b1cdbd2cSJim Jagielski         const Reference<rendering::XCustomSprite>& rxSprite,
97*b1cdbd2cSJim Jagielski         const Reference<awt::XWindow>& rxBaseWindow,
98*b1cdbd2cSJim Jagielski         const css::geometry::RealSize2D& rSpriteSize);
99*b1cdbd2cSJim Jagielski     virtual ~PresenterCustomSprite (void);
100*b1cdbd2cSJim Jagielski     virtual void SAL_CALL disposing (void)
101*b1cdbd2cSJim Jagielski         throw (RuntimeException);
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski     // XSprite
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setAlpha (double nAlpha)
106*b1cdbd2cSJim Jagielski         throw (lang::IllegalArgumentException,RuntimeException);
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski     virtual void SAL_CALL move (const geometry::RealPoint2D& rNewPos,
109*b1cdbd2cSJim Jagielski         const rendering::ViewState& rViewState,
110*b1cdbd2cSJim Jagielski         const rendering::RenderState& rRenderState)
111*b1cdbd2cSJim Jagielski         throw (lang::IllegalArgumentException,RuntimeException);
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski     virtual void SAL_CALL transform (const geometry::AffineMatrix2D& rTransformation)
114*b1cdbd2cSJim Jagielski         throw (lang::IllegalArgumentException,RuntimeException);
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski     virtual void SAL_CALL clip (const Reference<rendering::XPolyPolygon2D>& rClip)
117*b1cdbd2cSJim Jagielski         throw (RuntimeException);
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setPriority (double nPriority)
120*b1cdbd2cSJim Jagielski         throw (RuntimeException);
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski     virtual void SAL_CALL show (void)
123*b1cdbd2cSJim Jagielski         throw (RuntimeException);
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski     virtual void SAL_CALL hide (void)
126*b1cdbd2cSJim Jagielski         throw (RuntimeException);
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski     // XCustomSprite
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski     virtual Reference<rendering::XCanvas> SAL_CALL getContentCanvas (void)
132*b1cdbd2cSJim Jagielski         throw (RuntimeException);
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski private:
135*b1cdbd2cSJim Jagielski     rtl::Reference<PresenterCanvas> mpCanvas;
136*b1cdbd2cSJim Jagielski     Reference<rendering::XCustomSprite> mxSprite;
137*b1cdbd2cSJim Jagielski     Reference<awt::XWindow> mxBaseWindow;
138*b1cdbd2cSJim Jagielski     geometry::RealPoint2D maPosition;
139*b1cdbd2cSJim Jagielski     geometry::RealSize2D maSpriteSize;
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski     void ThrowIfDisposed (void)
142*b1cdbd2cSJim Jagielski         throw (css::lang::DisposedException);
143*b1cdbd2cSJim Jagielski };
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski //===== PresenterCanvas =======================================================
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 
PresenterCanvas(void)151*b1cdbd2cSJim Jagielski PresenterCanvas::PresenterCanvas (void)
152*b1cdbd2cSJim Jagielski     : PresenterCanvasInterfaceBase(m_aMutex),
153*b1cdbd2cSJim Jagielski       mxUpdateCanvas(),
154*b1cdbd2cSJim Jagielski       mxSharedCanvas(),
155*b1cdbd2cSJim Jagielski       mxSharedWindow(),
156*b1cdbd2cSJim Jagielski       mxWindow(),
157*b1cdbd2cSJim Jagielski       maOffset(),
158*b1cdbd2cSJim Jagielski       mpUpdateRequester(),
159*b1cdbd2cSJim Jagielski       maClipRectangle(),
160*b1cdbd2cSJim Jagielski       mbOffsetUpdatePending(true)
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 
PresenterCanvas(const Reference<rendering::XSpriteCanvas> & rxUpdateCanvas,const Reference<awt::XWindow> & rxUpdateWindow,const Reference<rendering::XCanvas> & rxSharedCanvas,const Reference<awt::XWindow> & rxSharedWindow,const Reference<awt::XWindow> & rxWindow)167*b1cdbd2cSJim Jagielski PresenterCanvas::PresenterCanvas (
168*b1cdbd2cSJim Jagielski     const Reference<rendering::XSpriteCanvas>& rxUpdateCanvas,
169*b1cdbd2cSJim Jagielski     const Reference<awt::XWindow>& rxUpdateWindow,
170*b1cdbd2cSJim Jagielski     const Reference<rendering::XCanvas>& rxSharedCanvas,
171*b1cdbd2cSJim Jagielski     const Reference<awt::XWindow>& rxSharedWindow,
172*b1cdbd2cSJim Jagielski     const Reference<awt::XWindow>& rxWindow)
173*b1cdbd2cSJim Jagielski     : PresenterCanvasInterfaceBase(m_aMutex),
174*b1cdbd2cSJim Jagielski       mxUpdateCanvas(rxUpdateCanvas),
175*b1cdbd2cSJim Jagielski       mxUpdateWindow(rxUpdateWindow),
176*b1cdbd2cSJim Jagielski       mxSharedCanvas(rxSharedCanvas),
177*b1cdbd2cSJim Jagielski       mxSharedWindow(rxSharedWindow),
178*b1cdbd2cSJim Jagielski       mxWindow(rxWindow),
179*b1cdbd2cSJim Jagielski       maOffset(),
180*b1cdbd2cSJim Jagielski       mpUpdateRequester(),
181*b1cdbd2cSJim Jagielski       maClipRectangle(),
182*b1cdbd2cSJim Jagielski       mbOffsetUpdatePending(true)
183*b1cdbd2cSJim Jagielski {
184*b1cdbd2cSJim Jagielski     if (mxWindow.is())
185*b1cdbd2cSJim Jagielski         mxWindow->addWindowListener(this);
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski     if (mxUpdateCanvas.is())
188*b1cdbd2cSJim Jagielski         mpUpdateRequester = CanvasUpdateRequester::Instance(mxUpdateCanvas);
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski 
~PresenterCanvas(void)194*b1cdbd2cSJim Jagielski PresenterCanvas::~PresenterCanvas (void)
195*b1cdbd2cSJim Jagielski {
196*b1cdbd2cSJim Jagielski }
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 
disposing(void)201*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::disposing (void)
202*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski     if (mxWindow.is())
205*b1cdbd2cSJim Jagielski         mxWindow->removeWindowListener(this);
206*b1cdbd2cSJim Jagielski }
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski //----- XInitialization -------------------------------------------------------
212*b1cdbd2cSJim Jagielski 
initialize(const Sequence<Any> & rArguments)213*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::initialize (
214*b1cdbd2cSJim Jagielski     const Sequence<Any>& rArguments)
215*b1cdbd2cSJim Jagielski     throw(Exception, RuntimeException)
216*b1cdbd2cSJim Jagielski {
217*b1cdbd2cSJim Jagielski 	if (rBHelper.bDisposed || rBHelper.bInDispose)
218*b1cdbd2cSJim Jagielski         ThrowIfDisposed();
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski     if (rArguments.getLength() == 5)
221*b1cdbd2cSJim Jagielski     {
222*b1cdbd2cSJim Jagielski         try
223*b1cdbd2cSJim Jagielski         {
224*b1cdbd2cSJim Jagielski             // First and second argument may be NULL.
225*b1cdbd2cSJim Jagielski             rArguments[0] >>= mxUpdateCanvas;
226*b1cdbd2cSJim Jagielski             rArguments[1] >>= mxUpdateWindow;
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski             if ( ! (rArguments[2] >>= mxSharedWindow))
229*b1cdbd2cSJim Jagielski             {
230*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
231*b1cdbd2cSJim Jagielski                     OUString::createFromAscii("PresenterCanvas: invalid shared window"),
232*b1cdbd2cSJim Jagielski                     static_cast<XWeak*>(this),
233*b1cdbd2cSJim Jagielski                     1);
234*b1cdbd2cSJim Jagielski             }
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski             if ( ! (rArguments[3] >>= mxSharedCanvas))
237*b1cdbd2cSJim Jagielski             {
238*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
239*b1cdbd2cSJim Jagielski                     OUString::createFromAscii("PresenterCanvas: invalid shared canvas"),
240*b1cdbd2cSJim Jagielski                     static_cast<XWeak*>(this),
241*b1cdbd2cSJim Jagielski                     2);
242*b1cdbd2cSJim Jagielski             }
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski             if ( ! (rArguments[4] >>= mxWindow))
245*b1cdbd2cSJim Jagielski             {
246*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
247*b1cdbd2cSJim Jagielski                     OUString::createFromAscii("PresenterCanvas: invalid window"),
248*b1cdbd2cSJim Jagielski                     static_cast<XWeak*>(this),
249*b1cdbd2cSJim Jagielski                     3);
250*b1cdbd2cSJim Jagielski             }
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski             mpUpdateRequester = CanvasUpdateRequester::Instance(mxUpdateCanvas);
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski             mbOffsetUpdatePending = true;
255*b1cdbd2cSJim Jagielski             if (mxWindow.is())
256*b1cdbd2cSJim Jagielski                 mxWindow->addWindowListener(this);
257*b1cdbd2cSJim Jagielski         }
258*b1cdbd2cSJim Jagielski         catch (RuntimeException&)
259*b1cdbd2cSJim Jagielski         {
260*b1cdbd2cSJim Jagielski             mxSharedWindow = NULL;
261*b1cdbd2cSJim Jagielski             mxWindow = NULL;
262*b1cdbd2cSJim Jagielski             throw;
263*b1cdbd2cSJim Jagielski         }
264*b1cdbd2cSJim Jagielski     }
265*b1cdbd2cSJim Jagielski     else
266*b1cdbd2cSJim Jagielski     {
267*b1cdbd2cSJim Jagielski         throw RuntimeException(
268*b1cdbd2cSJim Jagielski             OUString::createFromAscii("PresenterCanvas: invalid number of arguments"),
269*b1cdbd2cSJim Jagielski                 static_cast<XWeak*>(this));
270*b1cdbd2cSJim Jagielski     }
271*b1cdbd2cSJim Jagielski }
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski //----- XCanvas ---------------------------------------------------------------
277*b1cdbd2cSJim Jagielski 
clear(void)278*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::clear (void)
279*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
282*b1cdbd2cSJim Jagielski     // ToDo: Clear the area covered by the child window.  A simple forward
283*b1cdbd2cSJim Jagielski     // would clear the whole shared canvas.
284*b1cdbd2cSJim Jagielski }
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski 
drawPoint(const css::geometry::RealPoint2D & aPoint,const css::rendering::ViewState & aViewState,const css::rendering::RenderState & aRenderState)289*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::drawPoint (
290*b1cdbd2cSJim Jagielski     const css::geometry::RealPoint2D& aPoint,
291*b1cdbd2cSJim Jagielski     const css::rendering::ViewState& aViewState,
292*b1cdbd2cSJim Jagielski     const css::rendering::RenderState& aRenderState)
293*b1cdbd2cSJim Jagielski     throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
294*b1cdbd2cSJim Jagielski {
295*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
296*b1cdbd2cSJim Jagielski     mxSharedCanvas->drawPoint(aPoint,MergeViewState(aViewState),aRenderState);
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski 
301*b1cdbd2cSJim Jagielski 
drawLine(const css::geometry::RealPoint2D & aStartPoint,const css::geometry::RealPoint2D & aEndPoint,const css::rendering::ViewState & aViewState,const css::rendering::RenderState & aRenderState)302*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::drawLine (
303*b1cdbd2cSJim Jagielski         const css::geometry::RealPoint2D& aStartPoint,
304*b1cdbd2cSJim Jagielski         const css::geometry::RealPoint2D& aEndPoint,
305*b1cdbd2cSJim Jagielski         const css::rendering::ViewState& aViewState,
306*b1cdbd2cSJim Jagielski         const css::rendering::RenderState& aRenderState)
307*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
308*b1cdbd2cSJim Jagielski {
309*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
310*b1cdbd2cSJim Jagielski     mxSharedCanvas->drawLine(aStartPoint,aEndPoint,MergeViewState(aViewState),aRenderState);
311*b1cdbd2cSJim Jagielski }
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski 
drawBezier(const css::geometry::RealBezierSegment2D & aBezierSegment,const css::geometry::RealPoint2D & aEndPoint,const css::rendering::ViewState & aViewState,const css::rendering::RenderState & aRenderState)316*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::drawBezier (
317*b1cdbd2cSJim Jagielski         const css::geometry::RealBezierSegment2D& aBezierSegment,
318*b1cdbd2cSJim Jagielski         const css::geometry::RealPoint2D& aEndPoint,
319*b1cdbd2cSJim Jagielski         const css::rendering::ViewState& aViewState,
320*b1cdbd2cSJim Jagielski         const css::rendering::RenderState& aRenderState)
321*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
322*b1cdbd2cSJim Jagielski {
323*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
324*b1cdbd2cSJim Jagielski     mxSharedCanvas->drawBezier(aBezierSegment,aEndPoint,MergeViewState(aViewState),aRenderState);
325*b1cdbd2cSJim Jagielski }
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski 
drawPolyPolygon(const css::uno::Reference<css::rendering::XPolyPolygon2D> & xPolyPolygon,const css::rendering::ViewState & aViewState,const css::rendering::RenderState & aRenderState)330*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL PresenterCanvas::drawPolyPolygon (
331*b1cdbd2cSJim Jagielski         const css::uno::Reference< css::rendering::XPolyPolygon2D >& xPolyPolygon,
332*b1cdbd2cSJim Jagielski         const css::rendering::ViewState& aViewState,
333*b1cdbd2cSJim Jagielski         const css::rendering::RenderState& aRenderState)
334*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
335*b1cdbd2cSJim Jagielski {
336*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
337*b1cdbd2cSJim Jagielski     return mxSharedCanvas->drawPolyPolygon(
338*b1cdbd2cSJim Jagielski         xPolyPolygon, MergeViewState(aViewState), aRenderState);
339*b1cdbd2cSJim Jagielski }
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski 
strokePolyPolygon(const css::uno::Reference<css::rendering::XPolyPolygon2D> & xPolyPolygon,const css::rendering::ViewState & aViewState,const css::rendering::RenderState & aRenderState,const css::rendering::StrokeAttributes & aStrokeAttributes)344*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XCachedPrimitive> SAL_CALL PresenterCanvas::strokePolyPolygon (
345*b1cdbd2cSJim Jagielski         const css::uno::Reference< css::rendering::XPolyPolygon2D >& xPolyPolygon,
346*b1cdbd2cSJim Jagielski         const css::rendering::ViewState& aViewState,
347*b1cdbd2cSJim Jagielski         const css::rendering::RenderState& aRenderState,
348*b1cdbd2cSJim Jagielski         const css::rendering::StrokeAttributes& aStrokeAttributes)
349*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
350*b1cdbd2cSJim Jagielski {
351*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
352*b1cdbd2cSJim Jagielski     return mxSharedCanvas->strokePolyPolygon(
353*b1cdbd2cSJim Jagielski         xPolyPolygon, MergeViewState(aViewState), aRenderState, aStrokeAttributes);
354*b1cdbd2cSJim Jagielski }
355*b1cdbd2cSJim Jagielski 
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski 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)360*b1cdbd2cSJim Jagielski         PresenterCanvas::strokeTexturedPolyPolygon (
361*b1cdbd2cSJim Jagielski             const css::uno::Reference< css::rendering::XPolyPolygon2D >& xPolyPolygon,
362*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
363*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState,
364*b1cdbd2cSJim Jagielski             const css::uno::Sequence< css::rendering::Texture >& aTextures,
365*b1cdbd2cSJim Jagielski             const css::rendering::StrokeAttributes& aStrokeAttributes)
366*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
367*b1cdbd2cSJim Jagielski             css::rendering::VolatileContentDestroyedException,
368*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
369*b1cdbd2cSJim Jagielski {
370*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
371*b1cdbd2cSJim Jagielski     return mxSharedCanvas->strokeTexturedPolyPolygon(
372*b1cdbd2cSJim Jagielski         xPolyPolygon, MergeViewState(aViewState), aRenderState, aTextures, aStrokeAttributes);
373*b1cdbd2cSJim Jagielski }
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 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)379*b1cdbd2cSJim Jagielski         PresenterCanvas::strokeTextureMappedPolyPolygon(
380*b1cdbd2cSJim Jagielski             const css::uno::Reference<css::rendering::XPolyPolygon2D >& xPolyPolygon,
381*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
382*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState,
383*b1cdbd2cSJim Jagielski             const css::uno::Sequence<css::rendering::Texture>& aTextures,
384*b1cdbd2cSJim Jagielski             const css::uno::Reference<css::geometry::XMapping2D>& xMapping,
385*b1cdbd2cSJim Jagielski             const css::rendering::StrokeAttributes& aStrokeAttributes)
386*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
387*b1cdbd2cSJim Jagielski             css::rendering::VolatileContentDestroyedException,
388*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
389*b1cdbd2cSJim Jagielski {
390*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
391*b1cdbd2cSJim Jagielski     return mxSharedCanvas->strokeTextureMappedPolyPolygon(
392*b1cdbd2cSJim Jagielski         xPolyPolygon,
393*b1cdbd2cSJim Jagielski         MergeViewState(aViewState),
394*b1cdbd2cSJim Jagielski         aRenderState,
395*b1cdbd2cSJim Jagielski         aTextures,
396*b1cdbd2cSJim Jagielski         xMapping,
397*b1cdbd2cSJim Jagielski         aStrokeAttributes);
398*b1cdbd2cSJim Jagielski }
399*b1cdbd2cSJim Jagielski 
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski 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)404*b1cdbd2cSJim Jagielski         PresenterCanvas::queryStrokeShapes(
405*b1cdbd2cSJim Jagielski             const css::uno::Reference<css::rendering::XPolyPolygon2D>& xPolyPolygon,
406*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
407*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState,
408*b1cdbd2cSJim Jagielski             const css::rendering::StrokeAttributes& aStrokeAttributes)
409*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
412*b1cdbd2cSJim Jagielski     return mxSharedCanvas->queryStrokeShapes(
413*b1cdbd2cSJim Jagielski         xPolyPolygon, MergeViewState(aViewState), aRenderState, aStrokeAttributes);
414*b1cdbd2cSJim Jagielski }
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski 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)420*b1cdbd2cSJim Jagielski         PresenterCanvas::fillPolyPolygon(
421*b1cdbd2cSJim Jagielski             const css::uno::Reference<css::rendering::XPolyPolygon2D>& xPolyPolygon,
422*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
423*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState)
424*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
425*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
426*b1cdbd2cSJim Jagielski {
427*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
428*b1cdbd2cSJim Jagielski     return mxSharedCanvas->fillPolyPolygon(
429*b1cdbd2cSJim Jagielski         xPolyPolygon, MergeViewState(aViewState), aRenderState);
430*b1cdbd2cSJim Jagielski }
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski 
435*b1cdbd2cSJim Jagielski 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)436*b1cdbd2cSJim Jagielski         PresenterCanvas::fillTexturedPolyPolygon(
437*b1cdbd2cSJim Jagielski             const css::uno::Reference<css::rendering::XPolyPolygon2D>& xPolyPolygon,
438*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
439*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState,
440*b1cdbd2cSJim Jagielski             const css::uno::Sequence<css::rendering::Texture>& xTextures)
441*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
442*b1cdbd2cSJim Jagielski             css::rendering::VolatileContentDestroyedException,
443*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
446*b1cdbd2cSJim Jagielski     return mxSharedCanvas->fillTexturedPolyPolygon(
447*b1cdbd2cSJim Jagielski         xPolyPolygon, MergeViewState(aViewState), aRenderState, xTextures);
448*b1cdbd2cSJim Jagielski }
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski 
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski 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)454*b1cdbd2cSJim Jagielski         PresenterCanvas::fillTextureMappedPolyPolygon(
455*b1cdbd2cSJim Jagielski             const css::uno::Reference< css::rendering::XPolyPolygon2D >& xPolyPolygon,
456*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
457*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState,
458*b1cdbd2cSJim Jagielski             const css::uno::Sequence< css::rendering::Texture >& xTextures,
459*b1cdbd2cSJim Jagielski             const css::uno::Reference< css::geometry::XMapping2D >& xMapping)
460*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
461*b1cdbd2cSJim Jagielski             css::rendering::VolatileContentDestroyedException,
462*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
463*b1cdbd2cSJim Jagielski {
464*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
465*b1cdbd2cSJim Jagielski     return mxSharedCanvas->fillTextureMappedPolyPolygon(
466*b1cdbd2cSJim Jagielski         xPolyPolygon, MergeViewState(aViewState), aRenderState, xTextures, xMapping);
467*b1cdbd2cSJim Jagielski }
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski 
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski 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)473*b1cdbd2cSJim Jagielski         PresenterCanvas::createFont(
474*b1cdbd2cSJim Jagielski             const css::rendering::FontRequest& aFontRequest,
475*b1cdbd2cSJim Jagielski             const css::uno::Sequence< css::beans::PropertyValue >& aExtraFontProperties,
476*b1cdbd2cSJim Jagielski             const css::geometry::Matrix2D& aFontMatrix)
477*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
478*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
479*b1cdbd2cSJim Jagielski {
480*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
481*b1cdbd2cSJim Jagielski     return mxSharedCanvas->createFont(
482*b1cdbd2cSJim Jagielski         aFontRequest, aExtraFontProperties, aFontMatrix);
483*b1cdbd2cSJim Jagielski }
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski 
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski css::uno::Sequence<css::rendering::FontInfo> SAL_CALL
queryAvailableFonts(const css::rendering::FontInfo & aFilter,const css::uno::Sequence<css::beans::PropertyValue> & aFontProperties)489*b1cdbd2cSJim Jagielski         PresenterCanvas::queryAvailableFonts(
490*b1cdbd2cSJim Jagielski             const css::rendering::FontInfo& aFilter,
491*b1cdbd2cSJim Jagielski             const css::uno::Sequence< css::beans::PropertyValue >& aFontProperties)
492*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
493*b1cdbd2cSJim Jagielski {
494*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
495*b1cdbd2cSJim Jagielski     return mxSharedCanvas->queryAvailableFonts(aFilter, aFontProperties);
496*b1cdbd2cSJim Jagielski }
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski 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)502*b1cdbd2cSJim Jagielski         PresenterCanvas::drawText(
503*b1cdbd2cSJim Jagielski             const css::rendering::StringContext& aText,
504*b1cdbd2cSJim Jagielski             const css::uno::Reference< css::rendering::XCanvasFont >& xFont,
505*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
506*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState,
507*b1cdbd2cSJim Jagielski             ::sal_Int8 nTextDirection)
508*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
509*b1cdbd2cSJim Jagielski {
510*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
511*b1cdbd2cSJim Jagielski     return mxSharedCanvas->drawText(
512*b1cdbd2cSJim Jagielski         aText, xFont, MergeViewState(aViewState), aRenderState, nTextDirection);
513*b1cdbd2cSJim Jagielski }
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski 
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 
518*b1cdbd2cSJim Jagielski 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)519*b1cdbd2cSJim Jagielski         PresenterCanvas::drawTextLayout(
520*b1cdbd2cSJim Jagielski             const css::uno::Reference< css::rendering::XTextLayout >& xLayoutetText,
521*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
522*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState)
523*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
524*b1cdbd2cSJim Jagielski {
525*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
526*b1cdbd2cSJim Jagielski     return mxSharedCanvas->drawTextLayout(
527*b1cdbd2cSJim Jagielski         xLayoutetText, MergeViewState(aViewState), aRenderState);
528*b1cdbd2cSJim Jagielski }
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski 
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski 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)534*b1cdbd2cSJim Jagielski         PresenterCanvas::drawBitmap(
535*b1cdbd2cSJim Jagielski             const css::uno::Reference< css::rendering::XBitmap >& xBitmap,
536*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
537*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState)
538*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
539*b1cdbd2cSJim Jagielski             css::rendering::VolatileContentDestroyedException,
540*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
541*b1cdbd2cSJim Jagielski {
542*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
543*b1cdbd2cSJim Jagielski     return mxSharedCanvas->drawBitmap(
544*b1cdbd2cSJim Jagielski         xBitmap, MergeViewState(aViewState), aRenderState);
545*b1cdbd2cSJim Jagielski }
546*b1cdbd2cSJim Jagielski 
547*b1cdbd2cSJim Jagielski 
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski 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)551*b1cdbd2cSJim Jagielski         PresenterCanvas::drawBitmapModulated(
552*b1cdbd2cSJim Jagielski             const css::uno::Reference< css::rendering::XBitmap>& xBitmap,
553*b1cdbd2cSJim Jagielski             const css::rendering::ViewState& aViewState,
554*b1cdbd2cSJim Jagielski             const css::rendering::RenderState& aRenderState)
555*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
556*b1cdbd2cSJim Jagielski             css::rendering::VolatileContentDestroyedException,
557*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
560*b1cdbd2cSJim Jagielski     return mxSharedCanvas->drawBitmapModulated(
561*b1cdbd2cSJim Jagielski         xBitmap, MergeViewState(aViewState), aRenderState);
562*b1cdbd2cSJim Jagielski }
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski 
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski css::uno::Reference<css::rendering::XGraphicDevice> SAL_CALL
getDevice(void)568*b1cdbd2cSJim Jagielski         PresenterCanvas::getDevice (void)
569*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException)
570*b1cdbd2cSJim Jagielski {
571*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
572*b1cdbd2cSJim Jagielski     return mxSharedCanvas->getDevice();
573*b1cdbd2cSJim Jagielski }
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski 
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski 
578*b1cdbd2cSJim Jagielski //----- XBitmapCanvas ---------------------------------------------------------
579*b1cdbd2cSJim Jagielski 
copyRect(const css::uno::Reference<css::rendering::XBitmapCanvas> & rxSourceCanvas,const css::geometry::RealRectangle2D & rSourceRect,const css::rendering::ViewState & rSourceViewState,const css::rendering::RenderState & rSourceRenderState,const css::geometry::RealRectangle2D & rDestRect,const css::rendering::ViewState & rDestViewState,const css::rendering::RenderState & rDestRenderState)580*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::copyRect(
581*b1cdbd2cSJim Jagielski     const css::uno::Reference<css::rendering::XBitmapCanvas>& rxSourceCanvas,
582*b1cdbd2cSJim Jagielski     const css::geometry::RealRectangle2D& rSourceRect,
583*b1cdbd2cSJim Jagielski     const css::rendering::ViewState& rSourceViewState,
584*b1cdbd2cSJim Jagielski     const css::rendering::RenderState& rSourceRenderState,
585*b1cdbd2cSJim Jagielski     const css::geometry::RealRectangle2D& rDestRect,
586*b1cdbd2cSJim Jagielski     const css::rendering::ViewState& rDestViewState,
587*b1cdbd2cSJim Jagielski     const css::rendering::RenderState& rDestRenderState)
588*b1cdbd2cSJim Jagielski     throw (css::lang::IllegalArgumentException,
589*b1cdbd2cSJim Jagielski         css::rendering::VolatileContentDestroyedException,
590*b1cdbd2cSJim Jagielski         css::uno::RuntimeException)
591*b1cdbd2cSJim Jagielski {
592*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
593*b1cdbd2cSJim Jagielski 
594*b1cdbd2cSJim Jagielski     Reference<rendering::XBitmapCanvas> xBitmapCanvas (mxSharedCanvas, UNO_QUERY);
595*b1cdbd2cSJim Jagielski     if (xBitmapCanvas.is())
596*b1cdbd2cSJim Jagielski     {
597*b1cdbd2cSJim Jagielski         rendering::ViewState aSourceViewState (rSourceViewState);
598*b1cdbd2cSJim Jagielski         if (rxSourceCanvas == Reference<rendering::XCanvas>(this))
599*b1cdbd2cSJim Jagielski             aSourceViewState = MergeViewState(aSourceViewState);
600*b1cdbd2cSJim Jagielski         xBitmapCanvas->copyRect(
601*b1cdbd2cSJim Jagielski             rxSourceCanvas, rSourceRect, aSourceViewState, rSourceRenderState,
602*b1cdbd2cSJim Jagielski             rDestRect, MergeViewState(rDestViewState), rDestRenderState);
603*b1cdbd2cSJim Jagielski     }
604*b1cdbd2cSJim Jagielski }
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski 
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski 
609*b1cdbd2cSJim Jagielski //----- XSpriteCanvas ---------------------------------------------------------
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski Reference<rendering::XAnimatedSprite> SAL_CALL
createSpriteFromAnimation(const css::uno::Reference<css::rendering::XAnimation> & rAnimation)612*b1cdbd2cSJim Jagielski     PresenterCanvas::createSpriteFromAnimation (
613*b1cdbd2cSJim Jagielski         const css::uno::Reference<css::rendering::XAnimation>& rAnimation)
614*b1cdbd2cSJim Jagielski     throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
615*b1cdbd2cSJim Jagielski {
616*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
617*b1cdbd2cSJim Jagielski 
618*b1cdbd2cSJim Jagielski     Reference<rendering::XSpriteCanvas> xSpriteCanvas (mxSharedCanvas, UNO_QUERY);
619*b1cdbd2cSJim Jagielski     if (xSpriteCanvas.is())
620*b1cdbd2cSJim Jagielski         return xSpriteCanvas->createSpriteFromAnimation(rAnimation);
621*b1cdbd2cSJim Jagielski     else
622*b1cdbd2cSJim Jagielski         return NULL;
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski 
626*b1cdbd2cSJim Jagielski 
627*b1cdbd2cSJim Jagielski 
628*b1cdbd2cSJim Jagielski Reference<rendering::XAnimatedSprite> SAL_CALL
createSpriteFromBitmaps(const css::uno::Sequence<css::uno::Reference<css::rendering::XBitmap>> & rAnimationBitmaps,::sal_Int8 nInterpolationMode)629*b1cdbd2cSJim Jagielski     PresenterCanvas::createSpriteFromBitmaps (
630*b1cdbd2cSJim Jagielski         const css::uno::Sequence<
631*b1cdbd2cSJim Jagielski             css::uno::Reference< css::rendering::XBitmap > >& rAnimationBitmaps,
632*b1cdbd2cSJim Jagielski     ::sal_Int8 nInterpolationMode)
633*b1cdbd2cSJim Jagielski         throw (css::lang::IllegalArgumentException,
634*b1cdbd2cSJim Jagielski             css::rendering::VolatileContentDestroyedException,
635*b1cdbd2cSJim Jagielski             css::uno::RuntimeException)
636*b1cdbd2cSJim Jagielski {
637*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
638*b1cdbd2cSJim Jagielski 
639*b1cdbd2cSJim Jagielski     Reference<rendering::XSpriteCanvas> xSpriteCanvas (mxSharedCanvas, UNO_QUERY);
640*b1cdbd2cSJim Jagielski     if (xSpriteCanvas.is())
641*b1cdbd2cSJim Jagielski         return xSpriteCanvas->createSpriteFromBitmaps(rAnimationBitmaps, nInterpolationMode);
642*b1cdbd2cSJim Jagielski     else
643*b1cdbd2cSJim Jagielski         return NULL;
644*b1cdbd2cSJim Jagielski }
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski 
647*b1cdbd2cSJim Jagielski 
648*b1cdbd2cSJim Jagielski 
649*b1cdbd2cSJim Jagielski Reference<rendering::XCustomSprite> SAL_CALL
createCustomSprite(const css::geometry::RealSize2D & rSpriteSize)650*b1cdbd2cSJim Jagielski     PresenterCanvas::createCustomSprite (
651*b1cdbd2cSJim Jagielski         const css::geometry::RealSize2D& rSpriteSize)
652*b1cdbd2cSJim Jagielski     throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
653*b1cdbd2cSJim Jagielski {
654*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
655*b1cdbd2cSJim Jagielski 
656*b1cdbd2cSJim Jagielski     Reference<rendering::XSpriteCanvas> xSpriteCanvas (mxSharedCanvas, UNO_QUERY);
657*b1cdbd2cSJim Jagielski     if (xSpriteCanvas.is())
658*b1cdbd2cSJim Jagielski         return new PresenterCustomSprite(
659*b1cdbd2cSJim Jagielski             this,
660*b1cdbd2cSJim Jagielski             xSpriteCanvas->createCustomSprite(rSpriteSize),
661*b1cdbd2cSJim Jagielski             mxSharedWindow,
662*b1cdbd2cSJim Jagielski             rSpriteSize);
663*b1cdbd2cSJim Jagielski     else if (mxUpdateCanvas.is())
664*b1cdbd2cSJim Jagielski         return new PresenterCustomSprite(
665*b1cdbd2cSJim Jagielski             this,
666*b1cdbd2cSJim Jagielski             mxUpdateCanvas->createCustomSprite(rSpriteSize),
667*b1cdbd2cSJim Jagielski             mxUpdateWindow,
668*b1cdbd2cSJim Jagielski             rSpriteSize);
669*b1cdbd2cSJim Jagielski     else
670*b1cdbd2cSJim Jagielski         return NULL;
671*b1cdbd2cSJim Jagielski }
672*b1cdbd2cSJim Jagielski 
673*b1cdbd2cSJim Jagielski 
674*b1cdbd2cSJim Jagielski 
675*b1cdbd2cSJim Jagielski 
676*b1cdbd2cSJim Jagielski Reference<rendering::XSprite> SAL_CALL
createClonedSprite(const css::uno::Reference<css::rendering::XSprite> & rxOriginal)677*b1cdbd2cSJim Jagielski     PresenterCanvas::createClonedSprite (
678*b1cdbd2cSJim Jagielski         const css::uno::Reference< css::rendering::XSprite >& rxOriginal)
679*b1cdbd2cSJim Jagielski     throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
680*b1cdbd2cSJim Jagielski {
681*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
682*b1cdbd2cSJim Jagielski 
683*b1cdbd2cSJim Jagielski     Reference<rendering::XSpriteCanvas> xSpriteCanvas (mxSharedCanvas, UNO_QUERY);
684*b1cdbd2cSJim Jagielski     if (xSpriteCanvas.is())
685*b1cdbd2cSJim Jagielski         return xSpriteCanvas->createClonedSprite(rxOriginal);
686*b1cdbd2cSJim Jagielski     if (mxUpdateCanvas.is())
687*b1cdbd2cSJim Jagielski         return mxUpdateCanvas->createClonedSprite(rxOriginal);
688*b1cdbd2cSJim Jagielski     return NULL;
689*b1cdbd2cSJim Jagielski }
690*b1cdbd2cSJim Jagielski 
691*b1cdbd2cSJim Jagielski 
692*b1cdbd2cSJim Jagielski 
693*b1cdbd2cSJim Jagielski 
updateScreen(::sal_Bool bUpdateAll)694*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL PresenterCanvas::updateScreen (::sal_Bool bUpdateAll)
695*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
696*b1cdbd2cSJim Jagielski {
697*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
698*b1cdbd2cSJim Jagielski 
699*b1cdbd2cSJim Jagielski     mbOffsetUpdatePending = true;
700*b1cdbd2cSJim Jagielski     if (mpUpdateRequester.get() != NULL)
701*b1cdbd2cSJim Jagielski     {
702*b1cdbd2cSJim Jagielski         mpUpdateRequester->RequestUpdate(bUpdateAll);
703*b1cdbd2cSJim Jagielski         return sal_True;
704*b1cdbd2cSJim Jagielski     }
705*b1cdbd2cSJim Jagielski     else
706*b1cdbd2cSJim Jagielski     {
707*b1cdbd2cSJim Jagielski         return sal_False;
708*b1cdbd2cSJim Jagielski     }
709*b1cdbd2cSJim Jagielski }
710*b1cdbd2cSJim Jagielski 
711*b1cdbd2cSJim Jagielski 
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski 
714*b1cdbd2cSJim Jagielski //----- XEventListener --------------------------------------------------------
715*b1cdbd2cSJim Jagielski 
disposing(const css::lang::EventObject & rEvent)716*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::disposing (const css::lang::EventObject& rEvent)
717*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
718*b1cdbd2cSJim Jagielski {
719*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
720*b1cdbd2cSJim Jagielski     if (rEvent.Source == mxWindow)
721*b1cdbd2cSJim Jagielski         mxWindow = NULL;
722*b1cdbd2cSJim Jagielski }
723*b1cdbd2cSJim Jagielski 
724*b1cdbd2cSJim Jagielski 
725*b1cdbd2cSJim Jagielski 
726*b1cdbd2cSJim Jagielski 
727*b1cdbd2cSJim Jagielski //----- XWindowListener -------------------------------------------------------
728*b1cdbd2cSJim Jagielski 
windowResized(const css::awt::WindowEvent & rEvent)729*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::windowResized (const css::awt::WindowEvent& rEvent)
730*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException)
731*b1cdbd2cSJim Jagielski {
732*b1cdbd2cSJim Jagielski     (void)rEvent;
733*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
734*b1cdbd2cSJim Jagielski     mbOffsetUpdatePending = true;
735*b1cdbd2cSJim Jagielski }
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski 
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski 
windowMoved(const css::awt::WindowEvent & rEvent)740*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::windowMoved (const css::awt::WindowEvent& rEvent)
741*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
742*b1cdbd2cSJim Jagielski {
743*b1cdbd2cSJim Jagielski     (void)rEvent;
744*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
745*b1cdbd2cSJim Jagielski     mbOffsetUpdatePending = true;
746*b1cdbd2cSJim Jagielski }
747*b1cdbd2cSJim Jagielski 
748*b1cdbd2cSJim Jagielski 
749*b1cdbd2cSJim Jagielski 
750*b1cdbd2cSJim Jagielski 
windowShown(const css::lang::EventObject & rEvent)751*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::windowShown (const css::lang::EventObject& rEvent)
752*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
753*b1cdbd2cSJim Jagielski {
754*b1cdbd2cSJim Jagielski     (void)rEvent;
755*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
756*b1cdbd2cSJim Jagielski     mbOffsetUpdatePending = true;
757*b1cdbd2cSJim Jagielski }
758*b1cdbd2cSJim Jagielski 
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski 
761*b1cdbd2cSJim Jagielski 
windowHidden(const css::lang::EventObject & rEvent)762*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCanvas::windowHidden (const css::lang::EventObject& rEvent)
763*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
764*b1cdbd2cSJim Jagielski {
765*b1cdbd2cSJim Jagielski     (void)rEvent;
766*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
767*b1cdbd2cSJim Jagielski }
768*b1cdbd2cSJim Jagielski 
769*b1cdbd2cSJim Jagielski 
770*b1cdbd2cSJim Jagielski 
771*b1cdbd2cSJim Jagielski 
772*b1cdbd2cSJim Jagielski //----- XBitmap ---------------------------------------------------------------
773*b1cdbd2cSJim Jagielski 
getSize(void)774*b1cdbd2cSJim Jagielski geometry::IntegerSize2D SAL_CALL PresenterCanvas::getSize (void)
775*b1cdbd2cSJim Jagielski     throw (RuntimeException)
776*b1cdbd2cSJim Jagielski {
777*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
778*b1cdbd2cSJim Jagielski 
779*b1cdbd2cSJim Jagielski     if (mxWindow.is())
780*b1cdbd2cSJim Jagielski     {
781*b1cdbd2cSJim Jagielski         const awt::Rectangle aWindowBox (mxWindow->getPosSize());
782*b1cdbd2cSJim Jagielski         return geometry::IntegerSize2D(aWindowBox.Width, aWindowBox.Height);
783*b1cdbd2cSJim Jagielski     }
784*b1cdbd2cSJim Jagielski     else
785*b1cdbd2cSJim Jagielski         return geometry::IntegerSize2D(0,0);
786*b1cdbd2cSJim Jagielski }
787*b1cdbd2cSJim Jagielski 
788*b1cdbd2cSJim Jagielski 
789*b1cdbd2cSJim Jagielski 
790*b1cdbd2cSJim Jagielski 
hasAlpha(void)791*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL PresenterCanvas::hasAlpha (void)
792*b1cdbd2cSJim Jagielski     throw (RuntimeException)
793*b1cdbd2cSJim Jagielski {
794*b1cdbd2cSJim Jagielski     Reference<rendering::XBitmap> xBitmap (mxSharedCanvas, UNO_QUERY);
795*b1cdbd2cSJim Jagielski     if (xBitmap.is())
796*b1cdbd2cSJim Jagielski         return xBitmap->hasAlpha();
797*b1cdbd2cSJim Jagielski     else
798*b1cdbd2cSJim Jagielski         return sal_False;
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski 
801*b1cdbd2cSJim Jagielski 
802*b1cdbd2cSJim Jagielski 
803*b1cdbd2cSJim Jagielski 
queryBitmapCanvas(void)804*b1cdbd2cSJim Jagielski Reference<rendering::XBitmapCanvas> SAL_CALL PresenterCanvas::queryBitmapCanvas (void)
805*b1cdbd2cSJim Jagielski     throw (RuntimeException)
806*b1cdbd2cSJim Jagielski {
807*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
808*b1cdbd2cSJim Jagielski 
809*b1cdbd2cSJim Jagielski     return this;
810*b1cdbd2cSJim Jagielski }
811*b1cdbd2cSJim Jagielski 
812*b1cdbd2cSJim Jagielski 
813*b1cdbd2cSJim Jagielski 
814*b1cdbd2cSJim Jagielski 
getScaledBitmap(const css::geometry::RealSize2D & rNewSize,sal_Bool bFast)815*b1cdbd2cSJim Jagielski Reference<rendering::XBitmap> SAL_CALL PresenterCanvas::getScaledBitmap(
816*b1cdbd2cSJim Jagielski     const css::geometry::RealSize2D& rNewSize,
817*b1cdbd2cSJim Jagielski     sal_Bool bFast)
818*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException,
819*b1cdbd2cSJim Jagielski         css::lang::IllegalArgumentException,
820*b1cdbd2cSJim Jagielski         css::rendering::VolatileContentDestroyedException)
821*b1cdbd2cSJim Jagielski {
822*b1cdbd2cSJim Jagielski     (void)rNewSize;
823*b1cdbd2cSJim Jagielski     (void)bFast;
824*b1cdbd2cSJim Jagielski 
825*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
826*b1cdbd2cSJim Jagielski 
827*b1cdbd2cSJim Jagielski     // Not implemented.
828*b1cdbd2cSJim Jagielski 
829*b1cdbd2cSJim Jagielski     return NULL;
830*b1cdbd2cSJim Jagielski }
831*b1cdbd2cSJim Jagielski 
832*b1cdbd2cSJim Jagielski 
833*b1cdbd2cSJim Jagielski 
834*b1cdbd2cSJim Jagielski 
835*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
836*b1cdbd2cSJim Jagielski 
MergeViewState(const rendering::ViewState & rViewState)837*b1cdbd2cSJim Jagielski rendering::ViewState PresenterCanvas::MergeViewState (
838*b1cdbd2cSJim Jagielski     const rendering::ViewState& rViewState)
839*b1cdbd2cSJim Jagielski {
840*b1cdbd2cSJim Jagielski     // Make sure the offset is up-to-date.
841*b1cdbd2cSJim Jagielski     if (mbOffsetUpdatePending)
842*b1cdbd2cSJim Jagielski         maOffset = GetOffset(mxSharedWindow);
843*b1cdbd2cSJim Jagielski     return MergeViewState(rViewState, maOffset);
844*b1cdbd2cSJim Jagielski }
845*b1cdbd2cSJim Jagielski 
846*b1cdbd2cSJim Jagielski 
847*b1cdbd2cSJim Jagielski 
848*b1cdbd2cSJim Jagielski 
MergeViewState(const css::rendering::ViewState & rViewState,const css::awt::Point & rOffset)849*b1cdbd2cSJim Jagielski css::rendering::ViewState PresenterCanvas::MergeViewState (
850*b1cdbd2cSJim Jagielski     const css::rendering::ViewState& rViewState,
851*b1cdbd2cSJim Jagielski     const css::awt::Point& rOffset)
852*b1cdbd2cSJim Jagielski {
853*b1cdbd2cSJim Jagielski     // Early rejects.
854*b1cdbd2cSJim Jagielski     if ( ! mxSharedCanvas.is())
855*b1cdbd2cSJim Jagielski         return rViewState;
856*b1cdbd2cSJim Jagielski 
857*b1cdbd2cSJim Jagielski     Reference<rendering::XGraphicDevice> xDevice (mxSharedCanvas->getDevice());
858*b1cdbd2cSJim Jagielski     if ( ! xDevice.is())
859*b1cdbd2cSJim Jagielski         return rViewState;
860*b1cdbd2cSJim Jagielski 
861*b1cdbd2cSJim Jagielski     // Create a modifiable copy of the given view state.
862*b1cdbd2cSJim Jagielski     rendering::ViewState aViewState (rViewState);
863*b1cdbd2cSJim Jagielski 
864*b1cdbd2cSJim Jagielski     // Prepare the local clip rectangle.
865*b1cdbd2cSJim Jagielski     ::basegfx::B2DRectangle aWindowRange (GetClipRectangle(aViewState.AffineTransform, rOffset));
866*b1cdbd2cSJim Jagielski 
867*b1cdbd2cSJim Jagielski     // Adapt the offset of the view state.
868*b1cdbd2cSJim Jagielski     aViewState.AffineTransform.m02 += rOffset.X;
869*b1cdbd2cSJim Jagielski     aViewState.AffineTransform.m12 += rOffset.Y;
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski     // Adapt the clip polygon.
872*b1cdbd2cSJim Jagielski     if ( ! aViewState.Clip.is())
873*b1cdbd2cSJim Jagielski     {
874*b1cdbd2cSJim Jagielski         // Cancel out the later multiplication with the view state
875*b1cdbd2cSJim Jagielski         // transformation.
876*b1cdbd2cSJim Jagielski         aViewState.Clip = ::basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(
877*b1cdbd2cSJim Jagielski             xDevice,
878*b1cdbd2cSJim Jagielski             ::basegfx::B2DPolyPolygon(::basegfx::tools::createPolygonFromRect(aWindowRange)));
879*b1cdbd2cSJim Jagielski     }
880*b1cdbd2cSJim Jagielski     else
881*b1cdbd2cSJim Jagielski     {
882*b1cdbd2cSJim Jagielski         // Have to compute the intersection of the given clipping polygon in
883*b1cdbd2cSJim Jagielski         // the view state and the local clip rectangle.
884*b1cdbd2cSJim Jagielski 
885*b1cdbd2cSJim Jagielski         // Clip the view state clipping polygon against the local clip rectangle.
886*b1cdbd2cSJim Jagielski         const ::basegfx::B2DPolyPolygon aClipPolygon (
887*b1cdbd2cSJim Jagielski             ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(
888*b1cdbd2cSJim Jagielski                 aViewState.Clip));
889*b1cdbd2cSJim Jagielski         const ::basegfx::B2DPolyPolygon aClippedClipPolygon (
890*b1cdbd2cSJim Jagielski             ::basegfx::tools::clipPolyPolygonOnRange(
891*b1cdbd2cSJim Jagielski                 aClipPolygon,
892*b1cdbd2cSJim Jagielski                 aWindowRange,
893*b1cdbd2cSJim Jagielski                 true, /* bInside */
894*b1cdbd2cSJim Jagielski                 false /* bStroke */));
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski         aViewState.Clip = ::basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(
897*b1cdbd2cSJim Jagielski             xDevice,
898*b1cdbd2cSJim Jagielski             aClippedClipPolygon);
899*b1cdbd2cSJim Jagielski     }
900*b1cdbd2cSJim Jagielski 
901*b1cdbd2cSJim Jagielski     return aViewState;
902*b1cdbd2cSJim Jagielski }
903*b1cdbd2cSJim Jagielski 
904*b1cdbd2cSJim Jagielski 
905*b1cdbd2cSJim Jagielski 
906*b1cdbd2cSJim Jagielski 
GetOffset(const Reference<awt::XWindow> & rxBaseWindow)907*b1cdbd2cSJim Jagielski awt::Point PresenterCanvas::GetOffset (const Reference<awt::XWindow>& rxBaseWindow)
908*b1cdbd2cSJim Jagielski {
909*b1cdbd2cSJim Jagielski     mbOffsetUpdatePending = false;
910*b1cdbd2cSJim Jagielski     if (mxWindow.is() && rxBaseWindow.is())
911*b1cdbd2cSJim Jagielski     {
912*b1cdbd2cSJim Jagielski         ::Window* pWindow = VCLUnoHelper::GetWindow(mxWindow);
913*b1cdbd2cSJim Jagielski         ::Window* pSharedWindow = VCLUnoHelper::GetWindow(rxBaseWindow);
914*b1cdbd2cSJim Jagielski         if (pWindow!=NULL && pSharedWindow!=NULL)
915*b1cdbd2cSJim Jagielski         {
916*b1cdbd2cSJim Jagielski             Rectangle aBox = pWindow->GetWindowExtentsRelative(pSharedWindow);
917*b1cdbd2cSJim Jagielski 
918*b1cdbd2cSJim Jagielski             // Calculate offset of this canvas with respect to the shared
919*b1cdbd2cSJim Jagielski             // canvas.
920*b1cdbd2cSJim Jagielski             return awt::Point(aBox.Left(), aBox.Top());
921*b1cdbd2cSJim Jagielski         }
922*b1cdbd2cSJim Jagielski     }
923*b1cdbd2cSJim Jagielski 
924*b1cdbd2cSJim Jagielski     return awt::Point(0, 0);
925*b1cdbd2cSJim Jagielski }
926*b1cdbd2cSJim Jagielski 
927*b1cdbd2cSJim Jagielski 
928*b1cdbd2cSJim Jagielski 
929*b1cdbd2cSJim Jagielski 
GetClipRectangle(const css::geometry::AffineMatrix2D & rViewTransform,const awt::Point & rOffset)930*b1cdbd2cSJim Jagielski ::basegfx::B2DRectangle PresenterCanvas::GetClipRectangle (
931*b1cdbd2cSJim Jagielski     const css::geometry::AffineMatrix2D& rViewTransform,
932*b1cdbd2cSJim Jagielski     const awt::Point& rOffset)
933*b1cdbd2cSJim Jagielski {
934*b1cdbd2cSJim Jagielski     ::basegfx::B2DRectangle aClipRectangle;
935*b1cdbd2cSJim Jagielski 
936*b1cdbd2cSJim Jagielski     ::Window* pWindow = VCLUnoHelper::GetWindow(mxWindow);
937*b1cdbd2cSJim Jagielski     if (pWindow == NULL)
938*b1cdbd2cSJim Jagielski         return ::basegfx::B2DRectangle();
939*b1cdbd2cSJim Jagielski 
940*b1cdbd2cSJim Jagielski     ::Window* pSharedWindow = VCLUnoHelper::GetWindow(mxSharedWindow);
941*b1cdbd2cSJim Jagielski     if (pSharedWindow == NULL)
942*b1cdbd2cSJim Jagielski         return ::basegfx::B2DRectangle();
943*b1cdbd2cSJim Jagielski 
944*b1cdbd2cSJim Jagielski     // Get the bounding box of the window and create a range in the
945*b1cdbd2cSJim Jagielski     // coordinate system of the child window.
946*b1cdbd2cSJim Jagielski     Rectangle aLocalClip;
947*b1cdbd2cSJim Jagielski     if (maClipRectangle.Width <= 0 || maClipRectangle.Height <= 0)
948*b1cdbd2cSJim Jagielski     {
949*b1cdbd2cSJim Jagielski         // No clip rectangle has been set via SetClip by the pane.
950*b1cdbd2cSJim Jagielski         // Use the window extents instead.
951*b1cdbd2cSJim Jagielski         aLocalClip = pWindow->GetWindowExtentsRelative(pSharedWindow);
952*b1cdbd2cSJim Jagielski     }
953*b1cdbd2cSJim Jagielski     else
954*b1cdbd2cSJim Jagielski     {
955*b1cdbd2cSJim Jagielski         // Use a previously given clip rectangle.
956*b1cdbd2cSJim Jagielski         aLocalClip = Rectangle(
957*b1cdbd2cSJim Jagielski             maClipRectangle.X + rOffset.X,
958*b1cdbd2cSJim Jagielski             maClipRectangle.Y + rOffset.Y,
959*b1cdbd2cSJim Jagielski             maClipRectangle.X + maClipRectangle.Width + rOffset.X,
960*b1cdbd2cSJim Jagielski             maClipRectangle.Y + maClipRectangle.Height + rOffset.Y);
961*b1cdbd2cSJim Jagielski     }
962*b1cdbd2cSJim Jagielski 
963*b1cdbd2cSJim Jagielski     // The local clip rectangle is used to clip the view state clipping
964*b1cdbd2cSJim Jagielski     // polygon.
965*b1cdbd2cSJim Jagielski     ::basegfx::B2DRectangle aWindowRectangle (
966*b1cdbd2cSJim Jagielski         aLocalClip.Left() - rOffset.X,
967*b1cdbd2cSJim Jagielski         aLocalClip.Top() - rOffset.Y,
968*b1cdbd2cSJim Jagielski         aLocalClip.Right() - rOffset.X + 1,
969*b1cdbd2cSJim Jagielski         aLocalClip.Bottom() - rOffset.Y + 1);
970*b1cdbd2cSJim Jagielski 
971*b1cdbd2cSJim Jagielski     // Calculate the inverted view state transformation to cancel out a
972*b1cdbd2cSJim Jagielski     // later transformation of the local clip polygon with the view state
973*b1cdbd2cSJim Jagielski     // transformation.
974*b1cdbd2cSJim Jagielski     ::basegfx::B2DHomMatrix aInvertedViewStateTransformation;
975*b1cdbd2cSJim Jagielski     ::basegfx::unotools::homMatrixFromAffineMatrix(
976*b1cdbd2cSJim Jagielski         aInvertedViewStateTransformation,
977*b1cdbd2cSJim Jagielski         rViewTransform);
978*b1cdbd2cSJim Jagielski     if (aInvertedViewStateTransformation.invert())
979*b1cdbd2cSJim Jagielski     {
980*b1cdbd2cSJim Jagielski         // Cancel out the later multiplication with the view state
981*b1cdbd2cSJim Jagielski         // transformation.
982*b1cdbd2cSJim Jagielski         aWindowRectangle.transform(aInvertedViewStateTransformation);
983*b1cdbd2cSJim Jagielski     }
984*b1cdbd2cSJim Jagielski 
985*b1cdbd2cSJim Jagielski     return aWindowRectangle;
986*b1cdbd2cSJim Jagielski }
987*b1cdbd2cSJim Jagielski 
988*b1cdbd2cSJim Jagielski 
989*b1cdbd2cSJim Jagielski 
UpdateSpriteClip(const Reference<rendering::XPolyPolygon2D> & rxOriginalClip,const geometry::RealPoint2D & rLocation,const geometry::RealSize2D & rSize)990*b1cdbd2cSJim Jagielski Reference<rendering::XPolyPolygon2D> PresenterCanvas::UpdateSpriteClip (
991*b1cdbd2cSJim Jagielski     const Reference<rendering::XPolyPolygon2D>& rxOriginalClip,
992*b1cdbd2cSJim Jagielski     const geometry::RealPoint2D& rLocation,
993*b1cdbd2cSJim Jagielski     const geometry::RealSize2D& rSize)
994*b1cdbd2cSJim Jagielski {
995*b1cdbd2cSJim Jagielski     (void)rSize;
996*b1cdbd2cSJim Jagielski 
997*b1cdbd2cSJim Jagielski     // Check used resources and just return the original clip when not
998*b1cdbd2cSJim Jagielski     // every one of them is available.
999*b1cdbd2cSJim Jagielski     if ( ! mxWindow.is())
1000*b1cdbd2cSJim Jagielski         return rxOriginalClip;
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski     Reference<rendering::XGraphicDevice> xDevice (mxSharedCanvas->getDevice());
1003*b1cdbd2cSJim Jagielski     if ( ! xDevice.is())
1004*b1cdbd2cSJim Jagielski         return rxOriginalClip;
1005*b1cdbd2cSJim Jagielski 
1006*b1cdbd2cSJim Jagielski     // Determine the bounds of the clip rectangle (the window border) in the
1007*b1cdbd2cSJim Jagielski     // coordinate system of the sprite.
1008*b1cdbd2cSJim Jagielski     const awt::Rectangle aWindowBox (mxWindow->getPosSize());
1009*b1cdbd2cSJim Jagielski     const double nMinX (-rLocation.X);
1010*b1cdbd2cSJim Jagielski     const double nMinY (-rLocation.Y);
1011*b1cdbd2cSJim Jagielski     const double nMaxX (aWindowBox.Width-rLocation.X);
1012*b1cdbd2cSJim Jagielski     const double nMaxY (aWindowBox.Height-rLocation.Y);
1013*b1cdbd2cSJim Jagielski 
1014*b1cdbd2cSJim Jagielski     // Create a clip polygon.
1015*b1cdbd2cSJim Jagielski     Reference<rendering::XPolyPolygon2D> xPolygon;
1016*b1cdbd2cSJim Jagielski     if (rxOriginalClip.is())
1017*b1cdbd2cSJim Jagielski     {
1018*b1cdbd2cSJim Jagielski         // Combine the original clip with the window clip.
1019*b1cdbd2cSJim Jagielski         const ::basegfx::B2DPolyPolygon aOriginalClip (
1020*b1cdbd2cSJim Jagielski             ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(rxOriginalClip));
1021*b1cdbd2cSJim Jagielski         ::basegfx::B2DRectangle aWindowRange (nMinX, nMinY, nMaxX, nMaxY);
1022*b1cdbd2cSJim Jagielski         const ::basegfx::B2DPolyPolygon aClippedClipPolygon (
1023*b1cdbd2cSJim Jagielski             ::basegfx::tools::clipPolyPolygonOnRange(
1024*b1cdbd2cSJim Jagielski                 aOriginalClip,
1025*b1cdbd2cSJim Jagielski                 aWindowRange,
1026*b1cdbd2cSJim Jagielski                 true, /* bInside */
1027*b1cdbd2cSJim Jagielski                 false /* bStroke */));
1028*b1cdbd2cSJim Jagielski         xPolygon = ::basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(
1029*b1cdbd2cSJim Jagielski             xDevice,
1030*b1cdbd2cSJim Jagielski             aClippedClipPolygon);
1031*b1cdbd2cSJim Jagielski     }
1032*b1cdbd2cSJim Jagielski     else
1033*b1cdbd2cSJim Jagielski     {
1034*b1cdbd2cSJim Jagielski         // Create a new clip polygon from the window clip rectangle.
1035*b1cdbd2cSJim Jagielski         Sequence<Sequence<geometry::RealPoint2D> > aPoints (1);
1036*b1cdbd2cSJim Jagielski         aPoints[0] = Sequence<geometry::RealPoint2D>(4);
1037*b1cdbd2cSJim Jagielski         aPoints[0][0] = geometry::RealPoint2D(nMinX,nMinY);
1038*b1cdbd2cSJim Jagielski         aPoints[0][1] = geometry::RealPoint2D(nMaxX,nMinY);
1039*b1cdbd2cSJim Jagielski         aPoints[0][2] = geometry::RealPoint2D(nMaxX,nMaxY);
1040*b1cdbd2cSJim Jagielski         aPoints[0][3] = geometry::RealPoint2D(nMinX,nMaxY);
1041*b1cdbd2cSJim Jagielski         Reference<rendering::XLinePolyPolygon2D> xLinePolygon(
1042*b1cdbd2cSJim Jagielski             xDevice->createCompatibleLinePolyPolygon(aPoints));
1043*b1cdbd2cSJim Jagielski         if (xLinePolygon.is())
1044*b1cdbd2cSJim Jagielski             xLinePolygon->setClosed(0, sal_True);
1045*b1cdbd2cSJim Jagielski         xPolygon = Reference<rendering::XPolyPolygon2D>(xLinePolygon, UNO_QUERY);
1046*b1cdbd2cSJim Jagielski     }
1047*b1cdbd2cSJim Jagielski 
1048*b1cdbd2cSJim Jagielski     return xPolygon;
1049*b1cdbd2cSJim Jagielski }
1050*b1cdbd2cSJim Jagielski 
1051*b1cdbd2cSJim Jagielski 
1052*b1cdbd2cSJim Jagielski 
1053*b1cdbd2cSJim Jagielski 
ThrowIfDisposed(void)1054*b1cdbd2cSJim Jagielski void PresenterCanvas::ThrowIfDisposed (void)
1055*b1cdbd2cSJim Jagielski     throw (css::lang::DisposedException)
1056*b1cdbd2cSJim Jagielski {
1057*b1cdbd2cSJim Jagielski 	if (rBHelper.bDisposed || rBHelper.bInDispose || ! mxSharedCanvas.is())
1058*b1cdbd2cSJim Jagielski 	{
1059*b1cdbd2cSJim Jagielski         throw lang::DisposedException (
1060*b1cdbd2cSJim Jagielski             ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1061*b1cdbd2cSJim Jagielski                 "PresenterCanvas object has already been disposed")),
1062*b1cdbd2cSJim Jagielski             static_cast<uno::XWeak*>(this));
1063*b1cdbd2cSJim Jagielski     }
1064*b1cdbd2cSJim Jagielski }
1065*b1cdbd2cSJim Jagielski 
1066*b1cdbd2cSJim Jagielski 
1067*b1cdbd2cSJim Jagielski 
1068*b1cdbd2cSJim Jagielski 
1069*b1cdbd2cSJim Jagielski //===== PresenterCustomSprite =================================================
1070*b1cdbd2cSJim Jagielski 
1071*b1cdbd2cSJim Jagielski 
PresenterCustomSprite(const rtl::Reference<PresenterCanvas> & rpCanvas,const Reference<rendering::XCustomSprite> & rxSprite,const Reference<awt::XWindow> & rxBaseWindow,const css::geometry::RealSize2D & rSpriteSize)1072*b1cdbd2cSJim Jagielski PresenterCustomSprite::PresenterCustomSprite (
1073*b1cdbd2cSJim Jagielski     const rtl::Reference<PresenterCanvas>& rpCanvas,
1074*b1cdbd2cSJim Jagielski     const Reference<rendering::XCustomSprite>& rxSprite,
1075*b1cdbd2cSJim Jagielski     const Reference<awt::XWindow>& rxBaseWindow,
1076*b1cdbd2cSJim Jagielski     const css::geometry::RealSize2D& rSpriteSize)
1077*b1cdbd2cSJim Jagielski     : PresenterCustomSpriteInterfaceBase(m_aMutex),
1078*b1cdbd2cSJim Jagielski       mpCanvas(rpCanvas),
1079*b1cdbd2cSJim Jagielski       mxSprite(rxSprite),
1080*b1cdbd2cSJim Jagielski       mxBaseWindow(rxBaseWindow),
1081*b1cdbd2cSJim Jagielski       maPosition(0,0),
1082*b1cdbd2cSJim Jagielski       maSpriteSize(rSpriteSize)
1083*b1cdbd2cSJim Jagielski {
1084*b1cdbd2cSJim Jagielski }
1085*b1cdbd2cSJim Jagielski 
1086*b1cdbd2cSJim Jagielski 
1087*b1cdbd2cSJim Jagielski 
1088*b1cdbd2cSJim Jagielski 
~PresenterCustomSprite(void)1089*b1cdbd2cSJim Jagielski PresenterCustomSprite::~PresenterCustomSprite (void)
1090*b1cdbd2cSJim Jagielski {
1091*b1cdbd2cSJim Jagielski }
1092*b1cdbd2cSJim Jagielski 
1093*b1cdbd2cSJim Jagielski 
1094*b1cdbd2cSJim Jagielski 
1095*b1cdbd2cSJim Jagielski 
disposing(void)1096*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCustomSprite::disposing (void)
1097*b1cdbd2cSJim Jagielski     throw (RuntimeException)
1098*b1cdbd2cSJim Jagielski {
1099*b1cdbd2cSJim Jagielski     Reference<XComponent> xComponent (mxSprite, UNO_QUERY);
1100*b1cdbd2cSJim Jagielski     mxSprite = NULL;
1101*b1cdbd2cSJim Jagielski     if (xComponent.is())
1102*b1cdbd2cSJim Jagielski         xComponent->dispose();
1103*b1cdbd2cSJim Jagielski     mpCanvas = rtl::Reference<PresenterCanvas>();
1104*b1cdbd2cSJim Jagielski }
1105*b1cdbd2cSJim Jagielski 
1106*b1cdbd2cSJim Jagielski 
1107*b1cdbd2cSJim Jagielski 
1108*b1cdbd2cSJim Jagielski 
1109*b1cdbd2cSJim Jagielski //----- XSprite ---------------------------------------------------------------
1110*b1cdbd2cSJim Jagielski 
setAlpha(const double nAlpha)1111*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCustomSprite::setAlpha (const double nAlpha)
1112*b1cdbd2cSJim Jagielski     throw (lang::IllegalArgumentException,RuntimeException)
1113*b1cdbd2cSJim Jagielski {
1114*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
1115*b1cdbd2cSJim Jagielski     mxSprite->setAlpha(nAlpha);
1116*b1cdbd2cSJim Jagielski }
1117*b1cdbd2cSJim Jagielski 
1118*b1cdbd2cSJim Jagielski 
1119*b1cdbd2cSJim Jagielski 
1120*b1cdbd2cSJim Jagielski 
move(const geometry::RealPoint2D & rNewPos,const rendering::ViewState & rViewState,const rendering::RenderState & rRenderState)1121*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCustomSprite::move (
1122*b1cdbd2cSJim Jagielski     const geometry::RealPoint2D& rNewPos,
1123*b1cdbd2cSJim Jagielski     const rendering::ViewState& rViewState,
1124*b1cdbd2cSJim Jagielski     const rendering::RenderState& rRenderState)
1125*b1cdbd2cSJim Jagielski     throw (lang::IllegalArgumentException,RuntimeException)
1126*b1cdbd2cSJim Jagielski {
1127*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
1128*b1cdbd2cSJim Jagielski     maPosition = rNewPos;
1129*b1cdbd2cSJim Jagielski     mxSprite->move(
1130*b1cdbd2cSJim Jagielski         rNewPos,
1131*b1cdbd2cSJim Jagielski         mpCanvas->MergeViewState(rViewState, mpCanvas->GetOffset(mxBaseWindow)),
1132*b1cdbd2cSJim Jagielski         rRenderState);
1133*b1cdbd2cSJim Jagielski     // Clip sprite against window bounds.  This call is necessary because
1134*b1cdbd2cSJim Jagielski     // sprite clipping is done in the corrdinate system of the sprite.
1135*b1cdbd2cSJim Jagielski     // Therefore, after each change of the sprites location the window
1136*b1cdbd2cSJim Jagielski     // bounds have to be transformed into the sprites coordinate system.
1137*b1cdbd2cSJim Jagielski     clip(NULL);
1138*b1cdbd2cSJim Jagielski }
1139*b1cdbd2cSJim Jagielski 
1140*b1cdbd2cSJim Jagielski 
1141*b1cdbd2cSJim Jagielski 
1142*b1cdbd2cSJim Jagielski 
transform(const geometry::AffineMatrix2D & rTransformation)1143*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCustomSprite::transform (const geometry::AffineMatrix2D& rTransformation)
1144*b1cdbd2cSJim Jagielski     throw (lang::IllegalArgumentException,RuntimeException)
1145*b1cdbd2cSJim Jagielski {
1146*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
1147*b1cdbd2cSJim Jagielski     mxSprite->transform(rTransformation);
1148*b1cdbd2cSJim Jagielski }
1149*b1cdbd2cSJim Jagielski 
1150*b1cdbd2cSJim Jagielski 
1151*b1cdbd2cSJim Jagielski 
1152*b1cdbd2cSJim Jagielski 
clip(const Reference<rendering::XPolyPolygon2D> & rxClip)1153*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCustomSprite::clip (const Reference<rendering::XPolyPolygon2D>& rxClip)
1154*b1cdbd2cSJim Jagielski     throw (RuntimeException)
1155*b1cdbd2cSJim Jagielski {
1156*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
1157*b1cdbd2cSJim Jagielski     // The clip region is expected in the coordinate system of the sprite.
1158*b1cdbd2cSJim Jagielski     // UpdateSpriteClip() integrates the window bounds, transformed into the
1159*b1cdbd2cSJim Jagielski     // sprites coordinate system, with the given clip.
1160*b1cdbd2cSJim Jagielski     mxSprite->clip(mpCanvas->UpdateSpriteClip(rxClip, maPosition, maSpriteSize));
1161*b1cdbd2cSJim Jagielski }
1162*b1cdbd2cSJim Jagielski 
1163*b1cdbd2cSJim Jagielski 
1164*b1cdbd2cSJim Jagielski 
1165*b1cdbd2cSJim Jagielski 
setPriority(const double nPriority)1166*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCustomSprite::setPriority (const double nPriority)
1167*b1cdbd2cSJim Jagielski     throw (RuntimeException)
1168*b1cdbd2cSJim Jagielski {
1169*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
1170*b1cdbd2cSJim Jagielski     mxSprite->setPriority(nPriority);
1171*b1cdbd2cSJim Jagielski }
1172*b1cdbd2cSJim Jagielski 
1173*b1cdbd2cSJim Jagielski 
1174*b1cdbd2cSJim Jagielski 
show(void)1175*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCustomSprite::show (void)
1176*b1cdbd2cSJim Jagielski     throw (RuntimeException)
1177*b1cdbd2cSJim Jagielski {
1178*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
1179*b1cdbd2cSJim Jagielski     mxSprite->show();
1180*b1cdbd2cSJim Jagielski }
1181*b1cdbd2cSJim Jagielski 
1182*b1cdbd2cSJim Jagielski 
1183*b1cdbd2cSJim Jagielski 
1184*b1cdbd2cSJim Jagielski 
hide(void)1185*b1cdbd2cSJim Jagielski void SAL_CALL PresenterCustomSprite::hide (void)
1186*b1cdbd2cSJim Jagielski     throw (RuntimeException)
1187*b1cdbd2cSJim Jagielski {
1188*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
1189*b1cdbd2cSJim Jagielski     mxSprite->hide();
1190*b1cdbd2cSJim Jagielski }
1191*b1cdbd2cSJim Jagielski 
1192*b1cdbd2cSJim Jagielski 
1193*b1cdbd2cSJim Jagielski 
1194*b1cdbd2cSJim Jagielski 
1195*b1cdbd2cSJim Jagielski //----- XCustomSprite ---------------------------------------------------------
1196*b1cdbd2cSJim Jagielski 
getContentCanvas(void)1197*b1cdbd2cSJim Jagielski Reference<rendering::XCanvas> PresenterCustomSprite::getContentCanvas (void)
1198*b1cdbd2cSJim Jagielski     throw (RuntimeException)
1199*b1cdbd2cSJim Jagielski {
1200*b1cdbd2cSJim Jagielski     ThrowIfDisposed();
1201*b1cdbd2cSJim Jagielski     return mxSprite->getContentCanvas();
1202*b1cdbd2cSJim Jagielski }
1203*b1cdbd2cSJim Jagielski 
1204*b1cdbd2cSJim Jagielski 
1205*b1cdbd2cSJim Jagielski 
1206*b1cdbd2cSJim Jagielski 
1207*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
1208*b1cdbd2cSJim Jagielski 
ThrowIfDisposed(void)1209*b1cdbd2cSJim Jagielski void PresenterCustomSprite::ThrowIfDisposed (void)
1210*b1cdbd2cSJim Jagielski     throw (css::lang::DisposedException)
1211*b1cdbd2cSJim Jagielski {
1212*b1cdbd2cSJim Jagielski 	if (rBHelper.bDisposed || rBHelper.bInDispose || ! mxSprite.is())
1213*b1cdbd2cSJim Jagielski 	{
1214*b1cdbd2cSJim Jagielski         throw lang::DisposedException (
1215*b1cdbd2cSJim Jagielski             ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1216*b1cdbd2cSJim Jagielski                 "PresenterCustomSprite object has already been disposed")),
1217*b1cdbd2cSJim Jagielski             static_cast<uno::XWeak*>(this));
1218*b1cdbd2cSJim Jagielski     }
1219*b1cdbd2cSJim Jagielski }
1220*b1cdbd2cSJim Jagielski 
1221*b1cdbd2cSJim Jagielski 
1222*b1cdbd2cSJim Jagielski 
1223*b1cdbd2cSJim Jagielski 
1224*b1cdbd2cSJim Jagielski } } // end of namespace ::sd::presenter
1225