Fix coordinate error
[platform/framework/native/shell.git] / src / FShell_AppWidgetBuffer.h
1 //
2 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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  * @file                FShell_AppWidgetBuffer.h
18  * @brief               This is the header file for the _AppWidgetBuffer class.
19  *
20  * This header file contains the declarations of the %_AppWidgetBuffer class.
21  */
22 #ifndef _FSHELL_INTERNAL_APPWIDGET_BUFFER_H_
23 #define _FSHELL_INTERNAL_APPWIDGET_BUFFER_H_
24
25 #include <unique_ptr.h>
26 extern "C"
27 {
28 #include <X11/Xlib.h>
29 #include <X11/extensions/XShm.h>
30 #include <X11/Xutil.h>
31 #include <X11/Xproto.h>
32 #include <X11/extensions/Xdamage.h>
33 #include <X11/extensions/Xfixes.h>
34 #include <dri2.h>
35 #include <xf86drm.h>
36 #include <xf86drmMode.h>
37 #include <tbm_bufmgr.h>
38 }
39 #include <FBaseDataType.h>
40 #include <FGrpDimension.h>
41 #include <FGrpFloatDimension.h>
42
43 namespace Tizen { namespace Graphics
44 {
45 class FloatDimension;
46 }} // Tizen::Graphics
47
48 namespace Tizen { namespace Shell
49 {
50
51 /**
52  * @class _AppWidgetBuffer
53  * @brief
54  * @since 2.1
55  */
56 class _AppWidgetBuffer
57 {
58 public:
59         _AppWidgetBuffer(void);
60         ~_AppWidgetBuffer(void);
61
62         void Initialize(void);
63         void* AllocBuffer(Pixmap pixmap, const Tizen::Graphics::Dimension& size);
64         void DeallocBuffer(void);
65         void* LockBuffer(void);
66         void UnlockBuffer(void);
67         bool IsGemBufferEnabled(void) const;
68         Display* GetDisplay(void) const;
69         GC GetGc(void) const;
70         XImage* GetXImage(void) const;
71         Pixmap GetPixmap(void) const;
72         void Dump(const char* pName);
73
74 private:
75         _AppWidgetBuffer(const _AppWidgetBuffer& rhs);
76         _AppWidgetBuffer& operator =(const _AppWidgetBuffer& rhs);
77
78 private:
79         class _Buffer
80         {
81         public:
82                 _Buffer(_AppWidgetBuffer* pAppWidgetBuffer);
83                 virtual ~_Buffer(void);
84                 void* AllocBuffer(Pixmap pixmap, const Tizen::Graphics::Dimension& size);
85                 void DeallocBuffer(void);
86                 void* LockBuffer(void);
87                 void UnlockBuffer(void);
88                 GC GetGc(void) const;
89                 XImage* GetXImage(void) const;
90                 Pixmap GetPixmap(void) const;
91                 void Dump(const char* pName);
92
93         private:
94                 _Buffer(const _Buffer& rhs);
95                 _Buffer& operator =(const _Buffer& rhs);
96                 void* GetBuffer(void);
97                 void DeleteBuffer(void);
98                 virtual void OnCreateBuffer(void);
99                 virtual void OnDeleteBuffer(void);
100                 virtual void* OnLockBuffer(void);
101                 virtual void OnUnlockBuffer(void);
102                 virtual void* OnGetBuffer(void);
103
104         protected:
105                 bool __locked;
106                 Pixmap __pixmap;
107                 int __depth;
108                 Tizen::Graphics::Dimension __size;
109                 _AppWidgetBuffer* __pAppWidgetBuffer;
110
111         private:
112                 int __dumpFileIndex;
113                 GC __gc;
114                 XImage* __pXImage;
115                 XShmSegmentInfo __xShmSegmentInfo;
116         };
117
118         class _GemBuffer
119                         : public _Buffer
120         {
121         public:
122                 _GemBuffer(_AppWidgetBuffer* pAppWidgetBuffer);
123                 virtual ~_GemBuffer(void);
124
125         private:
126                 _GemBuffer(const _GemBuffer& rhs);
127                 _GemBuffer& operator =(const _GemBuffer& rhs);
128                 void DeleteGemBuffer(void);
129                 virtual void OnCreateBuffer(void);
130                 virtual void OnDeleteBuffer(void);
131                 virtual void* OnLockBuffer(void);
132                 virtual void OnUnlockBuffer(void);
133                 virtual void* OnGetBuffer(void);
134
135         private:
136                 DRI2Buffer* __pDri2Buffer;
137                 Tizen::Graphics::Dimension __gemSize;
138                 int __count;
139                 int     __outCount;
140                 unsigned int __attachments[1];
141                 tbm_bo __pTbmBo;
142                 void* __pGemBuffer;
143                 void* __pCompensateBuffer;
144         };
145
146         Tizen::Graphics::Dimension __size;
147         int __screen;
148         Visual* __pVisual;
149
150         struct _FileDescriptorDeleter
151         {
152                 typedef int pointer;
153
154                 void operator()(int fileDescriptor)
155                 {
156                         close(fileDescriptor);
157                 }
158         };
159         std::unique_ptr<int, _FileDescriptorDeleter> __dri2FileDescriptor;
160
161         struct _DisplayDeleter
162         {
163                 void operator()(Display* pDisplay)
164                 {
165                         XCloseDisplay(pDisplay);
166                 }
167         };
168         std::unique_ptr<Display, _DisplayDeleter> __pDisplay;
169
170         struct _TbmBufMgrDeleter
171         {
172                 typedef tbm_bufmgr pointer;
173
174                 void operator()(tbm_bufmgr pBufMgr)
175                 {
176                         tbm_bufmgr_deinit(pBufMgr);
177                 }
178         };
179         std::unique_ptr<tbm_bufmgr, _TbmBufMgrDeleter> __pBufMgr;
180         std::unique_ptr<_Buffer> __pBuffer;
181 };
182
183 }} // Tizen::Shell
184
185 #endif // _FSHELL_INTERNAL_APPWIDGET_BUFFER_H_