android: Update app-specific/MIME type icons
[LibreOffice.git] / slideshow / source / engine / shapes / viewmediashape.hxx
blobfc37a3add8ce0e2fbfd73dd23c182ee36b1c5e36
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_SLIDESHOW_SOURCE_ENGINE_SHAPES_VIEWMEDIASHAPE_HXX
21 #define INCLUDED_SLIDESHOW_SOURCE_ENGINE_SHAPES_VIEWMEDIASHAPE_HXX
23 #include <basegfx/range/b2drectangle.hxx>
24 #include <com/sun/star/awt/Point.hpp>
25 #include <com/sun/star/drawing/XShape.hpp>
27 #include <memory>
28 #include <vcl/vclptr.hxx>
30 #include <viewlayer.hxx>
32 class SystemChildWindow;
34 namespace com::sun::star {
35 namespace drawing {
36 class XShape;
38 namespace media {
39 class XPlayer;
40 class XPlayerWindow;
42 namespace uno {
43 class XComponentContext;
45 namespace beans{
46 class XPropertySet;
50 namespace slideshow::internal
52 /** This class is the viewable representation of a draw
53 document's media object, associated to a specific View
55 The class is able to render the associated media shape on
56 View implementations.
58 class ViewMediaShape final
60 public:
61 /** Create a ViewMediaShape for the given View
63 @param rView
64 The associated View object.
66 ViewMediaShape( const ViewLayerSharedPtr& rViewLayer,
67 css::uno::Reference< css::drawing::XShape > xShape,
68 css::uno::Reference< css::uno::XComponentContext > xContext );
70 /** destroy the object
72 ~ViewMediaShape();
74 /// Forbid copy construction
75 ViewMediaShape(const ViewMediaShape&) = delete;
76 /// Forbid copy assignment
77 ViewMediaShape& operator=(const ViewMediaShape&) = delete;
79 /** Query the associated view layer of this shape
81 const ViewLayerSharedPtr& getViewLayer() const;
83 // animation methods
86 /** Notify the ViewShape that an animation starts now
88 This method enters animation mode on the associate
89 target view. The shape can be animated in parallel on
90 different views.
92 void startMedia();
94 /** Notify the ViewShape that it is no longer animated
96 This methods ends animation mode on the associate
97 target view
99 void endMedia();
101 /** Notify the ViewShape that it should pause playback
103 This methods pauses animation on the associate
104 target view. The content stays visible (for video)
106 void pauseMedia();
108 /** Set current time of media.
110 @param fTime
111 Local media time that should now be presented, in seconds.
113 void setMediaTime(double fTime);
115 void setLooping(bool bLooping);
117 // render methods
120 /** Render the ViewShape
122 This method renders the ViewMediaShape on the associated view.
124 @param rBounds
125 The current media shape bounds
127 @return whether the rendering finished successfully.
129 bool render( const ::basegfx::B2DRectangle& rBounds ) const;
131 /** Resize the ViewShape
133 This method updates the ViewMediaShape size on the
134 associated view. It does not render.
136 @param rBounds
137 The current media shape bounds
139 @return whether the resize finished successfully.
141 bool resize( const ::basegfx::B2DRectangle& rNewBounds ) const;
143 private:
145 bool implInitialize( const ::basegfx::B2DRectangle& rBounds );
146 void implSetMediaProperties( const css::uno::Reference< css::beans::XPropertySet >& rxProps );
147 void implInitializeMediaPlayer( const OUString& rMediaURL, const OUString& rMimeType );
148 void implInitializePlayerWindow( const ::basegfx::B2DRectangle& rBounds,
149 const css::uno::Sequence< css::uno::Any >& rVCLDeviceParams );
150 ViewLayerSharedPtr mpViewLayer;
151 VclPtr< SystemChildWindow > mpMediaWindow;
152 mutable css::awt::Point maWindowOffset;
153 mutable ::basegfx::B2DRectangle maBounds;
155 css::uno::Reference< css::drawing::XShape > mxShape;
156 css::uno::Reference< css::media::XPlayer > mxPlayer;
157 css::uno::Reference< css::media::XPlayerWindow > mxPlayerWindow;
158 css::uno::Reference< css::uno::XComponentContext> mxComponentContext;
159 bool mbIsSoundEnabled;
162 typedef ::std::shared_ptr< ViewMediaShape > ViewMediaShapeSharedPtr;
166 #endif // INCLUDED_SLIDESHOW_SOURCE_ENGINE_SHAPES_VIEWMEDIASHAPE_HXX
168 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */