Add codes for Dali Windows Backend
[platform/core/uifw/dali-adaptor.git] / dali / internal / imaging / windows / native-image-source-impl-win.h
1 #ifndef __DALI_INTERNAL_NATIVE_IMAGE_SOURCE_H__
2 #define __DALI_INTERNAL_NATIVE_IMAGE_SOURCE_H__
3
4 /*
5  * Copyright (c) 2014 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 // INTERNAL INCLUDES
22 #include <dali/public-api/adaptor-framework/native-image-source.h>
23
24 #include <dali/internal/imaging/common/native-image-source-impl.h>
25
26 namespace Dali
27 {
28
29 namespace Internal
30 {
31
32 namespace Adaptor
33 {
34 class EglImageExtensions;
35
36 /**
37  * Dali internal NativeImageSource.
38  */
39 class NativeImageSourceWin : public Internal::Adaptor::NativeImageSource
40 {
41 public:
42
43   /**
44    * Create a new NativeImageSource internally.
45    * Depending on hardware the width and height may have to be a power of two.
46    * @param[in] width The width of the image.
47    * @param[in] height The height of the image.
48    * @param[in] depth color depth of the image.
49    * @param[in] nativeImageSource contains either: pixmap of type Win32 Pixmap , a WinPixmap or is empty
50    * @return A smart-pointer to a newly allocated image.
51    */
52   static NativeImageSourceWin* New(unsigned int width,
53                           unsigned int height,
54                           Dali::NativeImageSource::ColorDepth depth,
55                           Any nativeImageSource);
56   /**
57    * @copydoc Dali::NativeImageSource::GetNativeImageSource()
58    */
59   Any GetNativeImageSource() const override;
60
61   /**
62    * @copydoc Dali::NativeImageSource::GetPixels()
63    */
64   bool GetPixels(std::vector<unsigned char> &pixbuf, unsigned int &width, unsigned int &height, Pixel::Format& pixelFormat ) const override;
65
66   /**
67    * @copydoc Dali::NativeImageSource::EncodeToFile(const std::string& )
68    */
69   bool EncodeToFile(const std::string& filename) const override;
70
71   /**
72    * @copydoc Dali::NativeImageSource::SetSource( Any source )
73    */
74   void SetSource( Any source ) override;
75
76   /**
77    * @copydoc Dali::NativeImageSource::IsColorDepthSupported( ColorDepth colorDepth )
78    */
79   bool IsColorDepthSupported( Dali::NativeImageSource::ColorDepth colorDepth ) override;
80
81   /**
82    * destructor
83    */
84   ~NativeImageSourceWin() override;
85
86   /**
87    * @copydoc Dali::NativeImageSource::GlExtensionCreate()
88    */
89   bool GlExtensionCreate() override;
90
91   /**
92    * @copydoc Dali::NativeImageSource::GlExtensionDestroy()
93    */
94   void GlExtensionDestroy() override;
95
96   /**
97    * @copydoc Dali::NativeImageSource::TargetTexture()
98    */
99   unsigned int TargetTexture() override;
100
101   /**
102    * @copydoc Dali::NativeImageSource::PrepareTexture()
103    */
104   void PrepareTexture() override;
105
106   /**
107    * @copydoc Dali::NativeImageSource::GetWidth()
108    */
109   unsigned int GetWidth() const override
110   {
111     return mWidth;
112   }
113
114   /**
115    * @copydoc Dali::NativeImageSource::GetHeight()
116    */
117   unsigned int GetHeight() const override
118   {
119     return mHeight;
120   }
121
122   /**
123    * @copydoc Dali::NativeImageSource::RequiresBlending()
124    */
125   bool RequiresBlending() const override
126   {
127     return mBlendingRequired;
128   }
129
130   /**
131    * @copydoc Dali::NativeImageInterface::GetExtension()
132    */
133   NativeImageInterface::Extension* GetNativeImageInterfaceExtension() override
134   {
135     return nullptr;
136   }
137
138 private:
139
140   /**
141    * Private constructor; @see NativeImageSource::New()
142    * @param[in] width The width of the image.
143    * @param[in] height The height of the image.
144    * @param[in] colour depth of the image.
145    * @param[in] nativeImageSource contains either: pixmap of type Win32 Pixmap , a WinPixmap or is empty
146    */
147   NativeImageSourceWin(unsigned int width,
148               unsigned  int height,
149               Dali::NativeImageSource::ColorDepth depth,
150               Any nativeImageSource);
151
152   /**
153    * 2nd phase construction.
154    */
155   void Initialize();
156
157   /**
158    * Uses X11 to get the default depth.
159    * @param depth the PixelImage depth enum
160    * @return default win32 pixel depth
161    */
162   int GetPixelDepth(Dali::NativeImageSource::ColorDepth depth) const;
163
164   /**
165    * Gets the pixmap from the Any parameter
166    * @param pixmap contains either: pixmap of type Win32 Pixmap , a WinPixmap or is empty
167    * @return pixmap x11 pixmap
168    */
169   unsigned int GetPixmapFromAny(Any pixmap) const;
170
171   /**
172    * Given an existing pixmap, the function uses X to find out
173    * the width, heigth and depth of that pixmap.
174    */
175   void GetPixmapDetails();
176
177 private:
178
179   unsigned int mWidth;                        ///< image width
180   unsigned int mHeight;                       ///< image heights
181   bool mOwnPixmap;                            ///< Whether we created pixmap or not
182   unsigned int mPixmap;                       ///< From Windows
183   bool mBlendingRequired;                      ///< Whether blending is required
184   Dali::NativeImageSource::ColorDepth mColorDepth;  ///< color depth of image
185   void* mEglImageKHR;                         ///< From EGL extension
186   EglImageExtensions* mEglImageExtensions;    ///< The EGL Image Extensions
187 };
188
189 } // namespace Adaptor
190
191 } // namespace Internal
192
193 } // namespace Dali
194
195 #endif // __DALI_INTERNAL_NATIVE_IMAGE_SOURCE_H__