Tizen 2.1 base
[framework/osp/uifw.git] / src / graphics / FGrp_Canvas.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 /*
19  * @file        FGrp_Canvas.h
20  * @brief       This is the header file for the _Canvas class.
21  *
22  */
23
24 #ifndef _FGRP_INTERNAL_CANVAS_H_
25 #define _FGRP_INTERNAL_CANVAS_H_
26
27 #include <FGrpRectangle.h>
28 #include <FGrpFloatRectangle.h>
29
30 #include <FGrpColor.h>
31
32 #include "FGrp_CanvasImpl.h"
33
34 #include "util/FGrp_UtilPixmap.h"
35 #include "util/FGrp_UtilScratchpad.h"
36 #include "util/FGrp_UtilTemplate.h"
37 #include "util/FGrp_Util.h"
38
39
40 namespace Tizen { namespace Ui {namespace Animations
41 {
42 class _VisualElementCanvas;
43 }}} // Tizen::Ui::Animations
44
45 namespace Tizen { namespace Graphics
46 {
47 class Point;
48 class FloatPoint;
49 class Dimension;
50 class FloatDimension;
51 class Rectangle;
52 class FloatRectangle;
53 class BufferInfo;
54
55 class _CanvasImpl;
56 class _Bitmap;
57 class _Font;
58
59 class _Canvas
60 {
61 public:
62         typedef unsigned long SystemPixel;
63
64         enum BlendOption
65         {
66                 BLEND_MIN = 0,
67                 BLEND_COPY = BLEND_MIN,
68                 BLEND_ALPHABLEND,
69                 BLEND_MAX,
70         };
71
72 public:
73         _Canvas(void);
74         virtual ~_Canvas(void);
75
76         result Construct(void);
77         result Construct(const Rectangle& rect);
78         result Construct(Handle windowHandle, const Rectangle& rect);
79         result Construct(_Canvas* pSourceCanvas, const Rectangle& subRegion);
80         result Construct(const BufferInfo& bufferInfo);
81
82         bool IsValid(void) const;
83
84         result Clear(void);
85         result Clear(const Rectangle& rect);
86
87         result Copy(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect);
88         result Copy(const Rectangle& destRect, const _Canvas& srcCanvas, const Rectangle& srcRect);
89         result Copy(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect, BlendingMode blendingMode);
90         result CopyReverse(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect);
91
92         result SetLineStyle(LineStyle style);
93         LineStyle GetLineStyle(void) const;
94
95         result SetLineWidth(int width, float auxWidth);
96         result SetLineWidth(float width); // floating-point version
97         int GetLineWidth(void) const;
98
99         result SetDashPattern(const Tizen::Graphics::_Util::AccumList<double>& dashValueList, double offset);
100
101         void SetDrawingQuality(BitmapDrawingQuality quality);
102         BitmapDrawingQuality GetDrawingQuality(void) const;
103
104         void SetBlendingMode(BlendingMode blendingMode);
105         BlendingMode GetBlendingMode(void) const;
106
107         result GetPixel(const Point& point, Color& color) const;
108
109         result SetPixel(const _Util::Point<int>& point);
110         result SetPixel(const _Util::Point<double>& point); // floating-point version
111
112         result DrawRectangle(const _Util::Rectangle<int>& rect);
113         result DrawRectangle(const _Util::Rectangle<double>& rect); // floating-point version
114         result FillRectangle(const Color& color, const Rectangle& rect);
115         result FillRectangle(const Color& color, const _Util::Rectangle<int>& rect);
116         result FillRectangle(const Color& color, const _Util::Rectangle<double>& rect); // floating-point version
117
118         result DrawRoundRectangle(const _Util::Rectangle<int>& rect, const _Util::Dimension<int>& arcDim);
119         result DrawRoundRectangle(const _Util::Rectangle<double>& rect, const _Util::Dimension<double>& arcDim); // floating-point version
120         result FillRoundRectangle(const Color& color, const _Util::Rectangle<int>& rect, const _Util::Dimension<int>& arcDim);
121         result FillRoundRectangle(const Color& color, const _Util::Rectangle<double>& rect, const _Util::Dimension<double>& arcDim); // floating-point version
122
123         result DrawEllipse(const _Util::Rectangle<int>& rect);
124         result DrawEllipse(const _Util::Rectangle<double>& rect); // floating-point version
125         result FillEllipse(const Color& color, const _Util::Rectangle<int>& rect);
126         result FillEllipse(const Color& color, const _Util::Rectangle<double>& rect); // floating-point version
127
128         result DrawArc(const _Util::Rectangle<double>& rect, double startAngle, double endAngle, ArcStyle arcStyle); // floating-point version
129
130         result DrawTriangle(const _Util::Point<double>& point1, const _Util::Point<double>& point2, const _Util::Point<double>& point3); // floating-point version
131         result FillTriangle(const Color& color, const _Util::Point<int>& point1, const _Util::Point<int>& point2, const _Util::Point<int>& point3);
132         result FillTriangle(const Color& color, const _Util::Point<double>& point1, const _Util::Point<double>& point2, const _Util::Point<double>& point3); // floating-point version
133
134         result DrawLine(const _Util::Point<int>& point1, const _Util::Point<int>& point2);
135         result DrawLine(const _Util::Point<double>& point1, const _Util::Point<double>& point2); // floating-point version
136         result DrawPolyline(const _Util::Point<double>* pPoints, unsigned int pointCount);
137         result DrawPolygon(const _Util::Point<double>* pPoints, unsigned int pointCount);
138         result FillPolygon(const Color& color, const _Util::Point<double>* pPoints, unsigned int pointCount);
139
140         result SetFont(const _Font& font);
141
142         result SetPriorityFont(const _Font& font);
143         void ResetPriorityFont(void);
144
145         result DrawText(const Point& point, const Tizen::Base::String& text);
146         result DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length);
147         result DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length, const Color& outlineColor);
148
149         result DrawBitmap(const Point& point, const _Bitmap& bitmap);
150         result DrawBitmap(const Rectangle& rect, const _Bitmap& bitmap);
151         result DrawBitmap(const Rectangle& destRect, const _Bitmap& srcBitmap, const Rectangle& srcRect);
152         result DrawBitmapForNinePatchedBitmap(const Rectangle& destRect, const _Bitmap& srcBitmap, const Rectangle& srcRect);
153         result DrawBitmap(const Point& point, const _Bitmap& bitmap, FlipDirection dir);
154         result DrawBitmap(const Point& point, const _Bitmap& bitmap, const Point& pivot, int degree);
155         result DrawNinePatchedBitmap(const Rectangle& rect, const _Bitmap& bitmap);
156
157         result Show(void);
158         result Show(const Rectangle& rect);
159
160         Rectangle GetBounds(void) const;
161
162         result SetClipBounds(const Rectangle& rect);
163         Rectangle GetClipBounds(void) const;
164
165         result Lock(BufferInfo& info, long timeout = INFINITE);
166         result Unlock(void);
167
168         void SetForegroundColor(const Color& color);
169         Color GetForegroundColor(void);
170         void SetBackgroundColor(const Color& color);
171         Color GetBackgroundColor(void);
172
173         void SetForegroundOpacity(int level);
174         int GetForegroundOpacity(void);
175         void SetBackgroundOpacity(int level);
176         int GetBackgroundOpacity(void);
177
178         result SetPosition(int x, int y);
179
180         static _Canvas* GetInstance(_CanvasImpl& canvas);
181         static const _Canvas* GetInstance(const _CanvasImpl& canvas);
182
183 protected:
184         bool _IsWindowCanvas(void) const;
185         result _SetPosition(int x, int y);
186         int _GetAlphaAttenuation(const _Bitmap& bitmap) const;
187
188         void _SetBlendOption(BlendOption);
189         BlendOption _GetBlendOption(void) const;
190
191 private:
192         _Canvas(const _Canvas& canvas);
193         _Canvas& operator =(const _Canvas& value);
194
195         void __InitFgBgColorFromTheme(void);
196
197         void __ComposeFgColor(void);
198         void __ComposeBgColor(void);
199
200         void __GetClipBounds(Rectangle& rect) const;
201
202         result __Copy(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect);
203         result __Copy(const Rectangle& destRect, const _Canvas& srcCanvas, const Rectangle& srcRect);
204
205         result __FillRectangle(unsigned long composedColor, const _Util::Rectangle<double>& rectangle);
206
207         result __FillRoundRectangle(unsigned long composedColor, const _Util::Rectangle<double>& rect, const _Util::Dimension<double>& arcDim);
208
209         result __FillEllipse(unsigned long composedColor, const _Util::Rectangle<double>& bounds);
210
211         result __FillTriangle(unsigned long composedColor, const _Util::Point<double>& point1, const _Util::Point<double>& point2, const _Util::Point<double>& point3);
212
213         result __DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length);
214         result __DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length, const Color& outlineColor);
215
216 protected:
217         void* _pNativeGfxEngine;
218
219 private:
220         Tizen::Graphics::_Canvas* __pParent;
221         Tizen::Graphics::_Font* __pFont;               // weak reference
222         Tizen::Graphics::_Font* __pPriorityFont;               // weak reference
223         Handle __windowHandle;
224         Tizen::Graphics::_Canvas::BlendOption __blendOption;
225
226         _Util::GenericBuffer <SystemPixel>* __pSurface;
227         _Util::ScratchPad <SystemPixel>* __pScratchPad;
228
229         int __xBufferPos;
230         int __yBufferPos;
231         unsigned long* __pBuffer;
232         unsigned long __fgColor;
233         unsigned long __bgColor;
234         Color __fgColorNative;
235         Color __bgColorNative;
236         int __fgOpacity;
237         int __bgOpacity;
238         _Util::ScalarHolder __lineWidth;
239         LineStyle __lineStyle;
240         bool __isClipBoundsSet;
241         Rectangle __clipBounds;
242         TextOrigin __textOrigin;
243         bool __applyEmoji;
244
245         struct
246         {
247                 Tizen::Graphics::_Util::AccumList<double> pattern;
248                 double offset;
249         } __dashData;
250
251         BitmapDrawingQuality __bitmapDrawingQuality;
252         BlendingMode __blendingMode;
253
254         // for performance test
255         bool __useStableRenderer;
256
257         friend class _CanvasImpl;
258         friend class _Bitmap;
259         friend class _Font;
260         friend class Tizen::Ui::Animations::_VisualElementCanvas;
261
262 }; // _Canvas
263
264 }} // Tizen::Graphics
265
266 #endif // _FGRP_INTERNAL_CANVAS_H_