Add move semantics to commonly used classes in dali-core
[platform/core/uifw/dali-core.git] / dali / public-api / images / pixel-data.h
1 #ifndef DALI_PIXEL_DATA_H
2 #define DALI_PIXEL_DATA_H
3
4 /*
5  * Copyright (c) 2020 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 INCLUDES
22 #include <cstdint> // uint8_t, uint32_t
23
24 // INTERNAL INCLUDES
25 #include <dali/public-api/images/pixel.h>
26 #include <dali/public-api/object/base-handle.h>
27
28 namespace Dali
29 {
30 /**
31  * @addtogroup dali_core_images
32  * @{
33  */
34
35 namespace Internal
36 {
37 class PixelData;
38 }
39
40 /**
41  * @brief The PixelData object holds a pixel buffer .
42  * The PixelData takes over the ownership of the pixel buffer.
43  * The buffer memory must NOT be released outside of this class, instead, the PixelData object will release it automatically when the reference count falls to zero.
44  *
45  * @SINCE_1_1.43
46  */
47 class DALI_CORE_API PixelData : public BaseHandle
48 {
49 public:
50
51   /**
52    * @brief Enumeration for Function to release the pixel buffer.
53    * @SINCE_1_1.43
54    */
55   enum ReleaseFunction
56   {
57     FREE,          ///< Use free function to release the pixel buffer     @SINCE_1_1.43
58     DELETE_ARRAY,  ///< Use delete[] operator to release the pixel buffer @SINCE_1_1.43
59   };
60
61   /**
62    * @brief Creates a PixelData object.
63    *
64    * @SINCE_1_1.43
65    * @param[in] buffer          The raw pixel data
66    * @param[in] bufferSize      The size of the buffer in bytes
67    * @param[in] width           Buffer width in pixels
68    * @param[in] height          Buffer height in pixels
69    * @param[in] pixelFormat     The pixel format
70    * @param[in] releaseFunction The function used to release the memory
71    * @return A handle to the PixelData
72    */
73   static PixelData New( uint8_t* buffer,
74                         uint32_t bufferSize,
75                         uint32_t width,
76                         uint32_t height,
77                         Pixel::Format pixelFormat,
78                         ReleaseFunction releaseFunction);
79
80   /**
81    * @brief Creates an empty handle.
82    * Use PixelData::New() to create an initialized object.
83    *
84    * @SINCE_1_1.43
85    */
86   PixelData();
87
88   /**
89    * @brief Destructor.
90    *
91    * @SINCE_1_1.43
92    */
93   ~PixelData();
94
95   /**
96    * @brief This copy constructor is required for (smart) pointer semantics.
97    *
98    * @SINCE_1_1.43
99    * @param[in] handle A reference to the copied handle
100    */
101   PixelData(const PixelData& handle);
102
103   /**
104    * @brief This assignment operator is required for (smart) pointer semantics.
105    *
106    * @SINCE_1_1.43
107    * @param[in] rhs A reference to the copied handle
108    * @return A reference to this object
109    */
110   PixelData& operator=(const PixelData& rhs);
111
112   /**
113    * @brief Move constructor.
114    *
115    * @SINCE_1_9.22
116    * @param[in] rhs A reference to the moved handle
117    */
118   PixelData( PixelData&& rhs );
119
120   /**
121    * @brief Move assignment operator.
122    *
123    * @SINCE_1_9.22
124    * @param[in] rhs A reference to the moved handle
125    * @return A reference to this handle
126    */
127   PixelData& operator=( PixelData&& rhs );
128
129   /**
130    * @brief Gets the width of the buffer in pixels.
131    *
132    * @SINCE_1_1.43
133    * @return The width of the buffer in pixels
134    */
135   uint32_t GetWidth() const;
136
137   /**
138    * @brief Gets the height of the buffer in pixels.
139    *
140    * @SINCE_1_1.43
141    * @return The height of the buffer in pixels
142    */
143   uint32_t GetHeight() const;
144
145   /**
146    * @brief Gets the pixel format.
147    *
148    * @SINCE_1_1.43
149    * @return The pixel format
150    */
151   Pixel::Format GetPixelFormat() const;
152
153 public:
154
155   /**
156    * @brief The constructor.
157    * @note  Not intended for application developers.
158    * @SINCE_1_1.43
159    * @param[in] pointer A pointer to a newly allocated PixelData
160    */
161   explicit DALI_INTERNAL PixelData( Internal::PixelData* pointer );
162 };
163
164 /**
165  * @}
166  */
167 } //namespace Dali
168
169 #endif // DALI_PIXEL_DATA_H