Apply gem
[platform/framework/native/shell.git] / src / FShell_AppWidgetBuffer.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://floralicense.org/license/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 /**
18  * @file                FShell_AppWidgetBuffer.h
19  * @brief               This is the header file for the _AppWidgetBuffer class.
20  *
21  * This header file contains the declarations of the %_AppWidgetBuffer class.
22  */
23 #ifndef _FSHELL_INTERNAL_APPWIDGET_BUFFER_H_
24 #define _FSHELL_INTERNAL_APPWIDGET_BUFFER_H_
25
26 #include <unique_ptr.h>
27 extern "C"
28 {
29 #include <X11/Xlib.h>
30 #include <X11/extensions/XShm.h>
31 #include <X11/Xutil.h>
32 #include <X11/Xproto.h>
33 #include <X11/extensions/Xdamage.h>
34 #include <X11/extensions/Xfixes.h>
35 #include <dri2.h>
36 #include <xf86drm.h>
37 #include <xf86drmMode.h>
38 #include <tbm_bufmgr.h>
39 }
40 #include <FBaseDataType.h>
41 #include <FGrpDimension.h>
42 #include <FGrpFloatDimension.h>
43
44 namespace Tizen { namespace Graphics
45 {
46 class FloatDimension;
47 }} // Tizen::Graphics
48
49 namespace Tizen { namespace Shell
50 {
51
52 /**
53  * @class _AppWidgetBuffer
54  * @brief
55  * @since 2.1
56  */
57 class _AppWidgetBuffer
58 {
59 public:
60         _AppWidgetBuffer(void);
61         ~_AppWidgetBuffer(void);
62
63         void Initialize(void);
64         void* AllocBuffer(Pixmap pixmap, const Tizen::Graphics::FloatDimension& size);
65         void DeallocBuffer(void);
66         void* LockBuffer(void);
67         void UnlockBuffer(void);
68         bool IsGemBufferEnabled(void) const;
69         Display* GetDisplay(void) const;
70         GC GetGc(void) const;
71         XImage* GetXImage(void) const;
72
73 private:
74         _AppWidgetBuffer(const _AppWidgetBuffer& rhs);
75         _AppWidgetBuffer& operator =(const _AppWidgetBuffer& rhs);
76
77 private:
78         class _Buffer
79         {
80         public:
81                 _Buffer(_AppWidgetBuffer* pAppWidgetBuffer);
82                 virtual ~_Buffer(void);
83                 void* AllocBuffer(Pixmap pixmap, const Tizen::Graphics::FloatDimension& size);
84                 void DeallocBuffer(void);
85                 void* LockBuffer(void);
86                 void UnlockBuffer(void);
87                 GC GetGc(void) const;
88                 XImage* GetXImage(void) const;
89
90         private:
91                 _Buffer(const _Buffer& rhs);
92                 _Buffer& operator =(const _Buffer& rhs);
93                 void DeleteBuffer(void);
94                 virtual void OnCreateBuffer(void);
95                 virtual void OnDeleteBuffer(void);
96                 virtual void* OnLockBuffer(void);
97                 virtual void OnUnlockBuffer(void);
98
99         protected:
100                 bool __allocated;
101                 bool __locked;
102                 Pixmap __pixmap;
103                 int __depth;
104                 Tizen::Graphics::FloatDimension __size;
105                 _AppWidgetBuffer* __pAppWidgetBuffer;
106
107         private:
108                 GC __gc;
109                 XImage* __pXImage;
110                 XShmSegmentInfo __xShmSegmentInfo;
111         };
112
113         class _GemBuffer
114                         : public _Buffer
115         {
116         public:
117                 _GemBuffer(_AppWidgetBuffer* pAppWidgetBuffer);
118                 virtual ~_GemBuffer(void);
119
120         private:
121                 _GemBuffer(const _GemBuffer& rhs);
122                 _GemBuffer& operator =(const _GemBuffer& rhs);
123                 void DeleteGemBuffer(void);
124                 virtual void OnCreateBuffer(void);
125                 virtual void OnDeleteBuffer(void);
126                 virtual void* OnLockBuffer(void);
127                 virtual void OnUnlockBuffer(void);
128
129         private:
130                 DRI2Buffer* __pDri2Buffer;
131                 Tizen::Graphics::Dimension __gemSize;
132                 int __count;
133                 int     __outCount;
134                 unsigned int __attachments[1];
135                 tbm_bo __pTbmBo;
136                 void* __pGemBuffer;
137                 void* __pCompensateBuffer;
138         };
139
140         Tizen::Graphics::FloatDimension __size;
141         int __screen;
142         Visual* __pVisual;
143
144         struct _FileDescriptorDeleter
145         {
146                 typedef int pointer;
147
148                 void operator()(int fileDescriptor)
149                 {
150                         close(fileDescriptor);
151                 }
152         };
153         std::unique_ptr<int, _FileDescriptorDeleter> __dri2FileDescriptor;
154
155         struct _DisplayDeleter
156         {
157                 void operator()(Display* pDisplay)
158                 {
159                         XCloseDisplay(pDisplay);
160                 }
161         };
162         std::unique_ptr<Display, _DisplayDeleter> __pDisplay;
163
164         struct _TbmBufMgrDeleter
165         {
166                 typedef tbm_bufmgr pointer;
167
168                 void operator()(tbm_bufmgr pBufMgr)
169                 {
170                         tbm_bufmgr_deinit(pBufMgr);
171                 }
172         };
173         std::unique_ptr<tbm_bufmgr, _TbmBufMgrDeleter> __pBufMgr;
174         std::unique_ptr<_Buffer> __pBuffer;
175 };
176
177 }} // Tizen::Shell
178
179 #endif // _FSHELL_INTERNAL_APPWIDGET_BUFFER_H_