Added capture for wearable
[platform/core/uifw/dali-adaptor.git] / adaptors / wearable / capture / capture.h
1 #ifndef DALI_CAPTURE_H
2 #define DALI_CAPTURE_H
3
4 /*
5  * Copyright (c) 2017 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL HEADERS
22 #include <dali/public-api/actors/actor.h>
23 #include <dali/public-api/signals/dali-signal.h>
24 #include <dali/public-api/actors/camera-actor.h>
25
26 // INTERNAL HEADERS
27
28 namespace Dali
29 {
30
31 /**
32  * @addtogroup dali_adaptor_framework
33  * @{
34  */
35
36 namespace Internal DALI_INTERNAL
37 {
38 namespace Adaptor
39 {
40 class Capture;
41 }
42 }
43
44 /**
45  * @brief Capture snapshots the current scene and save as a file.
46  *
47  * @SINCE_1_3_4
48  *
49  * Applications should follow the example below to create capture :
50  *
51  * @code
52  * Capture capture = Capture::New();
53  * @endcode
54  *
55  * If required, you can also connect class member function to a signal :
56  *
57  * @code
58  * capture.FinishedSignal().Connect(this, &CaptureSceneExample::OnCaptureFinished);
59  * @endcode
60  *
61  * At the connected class member function, you can know whether capture finish state.
62  *
63  * @code
64  * void CaptureSceneExample::OnCaptureFinished( Capture capture, Capture::FinishState state )
65  * {
66  *   if ( state == Capture::FinishState::SUCCEEDED )
67  *   {
68  *     // Do something
69  *   }
70  *   else
71  *   {
72  *     // Do something
73  *   }
74  * }
75  * @endcode
76  */
77 class DALI_IMPORT_API Capture : public BaseHandle
78 {
79
80 public:
81
82   /**
83    * @brief The enumerations used for checking capture success
84    * @SINCE_1_3_4
85    */
86   enum class FinishState
87   {
88     SUCCEEDED, ///< Succeeded in saving the result after capture
89     FAILED     ///< Failed to capture by time out or to save the result
90   };
91
92   /**
93    * @brief Typedef for finished signals sent by this class.
94    *
95    * @SINCE_1_3_4
96    */
97   typedef Signal< void ( Capture, Capture::FinishState ) > CaptureFinishedSignalType;
98
99   /**
100    * @brief Create an uninitialized Capture; this can be initialized with Actor::New().
101    *
102    * @SINCE_1_3_4
103    *
104    * Calling member functions with an uninitialized Dali::Object is not allowed.
105    */
106   Capture();
107
108   /**
109    * @brief Create an initialized Capture.
110    *
111    * @SINCE_1_3_4
112    *
113    * @return A handle to a newly allocated Dali resource.
114    * @note Projection mode of default cameraActor is Dali::Camera::PERSPECTIVE_PROJECTION
115    */
116   static Capture New();
117
118   /**
119    * @brief Create an initialized Capture.
120    *
121    * @SINCE_1_3_4
122    *
123    * @param[in] cameraActor An initialized CameraActor.
124    * @return A handle to a newly allocated Dali resource.
125    */
126   static Capture New( Dali::CameraActor cameraActor );
127
128   /**
129    * @brief Downcast an Object handle to Capture handle.
130    *
131    * @SINCE_1_3_4
132    *
133    * If handle points to a Capture object the downcast produces valid
134    * handle. If not the returned handle is left uninitialized.
135    *
136    * @param[in] handle to An object.
137    * @return handle to a Capture object or an uninitialized handle.
138    */
139   static Capture DownCast( BaseHandle handle );
140
141   /**
142    * @brief Dali::Actor is intended as a base class.
143    *
144    * @SINCE_1_3_4
145    *
146    * This is non-virtual since derived Handle types must not contain data or virtual methods.
147    */
148   ~Capture();
149
150   /**
151    * @brief This copy constructor is required for (smart) pointer semantics.
152    *
153    * @SINCE_1_3_4
154    *
155    * @param[in] copy A reference to the copied handle.
156    */
157   Capture( const Capture& copy );
158
159   /**
160    * @brief This assignment operator is required for (smart) pointer semantics.
161    *
162    * @SINCE_1_3_4
163    *
164    * @param[in] rhs  A reference to the copied handle.
165    * @return A reference to this.
166    */
167   Capture& operator=( const Capture& rhs );
168
169   /**
170    * @brief Start capture and save the image as a file.
171    *
172    * @SINCE_1_3_4
173    *
174    * @param[in] source source actor to be used for capture.
175    * @param[in] size captured size.
176    * @param[in] path image file path to be saved as a file.
177    * @param[in] clearColor background color of captured scene
178    */
179   void Start( Actor source, const Vector2& size, const std::string &path, const Vector4& clearColor );
180
181   /**
182    * @brief Start capture and save the image as a file.
183    *
184    * @SINCE_1_3_4
185    *
186    * @param[in] source source actor to be used for capture.
187    * @param[in] size captured size.
188    * @param[in] path image file path to be saved as a file.
189    * @note Clear color is transparent.
190    */
191   void Start( Actor source, const Vector2& size, const std::string &path );
192
193   /**
194    * @brief Get finished signal.
195    *
196    * @SINCE_1_3_4
197    *
198    * @return finished signal instance.
199    */
200   CaptureFinishedSignalType& FinishedSignal();
201
202 public: // Not intended for application developers
203   /**
204    * @brief This constructor is used by New() methods.
205    *
206    * @SINCE_1_3_4
207    *
208    * @param[in] internal A pointer to a newly allocated Dali resource.
209    */
210   explicit DALI_INTERNAL Capture( Internal::Adaptor::Capture* internal );
211 };
212
213 /**
214  * @}
215  */
216
217 } // namespace Dali
218
219 #endif // DALI_CAPTURE_H