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 // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sdext.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include "PresenterPaneAnimator.hxx"
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski #include "PresenterAnimation.hxx"
30*b1cdbd2cSJim Jagielski #include "PresenterAnimator.hxx"
31*b1cdbd2cSJim Jagielski #include "PresenterCanvasHelper.hxx"
32*b1cdbd2cSJim Jagielski #include "PresenterController.hxx"
33*b1cdbd2cSJim Jagielski #include "PresenterGeometryHelper.hxx"
34*b1cdbd2cSJim Jagielski #include "PresenterPaintManager.hxx"
35*b1cdbd2cSJim Jagielski #include "PresenterPaneContainer.hxx"
36*b1cdbd2cSJim Jagielski #include "PresenterPaneFactory.hxx"
37*b1cdbd2cSJim Jagielski #include "PresenterSprite.hxx"
38*b1cdbd2cSJim Jagielski #include "PresenterSpritePane.hxx"
39*b1cdbd2cSJim Jagielski #include "PresenterWindowManager.hxx"
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/PosSize.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindowPeer.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/CompositeOperation.hpp>
44*b1cdbd2cSJim Jagielski #include <boost/bind.hpp>
45*b1cdbd2cSJim Jagielski #include <boost/bind/protect.hpp>
46*b1cdbd2cSJim Jagielski #include <boost/enable_shared_from_this.hpp>
47*b1cdbd2cSJim Jagielski
48*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
49*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
50*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::drawing::framework;
51*b1cdbd2cSJim Jagielski using ::rtl::OUString;
52*b1cdbd2cSJim Jagielski using ::std::vector;
53*b1cdbd2cSJim Jagielski
54*b1cdbd2cSJim Jagielski namespace sdext { namespace presenter {
55*b1cdbd2cSJim Jagielski
56*b1cdbd2cSJim Jagielski namespace {
57*b1cdbd2cSJim Jagielski
58*b1cdbd2cSJim Jagielski class PaneGroup;
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielski class PresenterPaneAnimatorBase
61*b1cdbd2cSJim Jagielski : public ::boost::enable_shared_from_this<PresenterPaneAnimatorBase>,
62*b1cdbd2cSJim Jagielski public PresenterPaneAnimator
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski public:
65*b1cdbd2cSJim Jagielski PresenterPaneAnimatorBase (
66*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
67*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
68*b1cdbd2cSJim Jagielski const bool bAnimate,
69*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
70*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions);
71*b1cdbd2cSJim Jagielski virtual ~PresenterPaneAnimatorBase (void);
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski typedef ::std::vector< ::boost::function<void()> > EndOperators;
74*b1cdbd2cSJim Jagielski
75*b1cdbd2cSJim Jagielski void ActivatePanes (void);
76*b1cdbd2cSJim Jagielski void ActivatePane (
77*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId);
78*b1cdbd2cSJim Jagielski void RestoreFrozenWindows (void);
79*b1cdbd2cSJim Jagielski void FreezePanes (const Reference<rendering::XSpriteCanvas>& rxCanvas);
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski protected:
82*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterController> mpPresenterController;
83*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterPaneContainer> mpPaneContainer;
84*b1cdbd2cSJim Jagielski ::rtl::Reference<PresenterWindowManager> mpWindowManager;
85*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<PaneGroup> > maPaneGroups;
86*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::framework::XResourceId> mxCenterPaneId;
87*b1cdbd2cSJim Jagielski bool mbDoAnimation;
88*b1cdbd2cSJim Jagielski EndActions maShowEndActions;
89*b1cdbd2cSJim Jagielski EndActions maHideEndActions;
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski void DeactivatePanes (void);
92*b1cdbd2cSJim Jagielski void ResizePane (
93*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
94*b1cdbd2cSJim Jagielski const geometry::RealRectangle2D& rBox);
95*b1cdbd2cSJim Jagielski void DeactivatePane (
96*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId);
97*b1cdbd2cSJim Jagielski };
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski
100*b1cdbd2cSJim Jagielski class UnfoldInCenterAnimator : public PresenterPaneAnimatorBase
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski public:
103*b1cdbd2cSJim Jagielski UnfoldInCenterAnimator (
104*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
105*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
106*b1cdbd2cSJim Jagielski const bool bAnimate,
107*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
108*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions);
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski virtual ~UnfoldInCenterAnimator (void);
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski virtual void ShowPane (void);
113*b1cdbd2cSJim Jagielski
114*b1cdbd2cSJim Jagielski virtual void HidePane (void);
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski private:
117*b1cdbd2cSJim Jagielski geometry::RealRectangle2D maCenterPaneBox;
118*b1cdbd2cSJim Jagielski
119*b1cdbd2cSJim Jagielski void SetupPaneGroups (void);
120*b1cdbd2cSJim Jagielski geometry::RealRectangle2D MovePanesAway (
121*b1cdbd2cSJim Jagielski const css::geometry::RealRectangle2D& rFreeCenterArea);
122*b1cdbd2cSJim Jagielski };
123*b1cdbd2cSJim Jagielski
124*b1cdbd2cSJim Jagielski
125*b1cdbd2cSJim Jagielski class MoveInFromBottomAnimator : public PresenterPaneAnimatorBase
126*b1cdbd2cSJim Jagielski {
127*b1cdbd2cSJim Jagielski public:
128*b1cdbd2cSJim Jagielski MoveInFromBottomAnimator(
129*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
130*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
131*b1cdbd2cSJim Jagielski const bool bAnimate,
132*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
133*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions);
134*b1cdbd2cSJim Jagielski virtual ~MoveInFromBottomAnimator (void);
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski virtual void ShowPane (void);
137*b1cdbd2cSJim Jagielski virtual void HidePane (void);
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski private:
140*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterSprite> maNewPaneSprite;
141*b1cdbd2cSJim Jagielski geometry::RealRectangle2D maCenterPaneBox;
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski void CreateShowAnimation (
144*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
145*b1cdbd2cSJim Jagielski const EndOperators& rpEndOperators,
146*b1cdbd2cSJim Jagielski const css::uno::Reference<css::rendering::XSpriteCanvas>& rxSpriteCanvas,
147*b1cdbd2cSJim Jagielski const bool bAnimate,
148*b1cdbd2cSJim Jagielski const css::geometry::RealPoint2D& rStartLocation,
149*b1cdbd2cSJim Jagielski const css::geometry::RealPoint2D& rEndLocation);
150*b1cdbd2cSJim Jagielski };
151*b1cdbd2cSJim Jagielski
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski class TransparentOverlayAnimator : public PresenterPaneAnimatorBase
154*b1cdbd2cSJim Jagielski {
155*b1cdbd2cSJim Jagielski public:
156*b1cdbd2cSJim Jagielski TransparentOverlayAnimator(
157*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
158*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
159*b1cdbd2cSJim Jagielski const bool bAnimate,
160*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
161*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions);
162*b1cdbd2cSJim Jagielski virtual ~TransparentOverlayAnimator (void);
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski virtual void ShowPane (void);
165*b1cdbd2cSJim Jagielski virtual void HidePane (void);
166*b1cdbd2cSJim Jagielski
167*b1cdbd2cSJim Jagielski private:
168*b1cdbd2cSJim Jagielski PresenterSprite maBackgroundSprite;
169*b1cdbd2cSJim Jagielski void CreateBackgroundSprite (void);
170*b1cdbd2cSJim Jagielski };
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski class PaneDescriptor
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski public:
176*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor mpPaneDescriptor;
177*b1cdbd2cSJim Jagielski
178*b1cdbd2cSJim Jagielski PaneDescriptor (const PresenterPaneContainer::SharedPaneDescriptor& rpDescriptor);
179*b1cdbd2cSJim Jagielski void Restore (void) const;
180*b1cdbd2cSJim Jagielski private:
181*b1cdbd2cSJim Jagielski double mnLeft;
182*b1cdbd2cSJim Jagielski double mnTop;
183*b1cdbd2cSJim Jagielski double mnRight;
184*b1cdbd2cSJim Jagielski double mnBottom;
185*b1cdbd2cSJim Jagielski };
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski class MultiAnimation : public PresenterAnimation
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski public:
190*b1cdbd2cSJim Jagielski typedef ::boost::function<void(double)> Animation;
191*b1cdbd2cSJim Jagielski MultiAnimation (const sal_uInt32 nDuration);
192*b1cdbd2cSJim Jagielski void AddAnimation (const Animation& rAnimation);
193*b1cdbd2cSJim Jagielski virtual void Run (const double nProgress, const sal_uInt64 nCurrentTime);
194*b1cdbd2cSJim Jagielski private:
195*b1cdbd2cSJim Jagielski vector<Animation> maAnimations;
196*b1cdbd2cSJim Jagielski };
197*b1cdbd2cSJim Jagielski
198*b1cdbd2cSJim Jagielski
199*b1cdbd2cSJim Jagielski class PaneGroup
200*b1cdbd2cSJim Jagielski {
201*b1cdbd2cSJim Jagielski public:
202*b1cdbd2cSJim Jagielski PaneGroup (void);
203*b1cdbd2cSJim Jagielski ~PaneGroup (void);
204*b1cdbd2cSJim Jagielski void AddPane (const PresenterPaneContainer::SharedPaneDescriptor& rpPane);
205*b1cdbd2cSJim Jagielski void CreateSubstitution (const Reference<rendering::XSpriteCanvas>& rxCanvas);
206*b1cdbd2cSJim Jagielski void ThawPanes (void);
207*b1cdbd2cSJim Jagielski void Restore (void);
208*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterSprite> GetSubstitution (void);
209*b1cdbd2cSJim Jagielski css::geometry::RealRectangle2D GetOriginalBoundingBox (void) const;
210*b1cdbd2cSJim Jagielski css::geometry::RealRectangle2D GetCurrentBoundingBox (void) const;
211*b1cdbd2cSJim Jagielski void MovePanes (
212*b1cdbd2cSJim Jagielski const double nXOffset,
213*b1cdbd2cSJim Jagielski const double nYOffset,
214*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterWindowManager>& rpWindowManager);
215*b1cdbd2cSJim Jagielski void ActivatePanes (void);
216*b1cdbd2cSJim Jagielski void DeactivatePanes (void);
217*b1cdbd2cSJim Jagielski void HidePanes (void);
218*b1cdbd2cSJim Jagielski void ShowPanes (void);
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski private:
221*b1cdbd2cSJim Jagielski vector<PaneDescriptor> maPanes;
222*b1cdbd2cSJim Jagielski awt::Rectangle maOriginalBoundingBox;
223*b1cdbd2cSJim Jagielski css::geometry::RealRectangle2D maCurrentBoundingBox;
224*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterSprite> mpSubstitution;
225*b1cdbd2cSJim Jagielski
226*b1cdbd2cSJim Jagielski };
227*b1cdbd2cSJim Jagielski typedef ::boost::shared_ptr<PaneGroup> SharedPaneGroup;
228*b1cdbd2cSJim Jagielski
229*b1cdbd2cSJim Jagielski void InterpolatePosition (
230*b1cdbd2cSJim Jagielski const ::boost::function<void(geometry::RealPoint2D)>& rSetter,
231*b1cdbd2cSJim Jagielski double nP,
232*b1cdbd2cSJim Jagielski const geometry::RealPoint2D rInitialBox,
233*b1cdbd2cSJim Jagielski const geometry::RealPoint2D rFinalBox);
234*b1cdbd2cSJim Jagielski
235*b1cdbd2cSJim Jagielski template<typename T>
236*b1cdbd2cSJim Jagielski void InterpolateValue (
237*b1cdbd2cSJim Jagielski const ::boost::function<void(T)>& rSetter,
238*b1cdbd2cSJim Jagielski double nP,
239*b1cdbd2cSJim Jagielski const T aInitialValue,
240*b1cdbd2cSJim Jagielski const T aFinalValue);
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski void SpriteTransform(
243*b1cdbd2cSJim Jagielski const rtl::Reference<PresenterPaneContainer>& rpPaneContainer,
244*b1cdbd2cSJim Jagielski const Reference<XResourceId>& rxPaneId,
245*b1cdbd2cSJim Jagielski const Reference<awt::XWindow>& rxSpriteOwnerWindow,
246*b1cdbd2cSJim Jagielski const ::boost::shared_ptr<PresenterPaintManager>& rpPaintManager,
247*b1cdbd2cSJim Jagielski const bool bAppear,
248*b1cdbd2cSJim Jagielski const double nX,
249*b1cdbd2cSJim Jagielski const double nInitialTop,
250*b1cdbd2cSJim Jagielski const double nFinalTop,
251*b1cdbd2cSJim Jagielski const double nP);
252*b1cdbd2cSJim Jagielski
253*b1cdbd2cSJim Jagielski void SpritePaneMove (
254*b1cdbd2cSJim Jagielski const rtl::Reference<PresenterPaneContainer>& rpPaneContainer,
255*b1cdbd2cSJim Jagielski const Reference<XResourceId>& rxPaneId,
256*b1cdbd2cSJim Jagielski const geometry::RealPoint2D& rLocation);
257*b1cdbd2cSJim Jagielski
258*b1cdbd2cSJim Jagielski geometry::RealPoint2D GetLocation (const geometry::RealRectangle2D& rBox);
259*b1cdbd2cSJim Jagielski geometry::RealSize2D GetSize (const geometry::RealRectangle2D& rBox);
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski } // end of anonymous namespace
263*b1cdbd2cSJim Jagielski
264*b1cdbd2cSJim Jagielski
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielski //=============================================================================
268*b1cdbd2cSJim Jagielski
269*b1cdbd2cSJim Jagielski
CreateUnfoldInCenterAnimator(const css::uno::Reference<css::drawing::framework::XResourceId> & rxPaneId,const::rtl::Reference<PresenterController> & rpPresenterController,const bool bAnimate,const EndActions & rShowEndActions,const EndActions & rEndEndActions)270*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterPaneAnimator> CreateUnfoldInCenterAnimator (
271*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
272*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
273*b1cdbd2cSJim Jagielski const bool bAnimate,
274*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
275*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions)
276*b1cdbd2cSJim Jagielski {
277*b1cdbd2cSJim Jagielski return ::boost::shared_ptr<PresenterPaneAnimator>(
278*b1cdbd2cSJim Jagielski new UnfoldInCenterAnimator(rxPaneId, rpPresenterController, bAnimate,
279*b1cdbd2cSJim Jagielski rShowEndActions, rEndEndActions));
280*b1cdbd2cSJim Jagielski }
281*b1cdbd2cSJim Jagielski
282*b1cdbd2cSJim Jagielski
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski
CreateMoveInFromBottomAnimator(const css::uno::Reference<css::drawing::framework::XResourceId> & rxPaneId,const::rtl::Reference<PresenterController> & rpPresenterController,const bool bAnimate,const EndActions & rShowEndActions,const EndActions & rEndEndActions)285*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterPaneAnimator> CreateMoveInFromBottomAnimator (
286*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
287*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
288*b1cdbd2cSJim Jagielski const bool bAnimate,
289*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
290*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions)
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski return ::boost::shared_ptr<PresenterPaneAnimator>(
293*b1cdbd2cSJim Jagielski new MoveInFromBottomAnimator(rxPaneId, rpPresenterController, bAnimate,
294*b1cdbd2cSJim Jagielski rShowEndActions, rEndEndActions));
295*b1cdbd2cSJim Jagielski }
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski
299*b1cdbd2cSJim Jagielski
CreateTransparentOverlay(const css::uno::Reference<css::drawing::framework::XResourceId> & rxPaneId,const::rtl::Reference<PresenterController> & rpPresenterController,const bool bAnimate,const EndActions & rShowEndActions,const EndActions & rEndEndActions)300*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterPaneAnimator> CreateTransparentOverlay (
301*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
302*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
303*b1cdbd2cSJim Jagielski const bool bAnimate,
304*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
305*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions)
306*b1cdbd2cSJim Jagielski {
307*b1cdbd2cSJim Jagielski return ::boost::shared_ptr<PresenterPaneAnimator>(
308*b1cdbd2cSJim Jagielski new TransparentOverlayAnimator(rxPaneId, rpPresenterController, bAnimate,
309*b1cdbd2cSJim Jagielski rShowEndActions, rEndEndActions));
310*b1cdbd2cSJim Jagielski }
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski
314*b1cdbd2cSJim Jagielski
315*b1cdbd2cSJim Jagielski //===== PresenterPaneAnimator =================================================
316*b1cdbd2cSJim Jagielski
317*b1cdbd2cSJim Jagielski namespace {
318*b1cdbd2cSJim Jagielski
PresenterPaneAnimatorBase(const css::uno::Reference<css::drawing::framework::XResourceId> & rxPaneId,const::rtl::Reference<PresenterController> & rpPresenterController,const bool bAnimate,const EndActions & rShowEndActions,const EndActions & rHideEndActions)319*b1cdbd2cSJim Jagielski PresenterPaneAnimatorBase::PresenterPaneAnimatorBase (
320*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
321*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
322*b1cdbd2cSJim Jagielski const bool bAnimate,
323*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
324*b1cdbd2cSJim Jagielski const EndActions& rHideEndActions)
325*b1cdbd2cSJim Jagielski : mpPresenterController(rpPresenterController),
326*b1cdbd2cSJim Jagielski mpPaneContainer(rpPresenterController->GetPaneContainer()),
327*b1cdbd2cSJim Jagielski mpWindowManager(rpPresenterController->GetWindowManager()),
328*b1cdbd2cSJim Jagielski maPaneGroups(),
329*b1cdbd2cSJim Jagielski mxCenterPaneId(rxPaneId),
330*b1cdbd2cSJim Jagielski mbDoAnimation(bAnimate),
331*b1cdbd2cSJim Jagielski maShowEndActions(rShowEndActions),
332*b1cdbd2cSJim Jagielski maHideEndActions(rHideEndActions)
333*b1cdbd2cSJim Jagielski {
334*b1cdbd2cSJim Jagielski }
335*b1cdbd2cSJim Jagielski
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski
338*b1cdbd2cSJim Jagielski
~PresenterPaneAnimatorBase(void)339*b1cdbd2cSJim Jagielski PresenterPaneAnimatorBase::~PresenterPaneAnimatorBase (void)
340*b1cdbd2cSJim Jagielski {
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski
FreezePanes(const Reference<rendering::XSpriteCanvas> & rxCanvas)346*b1cdbd2cSJim Jagielski void PresenterPaneAnimatorBase::FreezePanes (const Reference<rendering::XSpriteCanvas>& rxCanvas)
347*b1cdbd2cSJim Jagielski {
348*b1cdbd2cSJim Jagielski ::std::vector<SharedPaneGroup>::const_iterator iGroup;
349*b1cdbd2cSJim Jagielski for (iGroup=maPaneGroups.begin(); iGroup!=maPaneGroups.end(); ++iGroup)
350*b1cdbd2cSJim Jagielski {
351*b1cdbd2cSJim Jagielski (*iGroup)->CreateSubstitution(rxCanvas);
352*b1cdbd2cSJim Jagielski (*iGroup)->GetSubstitution()->MoveTo(GetLocation((*iGroup)->GetOriginalBoundingBox()));
353*b1cdbd2cSJim Jagielski }
354*b1cdbd2cSJim Jagielski }
355*b1cdbd2cSJim Jagielski
356*b1cdbd2cSJim Jagielski
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielski
ActivatePanes(void)359*b1cdbd2cSJim Jagielski void PresenterPaneAnimatorBase::ActivatePanes (void)
360*b1cdbd2cSJim Jagielski {
361*b1cdbd2cSJim Jagielski ActivatePane(mxCenterPaneId);
362*b1cdbd2cSJim Jagielski
363*b1cdbd2cSJim Jagielski ::std::vector<SharedPaneGroup>::const_iterator iGroup;
364*b1cdbd2cSJim Jagielski for (iGroup=maPaneGroups.begin(); iGroup!=maPaneGroups.end(); ++iGroup)
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski (*iGroup)->ShowPanes();
367*b1cdbd2cSJim Jagielski (*iGroup)->ActivatePanes();
368*b1cdbd2cSJim Jagielski (*iGroup)->GetSubstitution()->Hide();
369*b1cdbd2cSJim Jagielski }
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski mpWindowManager->Update();
372*b1cdbd2cSJim Jagielski }
373*b1cdbd2cSJim Jagielski
374*b1cdbd2cSJim Jagielski
375*b1cdbd2cSJim Jagielski
376*b1cdbd2cSJim Jagielski
DeactivatePanes(void)377*b1cdbd2cSJim Jagielski void PresenterPaneAnimatorBase::DeactivatePanes (void)
378*b1cdbd2cSJim Jagielski {
379*b1cdbd2cSJim Jagielski ::std::vector<SharedPaneGroup>::const_iterator iGroup;
380*b1cdbd2cSJim Jagielski for (iGroup=maPaneGroups.begin(); iGroup!=maPaneGroups.end(); ++iGroup)
381*b1cdbd2cSJim Jagielski {
382*b1cdbd2cSJim Jagielski (*iGroup)->GetSubstitution()->Show();
383*b1cdbd2cSJim Jagielski (*iGroup)->DeactivatePanes();
384*b1cdbd2cSJim Jagielski (*iGroup)->HidePanes();
385*b1cdbd2cSJim Jagielski }
386*b1cdbd2cSJim Jagielski
387*b1cdbd2cSJim Jagielski mpWindowManager->Update();
388*b1cdbd2cSJim Jagielski }
389*b1cdbd2cSJim Jagielski
390*b1cdbd2cSJim Jagielski
391*b1cdbd2cSJim Jagielski
392*b1cdbd2cSJim Jagielski
ResizePane(const Reference<drawing::framework::XResourceId> & rxPaneId,const geometry::RealRectangle2D & rBox)393*b1cdbd2cSJim Jagielski void PresenterPaneAnimatorBase::ResizePane (
394*b1cdbd2cSJim Jagielski const Reference<drawing::framework::XResourceId>& rxPaneId,
395*b1cdbd2cSJim Jagielski const geometry::RealRectangle2D& rBox)
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
398*b1cdbd2cSJim Jagielski mpPaneContainer->FindPaneId(rxPaneId));
399*b1cdbd2cSJim Jagielski if (pDescriptor.get() != NULL)
400*b1cdbd2cSJim Jagielski {
401*b1cdbd2cSJim Jagielski mpWindowManager->SetPanePosSizeAbsolute (
402*b1cdbd2cSJim Jagielski rxPaneId->getResourceURL(),
403*b1cdbd2cSJim Jagielski rBox.X1,
404*b1cdbd2cSJim Jagielski rBox.Y1,
405*b1cdbd2cSJim Jagielski rBox.X2-rBox.X1,
406*b1cdbd2cSJim Jagielski rBox.Y2-rBox.Y1);
407*b1cdbd2cSJim Jagielski mpWindowManager->Layout();
408*b1cdbd2cSJim Jagielski if ( ! pDescriptor->maSpriteProvider.empty())
409*b1cdbd2cSJim Jagielski {
410*b1cdbd2cSJim Jagielski pDescriptor->maSpriteProvider()->Resize(GetSize(rBox));
411*b1cdbd2cSJim Jagielski }
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski
417*b1cdbd2cSJim Jagielski
RestoreFrozenWindows(void)418*b1cdbd2cSJim Jagielski void PresenterPaneAnimatorBase::RestoreFrozenWindows (void)
419*b1cdbd2cSJim Jagielski {
420*b1cdbd2cSJim Jagielski ::std::vector<SharedPaneGroup>::const_iterator iGroup;
421*b1cdbd2cSJim Jagielski for (iGroup=maPaneGroups.begin(); iGroup!=maPaneGroups.end(); ++iGroup)
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski (*iGroup)->Restore();
424*b1cdbd2cSJim Jagielski (*iGroup)->ShowPanes();
425*b1cdbd2cSJim Jagielski (*iGroup)->ActivatePanes();
426*b1cdbd2cSJim Jagielski (*iGroup)->GetSubstitution()->Hide();
427*b1cdbd2cSJim Jagielski }
428*b1cdbd2cSJim Jagielski maPaneGroups.clear();
429*b1cdbd2cSJim Jagielski
430*b1cdbd2cSJim Jagielski ActivatePane(mxCenterPaneId);
431*b1cdbd2cSJim Jagielski
432*b1cdbd2cSJim Jagielski mpWindowManager->Update();
433*b1cdbd2cSJim Jagielski }
434*b1cdbd2cSJim Jagielski
435*b1cdbd2cSJim Jagielski
436*b1cdbd2cSJim Jagielski
437*b1cdbd2cSJim Jagielski
ActivatePane(const Reference<drawing::framework::XResourceId> & rxPaneId)438*b1cdbd2cSJim Jagielski void PresenterPaneAnimatorBase::ActivatePane (
439*b1cdbd2cSJim Jagielski const Reference<drawing::framework::XResourceId>& rxPaneId)
440*b1cdbd2cSJim Jagielski {
441*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
442*b1cdbd2cSJim Jagielski mpPaneContainer->FindPaneId(rxPaneId));
443*b1cdbd2cSJim Jagielski if (pDescriptor.get() != NULL)
444*b1cdbd2cSJim Jagielski pDescriptor->SetActivationState(true);
445*b1cdbd2cSJim Jagielski }
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielski
449*b1cdbd2cSJim Jagielski
DeactivatePane(const Reference<drawing::framework::XResourceId> & rxPaneId)450*b1cdbd2cSJim Jagielski void PresenterPaneAnimatorBase::DeactivatePane (
451*b1cdbd2cSJim Jagielski const Reference<drawing::framework::XResourceId>& rxPaneId)
452*b1cdbd2cSJim Jagielski {
453*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
454*b1cdbd2cSJim Jagielski mpPaneContainer->FindPaneId(rxPaneId));
455*b1cdbd2cSJim Jagielski if (pDescriptor.get() != NULL)
456*b1cdbd2cSJim Jagielski pDescriptor->SetActivationState(false);
457*b1cdbd2cSJim Jagielski }
458*b1cdbd2cSJim Jagielski
459*b1cdbd2cSJim Jagielski
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski
462*b1cdbd2cSJim Jagielski //===== UnfoldInCenterAnimator ================================================
463*b1cdbd2cSJim Jagielski
UnfoldInCenterAnimator(const css::uno::Reference<css::drawing::framework::XResourceId> & rxPaneId,const::rtl::Reference<PresenterController> & rpPresenterController,const bool bAnimate,const EndActions & rShowEndActions,const EndActions & rEndEndActions)464*b1cdbd2cSJim Jagielski UnfoldInCenterAnimator::UnfoldInCenterAnimator (
465*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
466*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
467*b1cdbd2cSJim Jagielski const bool bAnimate,
468*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
469*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions)
470*b1cdbd2cSJim Jagielski : PresenterPaneAnimatorBase(rxPaneId, rpPresenterController, bAnimate,
471*b1cdbd2cSJim Jagielski rShowEndActions, rEndEndActions)
472*b1cdbd2cSJim Jagielski {
473*b1cdbd2cSJim Jagielski }
474*b1cdbd2cSJim Jagielski
475*b1cdbd2cSJim Jagielski
476*b1cdbd2cSJim Jagielski
477*b1cdbd2cSJim Jagielski
~UnfoldInCenterAnimator(void)478*b1cdbd2cSJim Jagielski UnfoldInCenterAnimator::~UnfoldInCenterAnimator (void)
479*b1cdbd2cSJim Jagielski {
480*b1cdbd2cSJim Jagielski }
481*b1cdbd2cSJim Jagielski
482*b1cdbd2cSJim Jagielski
483*b1cdbd2cSJim Jagielski
484*b1cdbd2cSJim Jagielski
ShowPane(void)485*b1cdbd2cSJim Jagielski void UnfoldInCenterAnimator::ShowPane (void)
486*b1cdbd2cSJim Jagielski {
487*b1cdbd2cSJim Jagielski OSL_ASSERT(mpWindowManager.get()!=NULL);
488*b1cdbd2cSJim Jagielski
489*b1cdbd2cSJim Jagielski Reference<awt::XWindow> xParentWindow (mpWindowManager->GetParentWindow(), UNO_QUERY);
490*b1cdbd2cSJim Jagielski if ( ! xParentWindow.is())
491*b1cdbd2cSJim Jagielski return;
492*b1cdbd2cSJim Jagielski
493*b1cdbd2cSJim Jagielski Reference<rendering::XSpriteCanvas> xCanvas (mpWindowManager->GetParentCanvas(), UNO_QUERY);
494*b1cdbd2cSJim Jagielski if ( ! xCanvas.is())
495*b1cdbd2cSJim Jagielski return;
496*b1cdbd2cSJim Jagielski
497*b1cdbd2cSJim Jagielski Reference<rendering::XBitmap> xParentBitmap (xCanvas, UNO_QUERY);
498*b1cdbd2cSJim Jagielski if ( ! xParentBitmap.is())
499*b1cdbd2cSJim Jagielski return;
500*b1cdbd2cSJim Jagielski
501*b1cdbd2cSJim Jagielski Reference<rendering::XGraphicDevice> xDevice(xCanvas->getDevice());
502*b1cdbd2cSJim Jagielski if ( ! xDevice.is())
503*b1cdbd2cSJim Jagielski return;
504*b1cdbd2cSJim Jagielski
505*b1cdbd2cSJim Jagielski awt::Rectangle aWindowBox (xParentWindow->getPosSize());
506*b1cdbd2cSJim Jagielski
507*b1cdbd2cSJim Jagielski // Create two pane groups that will be moved together. One contains the
508*b1cdbd2cSJim Jagielski // notes view, the other group contains all other panes.
509*b1cdbd2cSJim Jagielski SetupPaneGroups();
510*b1cdbd2cSJim Jagielski
511*b1cdbd2cSJim Jagielski // Setup the places where the two pane groups are moved to.
512*b1cdbd2cSJim Jagielski maCenterPaneBox
513*b1cdbd2cSJim Jagielski = MovePanesAway(geometry::RealRectangle2D(0,200,aWindowBox.Width, aWindowBox.Height-200));
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski // Setup the final size of the new pane so that it fits into the space
516*b1cdbd2cSJim Jagielski // between the two pane groups.
517*b1cdbd2cSJim Jagielski ResizePane(mxCenterPaneId, maCenterPaneBox);
518*b1cdbd2cSJim Jagielski
519*b1cdbd2cSJim Jagielski // Avoid that the center pane updates its previews while being animated.
520*b1cdbd2cSJim Jagielski DeactivatePane(mxCenterPaneId);
521*b1cdbd2cSJim Jagielski
522*b1cdbd2cSJim Jagielski // Replace the pane groups with sprites that look like the panes but can
523*b1cdbd2cSJim Jagielski // be moved around much faster.
524*b1cdbd2cSJim Jagielski FreezePanes(xCanvas);
525*b1cdbd2cSJim Jagielski
526*b1cdbd2cSJim Jagielski // The vertical center of the new pane.
527*b1cdbd2cSJim Jagielski const double nY0 ((maPaneGroups[0]->GetOriginalBoundingBox().Y2
528*b1cdbd2cSJim Jagielski + maPaneGroups[1]->GetOriginalBoundingBox().Y1) / 2);
529*b1cdbd2cSJim Jagielski
530*b1cdbd2cSJim Jagielski // Make sure that the new pane is painted once before the animation starts.
531*b1cdbd2cSJim Jagielski SpriteTransform(
532*b1cdbd2cSJim Jagielski mpPaneContainer,
533*b1cdbd2cSJim Jagielski mxCenterPaneId,
534*b1cdbd2cSJim Jagielski xParentWindow,
535*b1cdbd2cSJim Jagielski mpPresenterController->GetPaintManager(),
536*b1cdbd2cSJim Jagielski true,
537*b1cdbd2cSJim Jagielski maCenterPaneBox.X1,
538*b1cdbd2cSJim Jagielski nY0,
539*b1cdbd2cSJim Jagielski maCenterPaneBox.Y1,
540*b1cdbd2cSJim Jagielski 0);
541*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
542*b1cdbd2cSJim Jagielski mpPaneContainer->FindPaneId(mxCenterPaneId));
543*b1cdbd2cSJim Jagielski if (pDescriptor.get() != NULL)
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski mpPresenterController->GetPaintManager()->Invalidate(
546*b1cdbd2cSJim Jagielski pDescriptor->mxBorderWindow,
547*b1cdbd2cSJim Jagielski true);
548*b1cdbd2cSJim Jagielski }
549*b1cdbd2cSJim Jagielski
550*b1cdbd2cSJim Jagielski // Animate the upper and lower window bitmaps.
551*b1cdbd2cSJim Jagielski ::boost::shared_ptr<MultiAnimation> pMultiAnimation (
552*b1cdbd2cSJim Jagielski new MultiAnimation(mbDoAnimation ? 500 : 0));
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski // Animate the pane group sprites to be moved up or down.
555*b1cdbd2cSJim Jagielski vector<SharedPaneGroup>::const_iterator iGroup;
556*b1cdbd2cSJim Jagielski for (iGroup=maPaneGroups.begin(); iGroup!=maPaneGroups.end(); ++iGroup)
557*b1cdbd2cSJim Jagielski {
558*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
559*b1cdbd2cSJim Jagielski ::boost::bind(
560*b1cdbd2cSJim Jagielski InterpolatePosition,
561*b1cdbd2cSJim Jagielski ::boost::protect(::boost::bind(
562*b1cdbd2cSJim Jagielski &PresenterSprite::MoveTo, (*iGroup)->GetSubstitution(), _1)),
563*b1cdbd2cSJim Jagielski _1,
564*b1cdbd2cSJim Jagielski GetLocation((*iGroup)->GetOriginalBoundingBox()),
565*b1cdbd2cSJim Jagielski GetLocation((*iGroup)->GetCurrentBoundingBox())));
566*b1cdbd2cSJim Jagielski }
567*b1cdbd2cSJim Jagielski
568*b1cdbd2cSJim Jagielski // Animate the new center pane to expand.
569*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
570*b1cdbd2cSJim Jagielski ::boost::bind(
571*b1cdbd2cSJim Jagielski SpriteTransform,
572*b1cdbd2cSJim Jagielski mpPaneContainer,
573*b1cdbd2cSJim Jagielski mxCenterPaneId,
574*b1cdbd2cSJim Jagielski xParentWindow,
575*b1cdbd2cSJim Jagielski mpPresenterController->GetPaintManager(),
576*b1cdbd2cSJim Jagielski true,
577*b1cdbd2cSJim Jagielski maCenterPaneBox.X1,
578*b1cdbd2cSJim Jagielski nY0,
579*b1cdbd2cSJim Jagielski maCenterPaneBox.Y1,
580*b1cdbd2cSJim Jagielski _1));
581*b1cdbd2cSJim Jagielski
582*b1cdbd2cSJim Jagielski // Call updateScreen after each animation step.
583*b1cdbd2cSJim Jagielski if (xCanvas.is())
584*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
585*b1cdbd2cSJim Jagielski ::boost::bind(&rendering::XSpriteCanvas::updateScreen, xCanvas, sal_False));
586*b1cdbd2cSJim Jagielski
587*b1cdbd2cSJim Jagielski // Activate the panes when the animation is over.
588*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(
589*b1cdbd2cSJim Jagielski ::boost::bind(&PresenterPaneAnimatorBase::ActivatePanes, shared_from_this()));
590*b1cdbd2cSJim Jagielski EndActions::const_iterator iAction;
591*b1cdbd2cSJim Jagielski for (iAction=maShowEndActions.begin(); iAction!=maShowEndActions.end(); ++iAction)
592*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(*iAction);
593*b1cdbd2cSJim Jagielski
594*b1cdbd2cSJim Jagielski // Start the animation.
595*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterAnimator> pAnimator (mpPresenterController->GetAnimator());
596*b1cdbd2cSJim Jagielski OSL_ASSERT(pAnimator.get()!=NULL);
597*b1cdbd2cSJim Jagielski pAnimator->AddAnimation(SharedPresenterAnimation(pMultiAnimation));
598*b1cdbd2cSJim Jagielski
599*b1cdbd2cSJim Jagielski mpWindowManager->Update();
600*b1cdbd2cSJim Jagielski }
601*b1cdbd2cSJim Jagielski
602*b1cdbd2cSJim Jagielski
603*b1cdbd2cSJim Jagielski
604*b1cdbd2cSJim Jagielski
HidePane(void)605*b1cdbd2cSJim Jagielski void UnfoldInCenterAnimator::HidePane (void)
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski OSL_ASSERT(mpWindowManager.get()!=NULL);
608*b1cdbd2cSJim Jagielski
609*b1cdbd2cSJim Jagielski Reference<awt::XWindow> xParentWindow (mpWindowManager->GetParentWindow(), UNO_QUERY);
610*b1cdbd2cSJim Jagielski if ( ! xParentWindow.is())
611*b1cdbd2cSJim Jagielski return;
612*b1cdbd2cSJim Jagielski
613*b1cdbd2cSJim Jagielski DeactivatePanes();
614*b1cdbd2cSJim Jagielski DeactivatePane(mxCenterPaneId);
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterAnimator> pAnimator (mpPresenterController->GetAnimator());
617*b1cdbd2cSJim Jagielski const awt::Rectangle aWindowBox (xParentWindow->getPosSize());
618*b1cdbd2cSJim Jagielski const rendering::ViewState aViewState (
619*b1cdbd2cSJim Jagielski geometry::AffineMatrix2D(1,0,0, 0,1,0),
620*b1cdbd2cSJim Jagielski NULL);
621*b1cdbd2cSJim Jagielski const rendering::RenderState aRenderState (
622*b1cdbd2cSJim Jagielski geometry::AffineMatrix2D(1,0,0, 0,1,0),
623*b1cdbd2cSJim Jagielski NULL,
624*b1cdbd2cSJim Jagielski Sequence<double>(4),
625*b1cdbd2cSJim Jagielski rendering::CompositeOperation::SOURCE);
626*b1cdbd2cSJim Jagielski
627*b1cdbd2cSJim Jagielski // Animate the uppder and lower window bitmaps.
628*b1cdbd2cSJim Jagielski Reference<rendering::XSpriteCanvas> xSpriteCanvas (mpWindowManager->GetParentCanvas(), UNO_QUERY);
629*b1cdbd2cSJim Jagielski ::boost::shared_ptr<MultiAnimation> pMultiAnimation (new MultiAnimation(mbDoAnimation ? 500 : 1));
630*b1cdbd2cSJim Jagielski
631*b1cdbd2cSJim Jagielski vector<SharedPaneGroup>::const_iterator iGroup;
632*b1cdbd2cSJim Jagielski for (iGroup=maPaneGroups.begin(); iGroup!=maPaneGroups.end(); ++iGroup)
633*b1cdbd2cSJim Jagielski {
634*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
635*b1cdbd2cSJim Jagielski ::boost::bind(
636*b1cdbd2cSJim Jagielski InterpolatePosition,
637*b1cdbd2cSJim Jagielski ::boost::protect(::boost::bind(
638*b1cdbd2cSJim Jagielski &PresenterSprite::MoveTo, (*iGroup)->GetSubstitution(), _1)),
639*b1cdbd2cSJim Jagielski _1,
640*b1cdbd2cSJim Jagielski GetLocation((*iGroup)->GetCurrentBoundingBox()),
641*b1cdbd2cSJim Jagielski GetLocation((*iGroup)->GetOriginalBoundingBox())));
642*b1cdbd2cSJim Jagielski }
643*b1cdbd2cSJim Jagielski
644*b1cdbd2cSJim Jagielski // Animate the new center pane to collapse.
645*b1cdbd2cSJim Jagielski const double nY0 ((maPaneGroups[0]->GetOriginalBoundingBox().Y2
646*b1cdbd2cSJim Jagielski + maPaneGroups[1]->GetOriginalBoundingBox().Y1) / 2);
647*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
648*b1cdbd2cSJim Jagielski ::boost::bind(
649*b1cdbd2cSJim Jagielski SpriteTransform,
650*b1cdbd2cSJim Jagielski mpPaneContainer,
651*b1cdbd2cSJim Jagielski mxCenterPaneId,
652*b1cdbd2cSJim Jagielski xParentWindow,
653*b1cdbd2cSJim Jagielski mpPresenterController->GetPaintManager(),
654*b1cdbd2cSJim Jagielski false,
655*b1cdbd2cSJim Jagielski maCenterPaneBox.X1,
656*b1cdbd2cSJim Jagielski nY0,
657*b1cdbd2cSJim Jagielski maCenterPaneBox.Y1,
658*b1cdbd2cSJim Jagielski _1));
659*b1cdbd2cSJim Jagielski
660*b1cdbd2cSJim Jagielski if (mbDoAnimation)
661*b1cdbd2cSJim Jagielski {
662*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
663*b1cdbd2cSJim Jagielski ::boost::bind(&rendering::XSpriteCanvas::updateScreen, xSpriteCanvas, sal_False));
664*b1cdbd2cSJim Jagielski }
665*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(
666*b1cdbd2cSJim Jagielski ::boost::bind(&PresenterPaneAnimatorBase::RestoreFrozenWindows, shared_from_this()));
667*b1cdbd2cSJim Jagielski EndActions::const_iterator iAction;
668*b1cdbd2cSJim Jagielski for (iAction=maHideEndActions.begin(); iAction!=maHideEndActions.end(); ++iAction)
669*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(*iAction);
670*b1cdbd2cSJim Jagielski
671*b1cdbd2cSJim Jagielski pAnimator->AddAnimation(SharedPresenterAnimation(pMultiAnimation));
672*b1cdbd2cSJim Jagielski }
673*b1cdbd2cSJim Jagielski
674*b1cdbd2cSJim Jagielski
675*b1cdbd2cSJim Jagielski
676*b1cdbd2cSJim Jagielski
SetupPaneGroups(void)677*b1cdbd2cSJim Jagielski void UnfoldInCenterAnimator::SetupPaneGroups (void)
678*b1cdbd2cSJim Jagielski {
679*b1cdbd2cSJim Jagielski maPaneGroups.clear();
680*b1cdbd2cSJim Jagielski
681*b1cdbd2cSJim Jagielski // Setup the upper pane group.
682*b1cdbd2cSJim Jagielski SharedPaneGroup pUpperPanes (new PaneGroup());
683*b1cdbd2cSJim Jagielski pUpperPanes->AddPane(mpPaneContainer->FindPaneURL(
684*b1cdbd2cSJim Jagielski PresenterPaneFactory::msCurrentSlidePreviewPaneURL));
685*b1cdbd2cSJim Jagielski pUpperPanes->AddPane(mpPaneContainer->FindPaneURL(
686*b1cdbd2cSJim Jagielski PresenterPaneFactory::msNextSlidePreviewPaneURL));
687*b1cdbd2cSJim Jagielski pUpperPanes->AddPane(mpPaneContainer->FindPaneURL(
688*b1cdbd2cSJim Jagielski PresenterPaneFactory::msToolBarPaneURL));
689*b1cdbd2cSJim Jagielski pUpperPanes->AddPane(mpPaneContainer->FindPaneURL(
690*b1cdbd2cSJim Jagielski PresenterPaneFactory::msHelpPaneURL));
691*b1cdbd2cSJim Jagielski maPaneGroups.push_back(pUpperPanes);
692*b1cdbd2cSJim Jagielski
693*b1cdbd2cSJim Jagielski // Setup the lower pane group.
694*b1cdbd2cSJim Jagielski SharedPaneGroup pLowerPanes (new PaneGroup());
695*b1cdbd2cSJim Jagielski pLowerPanes->AddPane(mpPaneContainer->FindPaneURL(
696*b1cdbd2cSJim Jagielski PresenterPaneFactory::msNotesPaneURL));
697*b1cdbd2cSJim Jagielski maPaneGroups.push_back(pLowerPanes);
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski
700*b1cdbd2cSJim Jagielski
701*b1cdbd2cSJim Jagielski
702*b1cdbd2cSJim Jagielski
MovePanesAway(const geometry::RealRectangle2D & rFreeCenterArea)703*b1cdbd2cSJim Jagielski geometry::RealRectangle2D UnfoldInCenterAnimator::MovePanesAway (
704*b1cdbd2cSJim Jagielski const geometry::RealRectangle2D& rFreeCenterArea)
705*b1cdbd2cSJim Jagielski {
706*b1cdbd2cSJim Jagielski SharedPaneGroup aUpperPanes = maPaneGroups[0];
707*b1cdbd2cSJim Jagielski SharedPaneGroup aLowerPanes = maPaneGroups[1];
708*b1cdbd2cSJim Jagielski
709*b1cdbd2cSJim Jagielski // Move upper pane group out of the way.
710*b1cdbd2cSJim Jagielski const double nTop (rFreeCenterArea.Y1);
711*b1cdbd2cSJim Jagielski const double nUpperVerticalOffset (nTop - aUpperPanes->GetOriginalBoundingBox().Y2);
712*b1cdbd2cSJim Jagielski aUpperPanes->MovePanes(0, nUpperVerticalOffset, mpWindowManager);
713*b1cdbd2cSJim Jagielski
714*b1cdbd2cSJim Jagielski // Move lower pane group out of the way.
715*b1cdbd2cSJim Jagielski const double nBottom (rFreeCenterArea.Y2);
716*b1cdbd2cSJim Jagielski const double nLowerVerticalOffset (nBottom - aLowerPanes->GetOriginalBoundingBox().Y1);
717*b1cdbd2cSJim Jagielski aLowerPanes->MovePanes(0, nLowerVerticalOffset, mpWindowManager);
718*b1cdbd2cSJim Jagielski
719*b1cdbd2cSJim Jagielski return geometry::RealRectangle2D(
720*b1cdbd2cSJim Jagielski ::std::min(
721*b1cdbd2cSJim Jagielski aUpperPanes->GetOriginalBoundingBox().X1,
722*b1cdbd2cSJim Jagielski aLowerPanes->GetOriginalBoundingBox().X1),
723*b1cdbd2cSJim Jagielski nTop+20,
724*b1cdbd2cSJim Jagielski ::std::max(
725*b1cdbd2cSJim Jagielski aUpperPanes->GetOriginalBoundingBox().X2,
726*b1cdbd2cSJim Jagielski aLowerPanes->GetOriginalBoundingBox().X2),
727*b1cdbd2cSJim Jagielski nBottom-20);
728*b1cdbd2cSJim Jagielski }
729*b1cdbd2cSJim Jagielski
730*b1cdbd2cSJim Jagielski
731*b1cdbd2cSJim Jagielski
732*b1cdbd2cSJim Jagielski
733*b1cdbd2cSJim Jagielski //===== MoveInFromBottomAnimator ==============================================
734*b1cdbd2cSJim Jagielski
MoveInFromBottomAnimator(const css::uno::Reference<css::drawing::framework::XResourceId> & rxPaneId,const::rtl::Reference<PresenterController> & rpPresenterController,const bool bAnimate,const EndActions & rShowEndActions,const EndActions & rEndEndActions)735*b1cdbd2cSJim Jagielski MoveInFromBottomAnimator::MoveInFromBottomAnimator (
736*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
737*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
738*b1cdbd2cSJim Jagielski const bool bAnimate,
739*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
740*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions)
741*b1cdbd2cSJim Jagielski : PresenterPaneAnimatorBase(rxPaneId, rpPresenterController, bAnimate,
742*b1cdbd2cSJim Jagielski rShowEndActions, rEndEndActions),
743*b1cdbd2cSJim Jagielski maNewPaneSprite()
744*b1cdbd2cSJim Jagielski {
745*b1cdbd2cSJim Jagielski }
746*b1cdbd2cSJim Jagielski
747*b1cdbd2cSJim Jagielski
748*b1cdbd2cSJim Jagielski
749*b1cdbd2cSJim Jagielski
~MoveInFromBottomAnimator(void)750*b1cdbd2cSJim Jagielski MoveInFromBottomAnimator::~MoveInFromBottomAnimator (void)
751*b1cdbd2cSJim Jagielski {
752*b1cdbd2cSJim Jagielski }
753*b1cdbd2cSJim Jagielski
754*b1cdbd2cSJim Jagielski
755*b1cdbd2cSJim Jagielski
756*b1cdbd2cSJim Jagielski
ShowPane(void)757*b1cdbd2cSJim Jagielski void MoveInFromBottomAnimator::ShowPane (void)
758*b1cdbd2cSJim Jagielski {
759*b1cdbd2cSJim Jagielski OSL_ASSERT(mpWindowManager.get()!=NULL);
760*b1cdbd2cSJim Jagielski
761*b1cdbd2cSJim Jagielski Reference<awt::XWindow> xParentWindow (mpWindowManager->GetParentWindow(), UNO_QUERY);
762*b1cdbd2cSJim Jagielski if ( ! xParentWindow.is())
763*b1cdbd2cSJim Jagielski return;
764*b1cdbd2cSJim Jagielski
765*b1cdbd2cSJim Jagielski Reference<rendering::XSpriteCanvas> xCanvas (mpWindowManager->GetParentCanvas(), UNO_QUERY);
766*b1cdbd2cSJim Jagielski if ( ! xCanvas.is())
767*b1cdbd2cSJim Jagielski return;
768*b1cdbd2cSJim Jagielski
769*b1cdbd2cSJim Jagielski Reference<rendering::XBitmap> xParentBitmap (xCanvas, UNO_QUERY);
770*b1cdbd2cSJim Jagielski if ( ! xParentBitmap.is())
771*b1cdbd2cSJim Jagielski return;
772*b1cdbd2cSJim Jagielski
773*b1cdbd2cSJim Jagielski Reference<rendering::XGraphicDevice> xDevice(xCanvas->getDevice());
774*b1cdbd2cSJim Jagielski if ( ! xDevice.is())
775*b1cdbd2cSJim Jagielski return;
776*b1cdbd2cSJim Jagielski
777*b1cdbd2cSJim Jagielski awt::Rectangle aWindowBox (xParentWindow->getPosSize());
778*b1cdbd2cSJim Jagielski
779*b1cdbd2cSJim Jagielski // Create a pane group that just contains the notes view.
780*b1cdbd2cSJim Jagielski SharedPaneGroup pLowerPanes (new PaneGroup());
781*b1cdbd2cSJim Jagielski pLowerPanes->AddPane(mpPaneContainer->FindPaneURL(
782*b1cdbd2cSJim Jagielski PresenterPaneFactory::msNotesPaneURL));
783*b1cdbd2cSJim Jagielski maPaneGroups.push_back(pLowerPanes);
784*b1cdbd2cSJim Jagielski
785*b1cdbd2cSJim Jagielski // Deactivate the panes that will take place in the animation.
786*b1cdbd2cSJim Jagielski pLowerPanes->DeactivatePanes();
787*b1cdbd2cSJim Jagielski DeactivatePane(mxCenterPaneId);
788*b1cdbd2cSJim Jagielski
789*b1cdbd2cSJim Jagielski // Set the size of the new pane.
790*b1cdbd2cSJim Jagielski maCenterPaneBox = pLowerPanes->GetOriginalBoundingBox();
791*b1cdbd2cSJim Jagielski ResizePane(mxCenterPaneId, maCenterPaneBox);
792*b1cdbd2cSJim Jagielski
793*b1cdbd2cSJim Jagielski geometry::RealPoint2D aStartLocation (maCenterPaneBox.X1, aWindowBox.Height);
794*b1cdbd2cSJim Jagielski geometry::RealPoint2D aEndLocation (maCenterPaneBox.X1, maCenterPaneBox.Y1);
795*b1cdbd2cSJim Jagielski
796*b1cdbd2cSJim Jagielski // Get the sprite of the new pane, make it visible and move it to the
797*b1cdbd2cSJim Jagielski // start location.
798*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
799*b1cdbd2cSJim Jagielski mpPaneContainer->FindPaneId(mxCenterPaneId));
800*b1cdbd2cSJim Jagielski if (pDescriptor.get() != NULL)
801*b1cdbd2cSJim Jagielski {
802*b1cdbd2cSJim Jagielski if (pDescriptor->mxBorderWindow.is())
803*b1cdbd2cSJim Jagielski pDescriptor->mxBorderWindow->setVisible(sal_True);
804*b1cdbd2cSJim Jagielski
805*b1cdbd2cSJim Jagielski maNewPaneSprite = pDescriptor->maSpriteProvider();
806*b1cdbd2cSJim Jagielski if (maNewPaneSprite.get() != NULL)
807*b1cdbd2cSJim Jagielski {
808*b1cdbd2cSJim Jagielski maNewPaneSprite->MoveTo(aStartLocation);
809*b1cdbd2cSJim Jagielski maNewPaneSprite->Show();
810*b1cdbd2cSJim Jagielski }
811*b1cdbd2cSJim Jagielski xCanvas->updateScreen(sal_False);
812*b1cdbd2cSJim Jagielski }
813*b1cdbd2cSJim Jagielski
814*b1cdbd2cSJim Jagielski CreateShowAnimation(
815*b1cdbd2cSJim Jagielski mxCenterPaneId,
816*b1cdbd2cSJim Jagielski maShowEndActions,
817*b1cdbd2cSJim Jagielski xCanvas,
818*b1cdbd2cSJim Jagielski mbDoAnimation,
819*b1cdbd2cSJim Jagielski aStartLocation,
820*b1cdbd2cSJim Jagielski aEndLocation);
821*b1cdbd2cSJim Jagielski
822*b1cdbd2cSJim Jagielski mpWindowManager->Update();
823*b1cdbd2cSJim Jagielski }
824*b1cdbd2cSJim Jagielski
825*b1cdbd2cSJim Jagielski
826*b1cdbd2cSJim Jagielski
827*b1cdbd2cSJim Jagielski
HidePane(void)828*b1cdbd2cSJim Jagielski void MoveInFromBottomAnimator::HidePane (void)
829*b1cdbd2cSJim Jagielski {
830*b1cdbd2cSJim Jagielski OSL_ASSERT(mpWindowManager.get()!=NULL);
831*b1cdbd2cSJim Jagielski
832*b1cdbd2cSJim Jagielski Reference<awt::XWindow> xParentWindow (mpWindowManager->GetParentWindow(), UNO_QUERY);
833*b1cdbd2cSJim Jagielski if ( ! xParentWindow.is())
834*b1cdbd2cSJim Jagielski return;
835*b1cdbd2cSJim Jagielski
836*b1cdbd2cSJim Jagielski Reference<rendering::XSpriteCanvas> xCanvas (mpWindowManager->GetParentCanvas(), UNO_QUERY);
837*b1cdbd2cSJim Jagielski if ( ! xCanvas.is())
838*b1cdbd2cSJim Jagielski return;
839*b1cdbd2cSJim Jagielski
840*b1cdbd2cSJim Jagielski DeactivatePanes();
841*b1cdbd2cSJim Jagielski DeactivatePane(mxCenterPaneId);
842*b1cdbd2cSJim Jagielski
843*b1cdbd2cSJim Jagielski SharedPaneGroup aPanes (maPaneGroups[0]);
844*b1cdbd2cSJim Jagielski
845*b1cdbd2cSJim Jagielski aPanes->ShowPanes();
846*b1cdbd2cSJim Jagielski
847*b1cdbd2cSJim Jagielski ::boost::shared_ptr<MultiAnimation> pMultiAnimation (
848*b1cdbd2cSJim Jagielski new MultiAnimation(mbDoAnimation ? 500 : 0));
849*b1cdbd2cSJim Jagielski awt::Rectangle aWindowBox (xParentWindow->getPosSize());
850*b1cdbd2cSJim Jagielski
851*b1cdbd2cSJim Jagielski // Animate the new center pane to collapse.
852*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
853*b1cdbd2cSJim Jagielski ::boost::bind(
854*b1cdbd2cSJim Jagielski InterpolatePosition,
855*b1cdbd2cSJim Jagielski ::boost::protect(::boost::bind(&SpritePaneMove, mpPaneContainer, mxCenterPaneId, _1)),
856*b1cdbd2cSJim Jagielski _1,
857*b1cdbd2cSJim Jagielski geometry::RealPoint2D(maCenterPaneBox.X1, maCenterPaneBox.Y1),
858*b1cdbd2cSJim Jagielski geometry::RealPoint2D(maCenterPaneBox.X1, aWindowBox.Height)));
859*b1cdbd2cSJim Jagielski
860*b1cdbd2cSJim Jagielski if (mbDoAnimation)
861*b1cdbd2cSJim Jagielski {
862*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
863*b1cdbd2cSJim Jagielski ::boost::bind(&rendering::XSpriteCanvas::updateScreen, xCanvas, sal_False));
864*b1cdbd2cSJim Jagielski }
865*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(
866*b1cdbd2cSJim Jagielski ::boost::bind(&PresenterPaneAnimatorBase::RestoreFrozenWindows, shared_from_this()));
867*b1cdbd2cSJim Jagielski EndActions::const_iterator iAction;
868*b1cdbd2cSJim Jagielski for (iAction=maHideEndActions.begin(); iAction!=maHideEndActions.end(); ++iAction)
869*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(*iAction);
870*b1cdbd2cSJim Jagielski
871*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterAnimator> pAnimator (mpPresenterController->GetAnimator());
872*b1cdbd2cSJim Jagielski pAnimator->AddAnimation(SharedPresenterAnimation(pMultiAnimation));
873*b1cdbd2cSJim Jagielski }
874*b1cdbd2cSJim Jagielski
875*b1cdbd2cSJim Jagielski
876*b1cdbd2cSJim Jagielski
877*b1cdbd2cSJim Jagielski
CreateShowAnimation(const Reference<drawing::framework::XResourceId> & rxPaneId,const EndOperators & rEndOperators,const Reference<rendering::XSpriteCanvas> & rxSpriteCanvas,const bool bAnimate,const geometry::RealPoint2D & rStartLocation,const geometry::RealPoint2D & rEndLocation)878*b1cdbd2cSJim Jagielski void MoveInFromBottomAnimator::CreateShowAnimation (
879*b1cdbd2cSJim Jagielski const Reference<drawing::framework::XResourceId>& rxPaneId,
880*b1cdbd2cSJim Jagielski const EndOperators& rEndOperators,
881*b1cdbd2cSJim Jagielski const Reference<rendering::XSpriteCanvas>& rxSpriteCanvas,
882*b1cdbd2cSJim Jagielski const bool bAnimate,
883*b1cdbd2cSJim Jagielski const geometry::RealPoint2D& rStartLocation,
884*b1cdbd2cSJim Jagielski const geometry::RealPoint2D& rEndLocation)
885*b1cdbd2cSJim Jagielski {
886*b1cdbd2cSJim Jagielski // Animate the uppder and lower window bitmaps.
887*b1cdbd2cSJim Jagielski ::boost::shared_ptr<MultiAnimation> pMultiAnimation (new MultiAnimation(bAnimate ? 500 : 0));
888*b1cdbd2cSJim Jagielski
889*b1cdbd2cSJim Jagielski // Animate new pane to move in from the buttom.
890*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
891*b1cdbd2cSJim Jagielski ::boost::bind(
892*b1cdbd2cSJim Jagielski InterpolatePosition,
893*b1cdbd2cSJim Jagielski ::boost::protect(::boost::bind(&SpritePaneMove, mpPaneContainer, rxPaneId, _1)),
894*b1cdbd2cSJim Jagielski _1,
895*b1cdbd2cSJim Jagielski rStartLocation,
896*b1cdbd2cSJim Jagielski rEndLocation));
897*b1cdbd2cSJim Jagielski
898*b1cdbd2cSJim Jagielski // Call updateScreen after each animation step.
899*b1cdbd2cSJim Jagielski if (rxSpriteCanvas.is())
900*b1cdbd2cSJim Jagielski pMultiAnimation->AddAnimation(
901*b1cdbd2cSJim Jagielski ::boost::bind(&rendering::XSpriteCanvas::updateScreen, rxSpriteCanvas, sal_False));
902*b1cdbd2cSJim Jagielski
903*b1cdbd2cSJim Jagielski // Activate the panes when the animation is over.
904*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(
905*b1cdbd2cSJim Jagielski ::boost::bind(&PaneGroup::HidePanes, maPaneGroups[0]));
906*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(
907*b1cdbd2cSJim Jagielski ::boost::bind(&PresenterPaneAnimatorBase::ActivatePane, shared_from_this(), mxCenterPaneId));
908*b1cdbd2cSJim Jagielski EndActions::const_iterator iAction;
909*b1cdbd2cSJim Jagielski for (iAction=rEndOperators.begin(); iAction!=rEndOperators.end(); ++iAction)
910*b1cdbd2cSJim Jagielski pMultiAnimation->AddEndCallback(*iAction);
911*b1cdbd2cSJim Jagielski
912*b1cdbd2cSJim Jagielski // Start the animation.
913*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterAnimator> pAnimator (mpPresenterController->GetAnimator());
914*b1cdbd2cSJim Jagielski OSL_ASSERT(pAnimator.get()!=NULL);
915*b1cdbd2cSJim Jagielski pAnimator->AddAnimation(SharedPresenterAnimation(pMultiAnimation));
916*b1cdbd2cSJim Jagielski }
917*b1cdbd2cSJim Jagielski
918*b1cdbd2cSJim Jagielski
919*b1cdbd2cSJim Jagielski
920*b1cdbd2cSJim Jagielski
921*b1cdbd2cSJim Jagielski
922*b1cdbd2cSJim Jagielski //===== TransparentOverlayAnimator ============================================
923*b1cdbd2cSJim Jagielski
TransparentOverlayAnimator(const css::uno::Reference<css::drawing::framework::XResourceId> & rxPaneId,const::rtl::Reference<PresenterController> & rpPresenterController,const bool bAnimate,const EndActions & rShowEndActions,const EndActions & rEndEndActions)924*b1cdbd2cSJim Jagielski TransparentOverlayAnimator::TransparentOverlayAnimator (
925*b1cdbd2cSJim Jagielski const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId,
926*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterController>& rpPresenterController,
927*b1cdbd2cSJim Jagielski const bool bAnimate,
928*b1cdbd2cSJim Jagielski const EndActions& rShowEndActions,
929*b1cdbd2cSJim Jagielski const EndActions& rEndEndActions)
930*b1cdbd2cSJim Jagielski : PresenterPaneAnimatorBase(
931*b1cdbd2cSJim Jagielski rxPaneId,
932*b1cdbd2cSJim Jagielski rpPresenterController,
933*b1cdbd2cSJim Jagielski bAnimate,
934*b1cdbd2cSJim Jagielski rShowEndActions,
935*b1cdbd2cSJim Jagielski rEndEndActions),
936*b1cdbd2cSJim Jagielski maBackgroundSprite()
937*b1cdbd2cSJim Jagielski {
938*b1cdbd2cSJim Jagielski }
939*b1cdbd2cSJim Jagielski
940*b1cdbd2cSJim Jagielski
941*b1cdbd2cSJim Jagielski
942*b1cdbd2cSJim Jagielski
~TransparentOverlayAnimator(void)943*b1cdbd2cSJim Jagielski TransparentOverlayAnimator::~TransparentOverlayAnimator (void)
944*b1cdbd2cSJim Jagielski {
945*b1cdbd2cSJim Jagielski }
946*b1cdbd2cSJim Jagielski
947*b1cdbd2cSJim Jagielski
948*b1cdbd2cSJim Jagielski
949*b1cdbd2cSJim Jagielski
ShowPane(void)950*b1cdbd2cSJim Jagielski void TransparentOverlayAnimator::ShowPane (void)
951*b1cdbd2cSJim Jagielski {
952*b1cdbd2cSJim Jagielski EndActions::const_iterator iAction;
953*b1cdbd2cSJim Jagielski for (iAction=maShowEndActions.begin(); iAction!=maShowEndActions.end(); ++iAction)
954*b1cdbd2cSJim Jagielski (*iAction)();
955*b1cdbd2cSJim Jagielski
956*b1cdbd2cSJim Jagielski CreateBackgroundSprite();
957*b1cdbd2cSJim Jagielski
958*b1cdbd2cSJim Jagielski Reference<awt::XWindow> xParentWindow (mpWindowManager->GetParentWindow(), UNO_QUERY);
959*b1cdbd2cSJim Jagielski if (xParentWindow.is())
960*b1cdbd2cSJim Jagielski {
961*b1cdbd2cSJim Jagielski const awt::Rectangle aWindowBox (xParentWindow->getPosSize());
962*b1cdbd2cSJim Jagielski SharedPaneGroup pAllPanes (new PaneGroup());
963*b1cdbd2cSJim Jagielski pAllPanes->AddPane(mpPaneContainer->FindPaneURL(
964*b1cdbd2cSJim Jagielski PresenterPaneFactory::msCurrentSlidePreviewPaneURL));
965*b1cdbd2cSJim Jagielski pAllPanes->AddPane(mpPaneContainer->FindPaneURL(
966*b1cdbd2cSJim Jagielski PresenterPaneFactory::msNextSlidePreviewPaneURL));
967*b1cdbd2cSJim Jagielski pAllPanes->AddPane(mpPaneContainer->FindPaneURL(
968*b1cdbd2cSJim Jagielski PresenterPaneFactory::msToolBarPaneURL));
969*b1cdbd2cSJim Jagielski pAllPanes->AddPane(mpPaneContainer->FindPaneURL(
970*b1cdbd2cSJim Jagielski PresenterPaneFactory::msHelpPaneURL));
971*b1cdbd2cSJim Jagielski pAllPanes->AddPane(mpPaneContainer->FindPaneURL(
972*b1cdbd2cSJim Jagielski PresenterPaneFactory::msNotesPaneURL));
973*b1cdbd2cSJim Jagielski maPaneGroups.push_back(pAllPanes);
974*b1cdbd2cSJim Jagielski pAllPanes->DeactivatePanes();
975*b1cdbd2cSJim Jagielski mpWindowManager->Update();
976*b1cdbd2cSJim Jagielski }
977*b1cdbd2cSJim Jagielski
978*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
979*b1cdbd2cSJim Jagielski mpPaneContainer->FindPaneId(mxCenterPaneId));
980*b1cdbd2cSJim Jagielski if (pDescriptor.get() != NULL)
981*b1cdbd2cSJim Jagielski {
982*b1cdbd2cSJim Jagielski PresenterSpritePane* pPane = dynamic_cast<PresenterSpritePane*>(
983*b1cdbd2cSJim Jagielski pDescriptor->mxPane.get());
984*b1cdbd2cSJim Jagielski if (pPane != NULL)
985*b1cdbd2cSJim Jagielski pPane->ShowTransparentBorder();
986*b1cdbd2cSJim Jagielski
987*b1cdbd2cSJim Jagielski pDescriptor->SetActivationState(true);
988*b1cdbd2cSJim Jagielski if (pDescriptor->mxBorderWindow.is())
989*b1cdbd2cSJim Jagielski pDescriptor->mxBorderWindow->setVisible(sal_True);
990*b1cdbd2cSJim Jagielski }
991*b1cdbd2cSJim Jagielski }
992*b1cdbd2cSJim Jagielski
993*b1cdbd2cSJim Jagielski
994*b1cdbd2cSJim Jagielski
995*b1cdbd2cSJim Jagielski
HidePane(void)996*b1cdbd2cSJim Jagielski void TransparentOverlayAnimator::HidePane (void)
997*b1cdbd2cSJim Jagielski {
998*b1cdbd2cSJim Jagielski maPaneGroups[0]->ActivatePanes();
999*b1cdbd2cSJim Jagielski EndActions::const_iterator iAction;
1000*b1cdbd2cSJim Jagielski for (iAction=maHideEndActions.begin(); iAction!=maHideEndActions.end(); ++iAction)
1001*b1cdbd2cSJim Jagielski (*iAction)();
1002*b1cdbd2cSJim Jagielski mpWindowManager->Update();
1003*b1cdbd2cSJim Jagielski }
1004*b1cdbd2cSJim Jagielski
1005*b1cdbd2cSJim Jagielski
1006*b1cdbd2cSJim Jagielski
1007*b1cdbd2cSJim Jagielski
CreateBackgroundSprite(void)1008*b1cdbd2cSJim Jagielski void TransparentOverlayAnimator::CreateBackgroundSprite (void)
1009*b1cdbd2cSJim Jagielski {
1010*b1cdbd2cSJim Jagielski Reference<awt::XWindow> xParentWindow (mpWindowManager->GetParentWindow(), UNO_QUERY);
1011*b1cdbd2cSJim Jagielski Reference<rendering::XSpriteCanvas> xParentCanvas (mpWindowManager->GetParentCanvas(), UNO_QUERY);
1012*b1cdbd2cSJim Jagielski if (xParentWindow.is() && xParentCanvas.is())
1013*b1cdbd2cSJim Jagielski {
1014*b1cdbd2cSJim Jagielski const awt::Rectangle aWindowBox (xParentWindow->getPosSize());
1015*b1cdbd2cSJim Jagielski maBackgroundSprite.SetFactory(xParentCanvas);
1016*b1cdbd2cSJim Jagielski maBackgroundSprite.Resize(
1017*b1cdbd2cSJim Jagielski geometry::RealSize2D(aWindowBox.Width, aWindowBox.Height));
1018*b1cdbd2cSJim Jagielski maBackgroundSprite.MoveTo(
1019*b1cdbd2cSJim Jagielski geometry::RealPoint2D(aWindowBox.X, aWindowBox.Y));
1020*b1cdbd2cSJim Jagielski maBackgroundSprite.SetAlpha(0.5);
1021*b1cdbd2cSJim Jagielski maBackgroundSprite.Show();
1022*b1cdbd2cSJim Jagielski
1023*b1cdbd2cSJim Jagielski Reference<rendering::XCanvas> xCanvas (maBackgroundSprite.GetCanvas());
1024*b1cdbd2cSJim Jagielski
1025*b1cdbd2cSJim Jagielski if (xCanvas.is())
1026*b1cdbd2cSJim Jagielski {
1027*b1cdbd2cSJim Jagielski rendering::ViewState aViewState(
1028*b1cdbd2cSJim Jagielski geometry::AffineMatrix2D(1,0,0, 0,1,0),
1029*b1cdbd2cSJim Jagielski NULL);
1030*b1cdbd2cSJim Jagielski
1031*b1cdbd2cSJim Jagielski rendering::RenderState aRenderState(
1032*b1cdbd2cSJim Jagielski geometry::AffineMatrix2D(1,0,0, 0,1,0),
1033*b1cdbd2cSJim Jagielski NULL,
1034*b1cdbd2cSJim Jagielski Sequence<double>(4),
1035*b1cdbd2cSJim Jagielski rendering::CompositeOperation::SOURCE);
1036*b1cdbd2cSJim Jagielski PresenterCanvasHelper::SetDeviceColor(aRenderState, util::Color(0x80808080));
1037*b1cdbd2cSJim Jagielski
1038*b1cdbd2cSJim Jagielski Reference<rendering::XPolyPolygon2D> xPolygon (
1039*b1cdbd2cSJim Jagielski PresenterGeometryHelper::CreatePolygon(aWindowBox, xCanvas->getDevice()));
1040*b1cdbd2cSJim Jagielski if (xPolygon.is())
1041*b1cdbd2cSJim Jagielski xCanvas->fillPolyPolygon(
1042*b1cdbd2cSJim Jagielski xPolygon,
1043*b1cdbd2cSJim Jagielski aViewState,
1044*b1cdbd2cSJim Jagielski aRenderState);
1045*b1cdbd2cSJim Jagielski }
1046*b1cdbd2cSJim Jagielski }
1047*b1cdbd2cSJim Jagielski }
1048*b1cdbd2cSJim Jagielski
1049*b1cdbd2cSJim Jagielski
1050*b1cdbd2cSJim Jagielski
1051*b1cdbd2cSJim Jagielski
1052*b1cdbd2cSJim Jagielski //===== PaneGroup =============================================================
1053*b1cdbd2cSJim Jagielski
PaneGroup(void)1054*b1cdbd2cSJim Jagielski PaneGroup::PaneGroup (void)
1055*b1cdbd2cSJim Jagielski : maPanes(),
1056*b1cdbd2cSJim Jagielski maOriginalBoundingBox(),
1057*b1cdbd2cSJim Jagielski maCurrentBoundingBox(),
1058*b1cdbd2cSJim Jagielski mpSubstitution(new PresenterSprite())
1059*b1cdbd2cSJim Jagielski {
1060*b1cdbd2cSJim Jagielski }
1061*b1cdbd2cSJim Jagielski
1062*b1cdbd2cSJim Jagielski
1063*b1cdbd2cSJim Jagielski
1064*b1cdbd2cSJim Jagielski
~PaneGroup(void)1065*b1cdbd2cSJim Jagielski PaneGroup::~PaneGroup (void)
1066*b1cdbd2cSJim Jagielski {
1067*b1cdbd2cSJim Jagielski mpSubstitution.reset();
1068*b1cdbd2cSJim Jagielski }
1069*b1cdbd2cSJim Jagielski
1070*b1cdbd2cSJim Jagielski
1071*b1cdbd2cSJim Jagielski
1072*b1cdbd2cSJim Jagielski
AddPane(const PresenterPaneContainer::SharedPaneDescriptor & rpPane)1073*b1cdbd2cSJim Jagielski void PaneGroup::AddPane (const PresenterPaneContainer::SharedPaneDescriptor& rpPane)
1074*b1cdbd2cSJim Jagielski {
1075*b1cdbd2cSJim Jagielski OSL_ASSERT(rpPane.get() != NULL);
1076*b1cdbd2cSJim Jagielski
1077*b1cdbd2cSJim Jagielski if (rpPane->mxBorderWindow.is())
1078*b1cdbd2cSJim Jagielski {
1079*b1cdbd2cSJim Jagielski PaneDescriptor aDescriptor (rpPane);
1080*b1cdbd2cSJim Jagielski maPanes.push_back(aDescriptor);
1081*b1cdbd2cSJim Jagielski maOriginalBoundingBox = PresenterGeometryHelper::Union(
1082*b1cdbd2cSJim Jagielski maOriginalBoundingBox,
1083*b1cdbd2cSJim Jagielski rpPane->mxBorderWindow->getPosSize());
1084*b1cdbd2cSJim Jagielski }
1085*b1cdbd2cSJim Jagielski }
1086*b1cdbd2cSJim Jagielski
1087*b1cdbd2cSJim Jagielski
1088*b1cdbd2cSJim Jagielski
1089*b1cdbd2cSJim Jagielski
CreateSubstitution(const Reference<rendering::XSpriteCanvas> & rxCanvas)1090*b1cdbd2cSJim Jagielski void PaneGroup::CreateSubstitution (const Reference<rendering::XSpriteCanvas>& rxCanvas)
1091*b1cdbd2cSJim Jagielski {
1092*b1cdbd2cSJim Jagielski // Get the bitmap of the background.
1093*b1cdbd2cSJim Jagielski Reference<rendering::XBitmap> xBackgroundBitmap (rxCanvas, UNO_QUERY);
1094*b1cdbd2cSJim Jagielski if ( ! xBackgroundBitmap.is())
1095*b1cdbd2cSJim Jagielski return;
1096*b1cdbd2cSJim Jagielski
1097*b1cdbd2cSJim Jagielski // Create the sprite.
1098*b1cdbd2cSJim Jagielski mpSubstitution->SetFactory(rxCanvas);
1099*b1cdbd2cSJim Jagielski mpSubstitution->Resize(
1100*b1cdbd2cSJim Jagielski geometry::RealSize2D(maOriginalBoundingBox.Width, maOriginalBoundingBox.Height));
1101*b1cdbd2cSJim Jagielski
1102*b1cdbd2cSJim Jagielski // Fill it with the background inside the bounding box.
1103*b1cdbd2cSJim Jagielski const rendering::ViewState aViewState (
1104*b1cdbd2cSJim Jagielski geometry::AffineMatrix2D(1,0,0, 0,1,0),
1105*b1cdbd2cSJim Jagielski NULL);
1106*b1cdbd2cSJim Jagielski const rendering::RenderState aRenderState (
1107*b1cdbd2cSJim Jagielski geometry::AffineMatrix2D(1,0,-maOriginalBoundingBox.X, 0,1,-maOriginalBoundingBox.Y),
1108*b1cdbd2cSJim Jagielski NULL,
1109*b1cdbd2cSJim Jagielski Sequence<double>(4),
1110*b1cdbd2cSJim Jagielski rendering::CompositeOperation::SOURCE);
1111*b1cdbd2cSJim Jagielski
1112*b1cdbd2cSJim Jagielski Reference<rendering::XCanvas> xSpriteCanvas (mpSubstitution->GetCanvas());
1113*b1cdbd2cSJim Jagielski if (xSpriteCanvas.is())
1114*b1cdbd2cSJim Jagielski xSpriteCanvas->drawBitmap(xBackgroundBitmap, aViewState, aRenderState);
1115*b1cdbd2cSJim Jagielski }
1116*b1cdbd2cSJim Jagielski
1117*b1cdbd2cSJim Jagielski
1118*b1cdbd2cSJim Jagielski
1119*b1cdbd2cSJim Jagielski
Restore(void)1120*b1cdbd2cSJim Jagielski void PaneGroup::Restore (void)
1121*b1cdbd2cSJim Jagielski {
1122*b1cdbd2cSJim Jagielski vector<PaneDescriptor>::iterator iPane;
1123*b1cdbd2cSJim Jagielski for (iPane=maPanes.begin(); iPane!=maPanes.end(); ++iPane)
1124*b1cdbd2cSJim Jagielski {
1125*b1cdbd2cSJim Jagielski iPane->Restore();
1126*b1cdbd2cSJim Jagielski }
1127*b1cdbd2cSJim Jagielski }
1128*b1cdbd2cSJim Jagielski
1129*b1cdbd2cSJim Jagielski
1130*b1cdbd2cSJim Jagielski
1131*b1cdbd2cSJim Jagielski
GetSubstitution(void)1132*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterSprite> PaneGroup::GetSubstitution (void)
1133*b1cdbd2cSJim Jagielski {
1134*b1cdbd2cSJim Jagielski return mpSubstitution;
1135*b1cdbd2cSJim Jagielski }
1136*b1cdbd2cSJim Jagielski
1137*b1cdbd2cSJim Jagielski
1138*b1cdbd2cSJim Jagielski
1139*b1cdbd2cSJim Jagielski
GetOriginalBoundingBox(void) const1140*b1cdbd2cSJim Jagielski geometry::RealRectangle2D PaneGroup::GetOriginalBoundingBox (void) const
1141*b1cdbd2cSJim Jagielski {
1142*b1cdbd2cSJim Jagielski return geometry::RealRectangle2D(
1143*b1cdbd2cSJim Jagielski maOriginalBoundingBox.X,
1144*b1cdbd2cSJim Jagielski maOriginalBoundingBox.Y,
1145*b1cdbd2cSJim Jagielski maOriginalBoundingBox.X + maOriginalBoundingBox.Width,
1146*b1cdbd2cSJim Jagielski maOriginalBoundingBox.Y + maOriginalBoundingBox.Height);
1147*b1cdbd2cSJim Jagielski }
1148*b1cdbd2cSJim Jagielski
1149*b1cdbd2cSJim Jagielski
1150*b1cdbd2cSJim Jagielski
1151*b1cdbd2cSJim Jagielski
GetCurrentBoundingBox(void) const1152*b1cdbd2cSJim Jagielski geometry::RealRectangle2D PaneGroup::GetCurrentBoundingBox (void) const
1153*b1cdbd2cSJim Jagielski {
1154*b1cdbd2cSJim Jagielski return maCurrentBoundingBox;
1155*b1cdbd2cSJim Jagielski }
1156*b1cdbd2cSJim Jagielski
1157*b1cdbd2cSJim Jagielski
1158*b1cdbd2cSJim Jagielski
1159*b1cdbd2cSJim Jagielski
MovePanes(const double nXOffset,const double nYOffset,const::rtl::Reference<PresenterWindowManager> & rpWindowManager)1160*b1cdbd2cSJim Jagielski void PaneGroup::MovePanes (
1161*b1cdbd2cSJim Jagielski const double nXOffset,
1162*b1cdbd2cSJim Jagielski const double nYOffset,
1163*b1cdbd2cSJim Jagielski const ::rtl::Reference<PresenterWindowManager>& rpWindowManager
1164*b1cdbd2cSJim Jagielski )
1165*b1cdbd2cSJim Jagielski {
1166*b1cdbd2cSJim Jagielski awt::Rectangle aBBox;
1167*b1cdbd2cSJim Jagielski vector<PaneDescriptor>::iterator iPane;
1168*b1cdbd2cSJim Jagielski for (iPane=maPanes.begin(); iPane!=maPanes.end(); ++iPane)
1169*b1cdbd2cSJim Jagielski {
1170*b1cdbd2cSJim Jagielski awt::Rectangle aBox (iPane->mpPaneDescriptor->mxBorderWindow->getPosSize());
1171*b1cdbd2cSJim Jagielski aBox.X += sal_Int32(nXOffset);
1172*b1cdbd2cSJim Jagielski aBox.Y += sal_Int32(nYOffset);
1173*b1cdbd2cSJim Jagielski rpWindowManager->SetPanePosSizeAbsolute(
1174*b1cdbd2cSJim Jagielski iPane->mpPaneDescriptor->mxPaneId->getResourceURL(),
1175*b1cdbd2cSJim Jagielski aBox.X,
1176*b1cdbd2cSJim Jagielski aBox.Y,
1177*b1cdbd2cSJim Jagielski aBox.Width,
1178*b1cdbd2cSJim Jagielski aBox.Height);
1179*b1cdbd2cSJim Jagielski aBBox = PresenterGeometryHelper::Union(aBBox, aBox);
1180*b1cdbd2cSJim Jagielski }
1181*b1cdbd2cSJim Jagielski maCurrentBoundingBox = geometry::RealRectangle2D(
1182*b1cdbd2cSJim Jagielski aBBox.X, aBBox.Y, aBBox.X+aBBox.Width, aBBox.Y+aBBox.Height);
1183*b1cdbd2cSJim Jagielski }
1184*b1cdbd2cSJim Jagielski
1185*b1cdbd2cSJim Jagielski
1186*b1cdbd2cSJim Jagielski
1187*b1cdbd2cSJim Jagielski
ActivatePanes(void)1188*b1cdbd2cSJim Jagielski void PaneGroup::ActivatePanes (void)
1189*b1cdbd2cSJim Jagielski {
1190*b1cdbd2cSJim Jagielski vector<PaneDescriptor>::iterator iPane;
1191*b1cdbd2cSJim Jagielski for (iPane=maPanes.begin(); iPane!=maPanes.end(); ++iPane)
1192*b1cdbd2cSJim Jagielski {
1193*b1cdbd2cSJim Jagielski iPane->mpPaneDescriptor->SetActivationState(true);
1194*b1cdbd2cSJim Jagielski }
1195*b1cdbd2cSJim Jagielski }
1196*b1cdbd2cSJim Jagielski
1197*b1cdbd2cSJim Jagielski
1198*b1cdbd2cSJim Jagielski
1199*b1cdbd2cSJim Jagielski
DeactivatePanes(void)1200*b1cdbd2cSJim Jagielski void PaneGroup::DeactivatePanes (void)
1201*b1cdbd2cSJim Jagielski {
1202*b1cdbd2cSJim Jagielski vector<PaneDescriptor>::iterator iPane;
1203*b1cdbd2cSJim Jagielski for (iPane=maPanes.begin(); iPane!=maPanes.end(); ++iPane)
1204*b1cdbd2cSJim Jagielski {
1205*b1cdbd2cSJim Jagielski iPane->mpPaneDescriptor->SetActivationState(false);
1206*b1cdbd2cSJim Jagielski }
1207*b1cdbd2cSJim Jagielski }
1208*b1cdbd2cSJim Jagielski
1209*b1cdbd2cSJim Jagielski
1210*b1cdbd2cSJim Jagielski
1211*b1cdbd2cSJim Jagielski
ShowPanes(void)1212*b1cdbd2cSJim Jagielski void PaneGroup::ShowPanes (void)
1213*b1cdbd2cSJim Jagielski {
1214*b1cdbd2cSJim Jagielski vector<PaneDescriptor>::iterator iPane;
1215*b1cdbd2cSJim Jagielski for (iPane=maPanes.begin(); iPane!=maPanes.end(); ++iPane)
1216*b1cdbd2cSJim Jagielski {
1217*b1cdbd2cSJim Jagielski iPane->mpPaneDescriptor->mxBorderWindow->setVisible(sal_True);
1218*b1cdbd2cSJim Jagielski iPane->mpPaneDescriptor->mxContentWindow->setVisible(sal_True);
1219*b1cdbd2cSJim Jagielski }
1220*b1cdbd2cSJim Jagielski }
1221*b1cdbd2cSJim Jagielski
1222*b1cdbd2cSJim Jagielski
1223*b1cdbd2cSJim Jagielski
1224*b1cdbd2cSJim Jagielski
HidePanes(void)1225*b1cdbd2cSJim Jagielski void PaneGroup::HidePanes (void)
1226*b1cdbd2cSJim Jagielski {
1227*b1cdbd2cSJim Jagielski vector<PaneDescriptor>::iterator iPane;
1228*b1cdbd2cSJim Jagielski for (iPane=maPanes.begin(); iPane!=maPanes.end(); ++iPane)
1229*b1cdbd2cSJim Jagielski {
1230*b1cdbd2cSJim Jagielski iPane->mpPaneDescriptor->mxBorderWindow->setVisible(sal_False);
1231*b1cdbd2cSJim Jagielski iPane->mpPaneDescriptor->mxContentWindow->setVisible(sal_False);
1232*b1cdbd2cSJim Jagielski }
1233*b1cdbd2cSJim Jagielski }
1234*b1cdbd2cSJim Jagielski
1235*b1cdbd2cSJim Jagielski
1236*b1cdbd2cSJim Jagielski
1237*b1cdbd2cSJim Jagielski
1238*b1cdbd2cSJim Jagielski //===== PaneDescriptor ========================================================
1239*b1cdbd2cSJim Jagielski
PaneDescriptor(const PresenterPaneContainer::SharedPaneDescriptor & rpDescriptor)1240*b1cdbd2cSJim Jagielski PaneDescriptor::PaneDescriptor (const PresenterPaneContainer::SharedPaneDescriptor& rpDescriptor)
1241*b1cdbd2cSJim Jagielski : mpPaneDescriptor(rpDescriptor),
1242*b1cdbd2cSJim Jagielski mnLeft(rpDescriptor->mnLeft),
1243*b1cdbd2cSJim Jagielski mnTop(rpDescriptor->mnTop),
1244*b1cdbd2cSJim Jagielski mnRight(rpDescriptor->mnRight),
1245*b1cdbd2cSJim Jagielski mnBottom(rpDescriptor->mnBottom)
1246*b1cdbd2cSJim Jagielski {
1247*b1cdbd2cSJim Jagielski }
1248*b1cdbd2cSJim Jagielski
1249*b1cdbd2cSJim Jagielski
1250*b1cdbd2cSJim Jagielski
1251*b1cdbd2cSJim Jagielski
Restore(void) const1252*b1cdbd2cSJim Jagielski void PaneDescriptor::Restore (void) const
1253*b1cdbd2cSJim Jagielski {
1254*b1cdbd2cSJim Jagielski mpPaneDescriptor->mnLeft = mnLeft;
1255*b1cdbd2cSJim Jagielski mpPaneDescriptor->mnTop = mnTop;
1256*b1cdbd2cSJim Jagielski mpPaneDescriptor->mnRight = mnRight;
1257*b1cdbd2cSJim Jagielski mpPaneDescriptor->mnBottom = mnBottom;
1258*b1cdbd2cSJim Jagielski }
1259*b1cdbd2cSJim Jagielski
1260*b1cdbd2cSJim Jagielski
1261*b1cdbd2cSJim Jagielski
1262*b1cdbd2cSJim Jagielski
1263*b1cdbd2cSJim Jagielski //===== MultiAnimation ========================================================
1264*b1cdbd2cSJim Jagielski
MultiAnimation(const sal_uInt32 nDuration)1265*b1cdbd2cSJim Jagielski MultiAnimation::MultiAnimation (const sal_uInt32 nDuration)
1266*b1cdbd2cSJim Jagielski : PresenterAnimation(0, nDuration, 1000/50),
1267*b1cdbd2cSJim Jagielski maAnimations()
1268*b1cdbd2cSJim Jagielski {
1269*b1cdbd2cSJim Jagielski }
1270*b1cdbd2cSJim Jagielski
1271*b1cdbd2cSJim Jagielski
1272*b1cdbd2cSJim Jagielski
1273*b1cdbd2cSJim Jagielski
AddAnimation(const Animation & rAnimation)1274*b1cdbd2cSJim Jagielski void MultiAnimation::AddAnimation (const Animation& rAnimation)
1275*b1cdbd2cSJim Jagielski {
1276*b1cdbd2cSJim Jagielski maAnimations.push_back(rAnimation);
1277*b1cdbd2cSJim Jagielski }
1278*b1cdbd2cSJim Jagielski
1279*b1cdbd2cSJim Jagielski
1280*b1cdbd2cSJim Jagielski
1281*b1cdbd2cSJim Jagielski
Run(const double nProgress,const sal_uInt64 nCurrentTime)1282*b1cdbd2cSJim Jagielski void MultiAnimation::Run (const double nProgress, const sal_uInt64 nCurrentTime)
1283*b1cdbd2cSJim Jagielski {
1284*b1cdbd2cSJim Jagielski (void)nCurrentTime;
1285*b1cdbd2cSJim Jagielski vector<Animation>::const_iterator iAnimation (maAnimations.begin());
1286*b1cdbd2cSJim Jagielski vector<Animation>::const_iterator iEnd (maAnimations.end());
1287*b1cdbd2cSJim Jagielski for ( ; iAnimation!=iEnd; ++iAnimation)
1288*b1cdbd2cSJim Jagielski (*iAnimation)(nProgress);
1289*b1cdbd2cSJim Jagielski }
1290*b1cdbd2cSJim Jagielski
1291*b1cdbd2cSJim Jagielski
1292*b1cdbd2cSJim Jagielski
1293*b1cdbd2cSJim Jagielski
1294*b1cdbd2cSJim Jagielski //===== functors ==============================================================
1295*b1cdbd2cSJim Jagielski
InterpolatePosition(const::boost::function<void (geometry::RealPoint2D)> & rSetter,double nP,const geometry::RealPoint2D rInitialBox,const geometry::RealPoint2D rFinalBox)1296*b1cdbd2cSJim Jagielski void InterpolatePosition (
1297*b1cdbd2cSJim Jagielski const ::boost::function<void(geometry::RealPoint2D)>& rSetter,
1298*b1cdbd2cSJim Jagielski double nP,
1299*b1cdbd2cSJim Jagielski const geometry::RealPoint2D rInitialBox,
1300*b1cdbd2cSJim Jagielski const geometry::RealPoint2D rFinalBox)
1301*b1cdbd2cSJim Jagielski {
1302*b1cdbd2cSJim Jagielski const double nQ (1 - nP);
1303*b1cdbd2cSJim Jagielski
1304*b1cdbd2cSJim Jagielski OSL_TRACE("InterpolatePosition %f\n", nP);
1305*b1cdbd2cSJim Jagielski rSetter(
1306*b1cdbd2cSJim Jagielski geometry::RealPoint2D(
1307*b1cdbd2cSJim Jagielski nQ * rInitialBox.X + nP * rFinalBox.X,
1308*b1cdbd2cSJim Jagielski nQ * rInitialBox.Y + nP * rFinalBox.Y));
1309*b1cdbd2cSJim Jagielski }
1310*b1cdbd2cSJim Jagielski
1311*b1cdbd2cSJim Jagielski
1312*b1cdbd2cSJim Jagielski
1313*b1cdbd2cSJim Jagielski
1314*b1cdbd2cSJim Jagielski template<typename T>
InterpolateValue(const::boost::function<void (T)> & rSetter,double nP,const T aInitialValue,const T aFinalValue)1315*b1cdbd2cSJim Jagielski void InterpolateValue (
1316*b1cdbd2cSJim Jagielski const ::boost::function<void(T)>& rSetter,
1317*b1cdbd2cSJim Jagielski double nP,
1318*b1cdbd2cSJim Jagielski const T aInitialValue,
1319*b1cdbd2cSJim Jagielski const T aFinalValue)
1320*b1cdbd2cSJim Jagielski {
1321*b1cdbd2cSJim Jagielski const double nQ (1 - nP);
1322*b1cdbd2cSJim Jagielski
1323*b1cdbd2cSJim Jagielski rSetter(T(nQ * aInitialValue + nP * aFinalValue));
1324*b1cdbd2cSJim Jagielski }
1325*b1cdbd2cSJim Jagielski
1326*b1cdbd2cSJim Jagielski
1327*b1cdbd2cSJim Jagielski
1328*b1cdbd2cSJim Jagielski
SpriteTransform(const rtl::Reference<PresenterPaneContainer> & rpPaneContainer,const Reference<XResourceId> & rxPaneId,const Reference<awt::XWindow> & rxSpriteOwnerWindow,const::boost::shared_ptr<PresenterPaintManager> & rpPaintManager,const bool bAppear,const double nX,const double nInitialTop,const double nFinalTop,const double nP)1329*b1cdbd2cSJim Jagielski void SpriteTransform(
1330*b1cdbd2cSJim Jagielski const rtl::Reference<PresenterPaneContainer>& rpPaneContainer,
1331*b1cdbd2cSJim Jagielski const Reference<XResourceId>& rxPaneId,
1332*b1cdbd2cSJim Jagielski const Reference<awt::XWindow>& rxSpriteOwnerWindow,
1333*b1cdbd2cSJim Jagielski const ::boost::shared_ptr<PresenterPaintManager>& rpPaintManager,
1334*b1cdbd2cSJim Jagielski const bool bAppear,
1335*b1cdbd2cSJim Jagielski const double nX,
1336*b1cdbd2cSJim Jagielski const double nInitialTop,
1337*b1cdbd2cSJim Jagielski const double nFinalTop,
1338*b1cdbd2cSJim Jagielski const double nP)
1339*b1cdbd2cSJim Jagielski {
1340*b1cdbd2cSJim Jagielski OSL_ASSERT(rpPaintManager.get()!=NULL);
1341*b1cdbd2cSJim Jagielski
1342*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
1343*b1cdbd2cSJim Jagielski rpPaneContainer->FindPaneId(rxPaneId));
1344*b1cdbd2cSJim Jagielski if (pDescriptor.get() != NULL
1345*b1cdbd2cSJim Jagielski && ! pDescriptor->maSpriteProvider.empty()
1346*b1cdbd2cSJim Jagielski && pDescriptor->mxBorderWindow.is())
1347*b1cdbd2cSJim Jagielski {
1348*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterSprite> pSprite (pDescriptor->maSpriteProvider());
1349*b1cdbd2cSJim Jagielski if (pSprite.get())
1350*b1cdbd2cSJim Jagielski {
1351*b1cdbd2cSJim Jagielski // There seems to be a problem with sprites not correctly
1352*b1cdbd2cSJim Jagielski // invalidating the background when being transformed. As a
1353*b1cdbd2cSJim Jagielski // workaround invalidate the background in the bounding box of
1354*b1cdbd2cSJim Jagielski // the sprite before the transformation.
1355*b1cdbd2cSJim Jagielski rpPaintManager->Invalidate(
1356*b1cdbd2cSJim Jagielski rxSpriteOwnerWindow,
1357*b1cdbd2cSJim Jagielski awt::Rectangle(
1358*b1cdbd2cSJim Jagielski sal::static_int_cast<sal_Int32>(pSprite->GetLocation().X),
1359*b1cdbd2cSJim Jagielski sal::static_int_cast<sal_Int32>(pSprite->GetLocation().Y),
1360*b1cdbd2cSJim Jagielski sal::static_int_cast<sal_Int32>(pSprite->GetSize().Width),
1361*b1cdbd2cSJim Jagielski sal::static_int_cast<sal_Int32>(pSprite->GetSize().Height)));
1362*b1cdbd2cSJim Jagielski
1363*b1cdbd2cSJim Jagielski const double nYScale (bAppear ? nP : 1-nP);
1364*b1cdbd2cSJim Jagielski pSprite->Transform(geometry::AffineMatrix2D(
1365*b1cdbd2cSJim Jagielski 1, 0, 0,
1366*b1cdbd2cSJim Jagielski 0, nYScale, 0));
1367*b1cdbd2cSJim Jagielski pSprite->MoveTo(
1368*b1cdbd2cSJim Jagielski geometry::RealPoint2D(nX, nYScale*nFinalTop + (1-nYScale)*nInitialTop));
1369*b1cdbd2cSJim Jagielski pSprite->Show();
1370*b1cdbd2cSJim Jagielski
1371*b1cdbd2cSJim Jagielski pDescriptor->mxBorderWindow->setVisible(sal_True);
1372*b1cdbd2cSJim Jagielski }
1373*b1cdbd2cSJim Jagielski }
1374*b1cdbd2cSJim Jagielski }
1375*b1cdbd2cSJim Jagielski
1376*b1cdbd2cSJim Jagielski
1377*b1cdbd2cSJim Jagielski
1378*b1cdbd2cSJim Jagielski
SpritePaneMove(const rtl::Reference<PresenterPaneContainer> & rpPaneContainer,const Reference<XResourceId> & rxPaneId,const geometry::RealPoint2D & rLocation)1379*b1cdbd2cSJim Jagielski void SpritePaneMove (
1380*b1cdbd2cSJim Jagielski const rtl::Reference<PresenterPaneContainer>& rpPaneContainer,
1381*b1cdbd2cSJim Jagielski const Reference<XResourceId>& rxPaneId,
1382*b1cdbd2cSJim Jagielski const geometry::RealPoint2D& rLocation)
1383*b1cdbd2cSJim Jagielski {
1384*b1cdbd2cSJim Jagielski PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
1385*b1cdbd2cSJim Jagielski rpPaneContainer->FindPaneId(rxPaneId));
1386*b1cdbd2cSJim Jagielski if (pDescriptor.get() != NULL
1387*b1cdbd2cSJim Jagielski && ! pDescriptor->maSpriteProvider.empty()
1388*b1cdbd2cSJim Jagielski && pDescriptor->mxBorderWindow.is())
1389*b1cdbd2cSJim Jagielski {
1390*b1cdbd2cSJim Jagielski ::boost::shared_ptr<PresenterSprite> pSprite (pDescriptor->maSpriteProvider());
1391*b1cdbd2cSJim Jagielski if (pSprite.get() != NULL)
1392*b1cdbd2cSJim Jagielski {
1393*b1cdbd2cSJim Jagielski pDescriptor->mxBorderWindow->setVisible(sal_True);
1394*b1cdbd2cSJim Jagielski pSprite->MoveTo(rLocation);
1395*b1cdbd2cSJim Jagielski }
1396*b1cdbd2cSJim Jagielski }
1397*b1cdbd2cSJim Jagielski }
1398*b1cdbd2cSJim Jagielski
1399*b1cdbd2cSJim Jagielski
1400*b1cdbd2cSJim Jagielski
1401*b1cdbd2cSJim Jagielski
GetLocation(const geometry::RealRectangle2D & rBox)1402*b1cdbd2cSJim Jagielski geometry::RealPoint2D GetLocation (const geometry::RealRectangle2D& rBox)
1403*b1cdbd2cSJim Jagielski {
1404*b1cdbd2cSJim Jagielski return geometry::RealPoint2D(rBox.X1, rBox.Y1);
1405*b1cdbd2cSJim Jagielski }
1406*b1cdbd2cSJim Jagielski
1407*b1cdbd2cSJim Jagielski
1408*b1cdbd2cSJim Jagielski
1409*b1cdbd2cSJim Jagielski
GetSize(const geometry::RealRectangle2D & rBox)1410*b1cdbd2cSJim Jagielski geometry::RealSize2D GetSize (const geometry::RealRectangle2D& rBox)
1411*b1cdbd2cSJim Jagielski {
1412*b1cdbd2cSJim Jagielski return geometry::RealSize2D(rBox.X2-rBox.X1, rBox.Y2-rBox.Y1);
1413*b1cdbd2cSJim Jagielski }
1414*b1cdbd2cSJim Jagielski
1415*b1cdbd2cSJim Jagielski } // end of anonymous namespace
1416*b1cdbd2cSJim Jagielski
1417*b1cdbd2cSJim Jagielski
1418*b1cdbd2cSJim Jagielski
1419*b1cdbd2cSJim Jagielski
1420*b1cdbd2cSJim Jagielski } } // end of namespace ::sdext::presenter
1421