2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <dali/dali.h>
19 #include <dali-toolkit/dali-toolkit.h>
22 using namespace Toolkit;
26 const int SEEK_POS( 5000 );
27 const int INIT_WIDTH( 600 );
28 const int INIT_HEIGHT( 400 );
29 const int BUTTON_SIZE( 80 );
31 const char* const PLAY_FILE = DEMO_VIDEO_DIR "demoVideo.mp4";
32 const char* const PLAY_IMAGE = DEMO_IMAGE_DIR "icon-play.png";
33 const char* const PAUSE_IMAGE = DEMO_IMAGE_DIR "Pause.png";
34 const char* const STOP_IMAGE = DEMO_IMAGE_DIR "icon-stop.png";
35 const char* const RESET_IMAGE = DEMO_IMAGE_DIR "icon-reset.png";
36 const char* const FORWARD_IMAGE = DEMO_IMAGE_DIR "Forward.png";
37 const char* const BACKWARD_IMAGE = DEMO_IMAGE_DIR "Backward.png";
41 class VideoViewController: public ConnectionTracker
45 VideoViewController( Application& application )
46 : mApplication( application ),
49 mIsFullScreen( false ),
52 // Connect to the Application's Init signal
53 mApplication.InitSignal().Connect( this, &VideoViewController::Create );
56 ~VideoViewController()
61 void Create( Application& application )
63 mStageSize = Stage::GetCurrent().GetSize();
65 mVideoView = Toolkit::VideoView::New();
66 Stage::GetCurrent().Add( mVideoView );
67 mVideoView.SetParentOrigin( ParentOrigin::CENTER );
68 mVideoView.SetAnchorPoint( AnchorPoint::CENTER );
69 mVideoView.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
70 mVideoView.SetSize( INIT_WIDTH, INIT_HEIGHT );
71 mVideoView.SetProperty( VideoView::Property::LOOPING, true );
72 mVideoView.SetProperty( VideoView::Property::MUTED, false );
73 mVideoView.SetProperty( VideoView::Property::VIDEO, PLAY_FILE );
76 mMenu.SetParentOrigin( ParentOrigin::BOTTOM_LEFT );
77 mMenu.SetAnchorPoint( AnchorPoint::BOTTOM_LEFT );
78 mMenu.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
79 mMenu.SetSize( INIT_WIDTH, 120 );
80 mVideoView.Add( mMenu );
82 mPlayButton = PushButton::New();
83 mPlayButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
84 mPlayButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
85 mPlayButton.SetName( "Play" );
86 mPlayButton.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
87 mPlayButton.SetSize( BUTTON_SIZE, BUTTON_SIZE );
88 mPlayButton.SetPosition( 40, 10 );
89 mPlayButton.ClickedSignal().Connect( this, &VideoViewController::OnButtonClicked );
91 mPauseButton = PushButton::New();
92 mPauseButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
93 mPauseButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
94 mPauseButton.SetName( "Pause" );
95 mPauseButton.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
96 mPauseButton.SetSize( BUTTON_SIZE, BUTTON_SIZE );
97 mPauseButton.SetPosition( 40, 10 );
98 mPauseButton.ClickedSignal().Connect( this, &VideoViewController::OnButtonClicked );
100 mStopButton = PushButton::New();
101 mStopButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
102 mStopButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
103 mStopButton.SetName( "Stop" );
104 mStopButton.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
105 mStopButton.SetSize( BUTTON_SIZE, BUTTON_SIZE );
106 mStopButton.SetPosition( 140, 10 );
107 mStopButton.ClickedSignal().Connect( this, &VideoViewController::OnButtonClicked );
109 mResetButton = PushButton::New();
110 mResetButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
111 mResetButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
112 mResetButton.SetName( "Reset" );
113 mResetButton.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
114 mResetButton.SetSize( BUTTON_SIZE, BUTTON_SIZE );
115 mResetButton.SetPosition( 140, 10 );
116 mResetButton.ClickedSignal().Connect( this, &VideoViewController::OnButtonClicked );
118 mBackwardButton = PushButton::New();
119 mBackwardButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
120 mBackwardButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
121 mBackwardButton.SetName( "Backward" );
122 mBackwardButton.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
123 mBackwardButton.SetSize( BUTTON_SIZE, BUTTON_SIZE );
124 mBackwardButton.SetPosition( 240, 10 );
125 mBackwardButton.ClickedSignal().Connect( this, &VideoViewController::OnButtonClicked );
127 mForwardButton = PushButton::New();
128 mForwardButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
129 mForwardButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
130 mForwardButton.SetName( "Forward" );
131 mForwardButton.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
132 mForwardButton.SetSize( BUTTON_SIZE, BUTTON_SIZE );
133 mForwardButton.SetPosition( 340, 10 );
134 mForwardButton.ClickedSignal().Connect( this, &VideoViewController::OnButtonClicked );
136 mMenu.Add( mPlayButton );
137 mMenu.Add( mPauseButton );
138 mMenu.Add( mStopButton );
139 mMenu.Add( mResetButton );
140 mMenu.Add( mBackwardButton );
141 mMenu.Add( mForwardButton );
143 mPauseButton.SetVisible( false );
144 mPauseButton.SetDisabled( true );
145 mPlayButton.SetVisible( true );
146 mPlayButton.SetDisabled( false );
147 mStopButton.SetVisible( true );
148 mStopButton.SetDisabled( false );
149 mResetButton.SetVisible( false );
150 mResetButton.SetDisabled( true );
152 mPlayButton.SetUnselectedImage( PLAY_IMAGE );
153 mPlayButton.SetSelectedImage( PLAY_IMAGE );
154 mPauseButton.SetUnselectedImage( PAUSE_IMAGE );
155 mPauseButton.SetSelectedImage( PAUSE_IMAGE );
157 mStopButton.SetUnselectedImage( STOP_IMAGE );
158 mStopButton.SetSelectedImage( STOP_IMAGE );
159 mResetButton.SetUnselectedImage( RESET_IMAGE );
160 mResetButton.SetSelectedImage( RESET_IMAGE );
162 mBackwardButton.SetUnselectedImage( BACKWARD_IMAGE );
163 mBackwardButton.SetSelectedImage( BACKWARD_IMAGE );
164 mForwardButton.SetUnselectedImage( FORWARD_IMAGE );
165 mForwardButton.SetSelectedImage( FORWARD_IMAGE );
167 mPanGestureDetector = PanGestureDetector::New();
168 mPanGestureDetector.Attach( mVideoView );
169 mPanGestureDetector.DetectedSignal().Connect( this, &VideoViewController::OnPan );
171 mPinchGestureDetector = PinchGestureDetector::New();
172 mPinchGestureDetector.Attach( mVideoView );
173 mPinchGestureDetector.DetectedSignal().Connect( this, &VideoViewController::OnPinch );
175 mTapGestureDetector = TapGestureDetector::New();
176 mTapGestureDetector.Attach( mVideoView );
177 mTapGestureDetector.DetectedSignal().Connect( this, &VideoViewController::OnTap );
179 mRotationAnimation = Animation::New(2.f);
180 mRotationAnimation.AnimateBy( Property(mVideoView, Actor::Property::ORIENTATION), Quaternion(Degree(0.f), Degree(360.f), Degree(0.f)) );
181 mRotationAnimation.SetLooping(false);
183 Stage::GetCurrent().KeyEventSignal().Connect( this, &VideoViewController::OnKeyEvent );
185 mWindowSurfaceTarget.Insert( "renderingTarget", "windowSurfaceTarget" );
186 mNativeImageTarget.Insert( "renderingTarget", "nativeImageTarget" );
190 bool OnButtonClicked( Button button )
193 if( mPauseButton.GetId() == button.GetId())
197 mPauseButton.SetVisible( false );
198 mPauseButton.SetDisabled( true );
199 mPlayButton.SetVisible( true );
200 mPlayButton.SetDisabled( false );
206 else if( mPlayButton.GetId() == button.GetId())
213 mPauseButton.SetVisible( true );
214 mPauseButton.SetDisabled( false );
215 mPlayButton.SetVisible( false );
216 mPlayButton.SetDisabled( true );
221 else if( mResetButton.GetId() == button.GetId())
225 mPauseButton.SetVisible( true );
226 mPauseButton.SetDisabled( false );
227 mPlayButton.SetVisible( false );
228 mPlayButton.SetDisabled( true );
229 mResetButton.SetVisible( false );
230 mResetButton.SetDisabled( true );
231 mStopButton.SetVisible( true );
232 mStopButton.SetDisabled( false );
236 mVideoView.SetProperty( VideoView::Property::VIDEO, PLAY_FILE );
240 else if( mStopButton.GetId() == button.GetId())
242 mPauseButton.SetVisible( false );
243 mPauseButton.SetDisabled( true );
244 mPlayButton.SetVisible( true );
245 mPlayButton.SetDisabled( false );
246 mResetButton.SetVisible( true );
247 mResetButton.SetDisabled( false );
248 mStopButton.SetVisible( false );
249 mStopButton.SetDisabled( true );
254 else if( mBackwardButton.GetId() == button.GetId())
256 mVideoView.Backward( SEEK_POS );
258 else if( mForwardButton.GetId() == button.GetId())
260 mVideoView.Forward( SEEK_POS );
266 void OnPan( Actor actor, const PanGesture& gesture )
268 if( !mIsFullScreen && gesture.state == Gesture::Continuing )
270 mVideoView.TranslateBy( Vector3( gesture.displacement ) );
274 void OnPinch( Actor actor, const PinchGesture& gesture )
276 if( gesture.state == Gesture::Started )
278 mPinchStartScale = mScale;
281 if( gesture.state == Gesture::Finished )
283 mScale = mPinchStartScale * gesture.scale;
286 mVideoView.SetSize( mStageSize.x, mStageSize.y );
287 mVideoView.SetProperty( VideoView::Property::VIDEO, mWindowSurfaceTarget );
288 mMenu.SetSize( mStageSize.x, 120 );
289 mIsFullScreen = true;
293 mVideoView.SetSize( INIT_WIDTH, INIT_HEIGHT );
294 mVideoView.SetProperty( VideoView::Property::VIDEO, mNativeImageTarget );
295 mMenu.SetSize( INIT_WIDTH, 120 );
296 mIsFullScreen = false;
301 void OnTap( Actor actor, const TapGesture& tapGesture )
305 mRotationAnimation.Play();
312 * Main key event handler
314 void OnKeyEvent(const KeyEvent& event)
316 if(event.state == KeyEvent::Down)
318 if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
326 Application& mApplication;
327 VideoView mVideoView;
335 PushButton mPlayButton;
336 PushButton mPauseButton;
337 PushButton mStopButton;
338 PushButton mResetButton;
339 PushButton mBackwardButton;
340 PushButton mForwardButton;
342 PanGestureDetector mPanGestureDetector;
343 PinchGestureDetector mPinchGestureDetector;
344 TapGestureDetector mTapGestureDetector;
346 float mPinchStartScale;
348 Animation mRotationAnimation;
349 Property::Map mWindowSurfaceTarget;
350 Property::Map mNativeImageTarget;
353 void RunTest( Application& application )
355 VideoViewController test( application );
357 application.MainLoop();
360 // Entry point for Linux & Tizen applications
362 int DALI_EXPORT_API main( int argc, char **argv )
364 Application application = Application::New( &argc, &argv, DEMO_THEME_PATH );
366 RunTest( application );