Add new environment variable DALI_WATCH_REFRESH_RATE
[platform/core/uifw/dali-adaptor.git] / dali / internal / adaptor / tizen-wayland / tizen-wearable / watch-application-impl.cpp
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/internal/adaptor/tizen-wayland/tizen-wearable/watch-application-impl.h>
20 #include <dali/internal/system/common/environment-variables.h>
21
22 namespace Dali
23 {
24
25 namespace Internal
26 {
27
28 namespace Adaptor
29 {
30
31 namespace
32 {
33
34 unsigned int GetEnvWatchRenderRefreshRate()
35 {
36   const char* envVariable = std::getenv( DALI_WATCH_REFRESH_RATE );
37
38   return envVariable ? std::atoi( envVariable ) : 2u; // Default 30 fps
39 }
40
41 } // unnamed namespace
42
43 WatchApplicationPtr WatchApplication::New(
44   int* argc,
45   char **argv[],
46   const std::string& stylesheet,
47   Dali::WatchApplication::WINDOW_MODE windowMode)
48 {
49   WatchApplicationPtr watch ( new WatchApplication (argc, argv, stylesheet, windowMode ) );
50   return watch;
51 }
52
53 WatchApplication::WatchApplication( int* argc, char** argv[], const std::string& stylesheet, Dali::Application::WINDOW_MODE windowMode )
54 : Application(argc, argv, stylesheet, windowMode, PositionSize(), Framework::WATCH),
55   mState( UNINITIALIZED )
56 {
57 }
58
59 WatchApplication::~WatchApplication()
60 {
61 }
62
63 void WatchApplication::OnInit()
64 {
65   Application::OnInit();
66
67   Dali::Adaptor::Get().SetRenderRefreshRate( GetEnvWatchRenderRefreshRate() );
68
69   mState = INITIALIZED;
70 }
71
72 void WatchApplication::OnTerminate()
73 {
74   Application::OnTerminate();
75
76   mState = TERMINATED;
77 }
78
79 void WatchApplication::OnResume()
80 {
81   Application::OnResume();
82
83   mState = RESUMED;
84 }
85
86 void WatchApplication::OnPause()
87 {
88   Application::OnPause();
89
90   mState = PAUSED;
91 }
92
93 void WatchApplication::OnTimeTick(WatchTime& time)
94 {
95   Dali::WatchApplication watch(this);
96   mTickSignal.Emit( watch, time );
97
98   if(mState == PAUSED)
99   {
100     // This is a pre-resume scenario. All rendering engine of tizen SHOULD forcely update once at this time.
101     Internal::Adaptor::Adaptor::GetImplementation( GetAdaptor() ).RequestUpdateOnce();
102   }
103
104   // A watch application will queue messages to update the UI in the signal emitted above
105   // Process these immediately to avoid a blinking issue where the old time is briefly visible
106   CoreEventInterface& eventInterface = Internal::Adaptor::Adaptor::GetImplementation( GetAdaptor() );
107   eventInterface.ProcessCoreEvents();
108 }
109
110 void WatchApplication::OnAmbientTick(WatchTime& time)
111 {
112   Dali::WatchApplication watch(this);
113   mAmbientTickSignal.Emit( watch, time );
114
115   // A watch application will queue messages to update the UI in the signal emitted above
116   // Process these immediately to avoid a blinking issue where the old time is briefly visible
117   CoreEventInterface& eventInterface = Internal::Adaptor::Adaptor::GetImplementation( GetAdaptor() );
118   eventInterface.ProcessCoreEvents();
119 }
120
121 void WatchApplication::OnAmbientChanged(bool ambient)
122 {
123   Dali::WatchApplication watch(this);
124   mAmbientChangeSignal.Emit( watch, ambient );
125 }
126
127 } // namespace Adaptor
128
129 } // namespace Internal
130
131 } // namespace Dali