2e7675ae578784028c2f38ce2d5ec86c482b25c9
[platform/framework/native/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 Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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);
79         result Construct(Handle windowHandle, const Rectangle& rect);
80         result Construct(_Canvas* pSourceCanvas, const Rectangle& subRegion);
81         result Construct(const BufferInfo& bufferInfo);
82
83         bool IsValid(void) const;
84
85         result Clear(void);
86         result Clear(const Rectangle& rect);
87
88         result Copy(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect);
89         result Copy(const Rectangle& destRect, const _Canvas& srcCanvas, const Rectangle& srcRect);
90         result Copy(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect, CompositeMode compositeMode);
91         result CopyReverse(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect);
92
93         result SetLineStyle(LineStyle style);
94         LineStyle GetLineStyle(void) const;
95
96         result SetLineWidth(int width, float auxWidth);
97         result SetLineWidth(float width); // floating-point version
98         int GetLineWidth(void) const;
99
100         result SetLineCapStyle(LineCapStyle lineCapStyle);
101         LineCapStyle GetLineCapStyle(void) const;
102         result SetLineJoinStyle(LineJoinStyle lineJoinStyle);
103         LineJoinStyle GetLineJoinStyle(void) const;
104
105         result SetDashPattern(const Tizen::Graphics::_Util::AccumList<double>& dashValueList, double offset);
106
107         void SetDrawingQuality(BitmapDrawingQuality quality);
108         BitmapDrawingQuality GetDrawingQuality(void) const;
109
110         void SetCompositeMode(CompositeMode compositeMode);
111         CompositeMode GetCompositeMode(void) const;
112
113         result GetPixel(const Point& point, Color& color) const;
114
115         result SetPixel(const _Util::Point<int>& point);
116         result SetPixel(const _Util::Point<double>& point); // floating-point version
117
118         result DrawRectangle(const _Util::Rectangle<int>& rect);
119         result DrawRectangle(const _Util::Rectangle<double>& rect); // floating-point version
120         result FillRectangle(const Color& color, const Rectangle& rect);
121         result FillRectangle(const Color& color, const _Util::Rectangle<int>& rect);
122         result FillRectangle(const Color& color, const _Util::Rectangle<double>& rect); // floating-point version
123
124         result DrawRoundRectangle(const _Util::Rectangle<int>& rect, const _Util::Dimension<int>& arcDim);
125         result DrawRoundRectangle(const _Util::Rectangle<double>& rect, const _Util::Dimension<double>& arcDim); // floating-point version
126         result FillRoundRectangle(const Color& color, const _Util::Rectangle<int>& rect, const _Util::Dimension<int>& arcDim);
127         result FillRoundRectangle(const Color& color, const _Util::Rectangle<double>& rect, const _Util::Dimension<double>& arcDim); // floating-point version
128
129         result DrawEllipse(const _Util::Rectangle<int>& rect);
130         result DrawEllipse(const _Util::Rectangle<double>& rect); // floating-point version
131         result FillEllipse(const Color& color, const _Util::Rectangle<int>& rect);
132         result FillEllipse(const Color& color, const _Util::Rectangle<double>& rect); // floating-point version
133
134         result DrawArc(const _Util::Rectangle<double>& rect, double startAngle, double endAngle, ArcStyle arcStyle); // floating-point version
135
136         result DrawTriangle(const _Util::Point<double>& point1, const _Util::Point<double>& point2, const _Util::Point<double>& point3); // floating-point version
137         result FillTriangle(const Color& color, const _Util::Point<int>& point1, const _Util::Point<int>& point2, const _Util::Point<int>& point3);
138         result FillTriangle(const Color& color, const _Util::Point<double>& point1, const _Util::Point<double>& point2, const _Util::Point<double>& point3); // floating-point version
139
140         result DrawLine(const _Util::Point<int>& point1, const _Util::Point<int>& point2);
141         result DrawLine(const _Util::Point<double>& point1, const _Util::Point<double>& point2); // floating-point version
142         result DrawPolyline(const _Util::Point<double>* pPoints, unsigned int pointCount);
143         result DrawPolygon(const _Util::Point<double>* pPoints, unsigned int pointCount);
144         result FillPolygon(const Color& color, const _Util::Point<double>* pPoints, unsigned int pointCount);
145
146         result SetFont(const _Font& font);
147
148         result SetPriorityFont(const _Font& font);
149         void ResetPriorityFont(void);
150
151         result DrawText(const Point& point, const Tizen::Base::String& text);
152         result DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length);
153         result DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length, const Color& outlineColor);
154
155         result DrawBitmap(const _Util::Point<double>& point, const _Bitmap& bitmap);
156         result DrawBitmap(const _Util::Point<int>& point, const _Bitmap& bitmap);
157         result DrawBitmap(const _Util::Rectangle<double>& rect, const _Bitmap& bitmap);
158         result DrawBitmap(const _Util::Rectangle<double>& destRect, const _Bitmap& srcBitmap, const _Util::Rectangle<double>& srcRect);
159         result DrawBitmapForNinePatchedBitmap(const Rectangle& destRect, const _Bitmap& srcBitmap, const Rectangle& srcRect, bool copyOnly = false);
160         result DrawBitmap(const _Util::Point<double>& point, const _Bitmap& bitmap, FlipDirection dir);
161         result DrawBitmap(const _Util::Point<double>& point, const _Bitmap& bitmap, const _Util::Point<double>& pivot, double degree);
162         result DrawNinePatchedBitmap(const Rectangle& rect, const _Bitmap& bitmap);
163         result DrawNineTiledBitmap(const Rectangle& rect, const _Bitmap& bitmap);
164
165         result Show(void);
166         result Show(const Rectangle& rect);
167
168         Rectangle GetBounds(void) const;
169
170         result SetClipBounds(const Rectangle& rect);
171         Rectangle GetClipBounds(void) const;
172
173         result Lock(BufferInfo& info, long timeout = INFINITE);
174         result Unlock(void);
175
176         void SetForegroundColor(const Color& color);
177         Color GetForegroundColor(void);
178         void SetBackgroundColor(const Color& color);
179         Color GetBackgroundColor(void);
180
181         void SetForegroundOpacity(int level);
182         int GetForegroundOpacity(void);
183         void SetBackgroundOpacity(int level);
184         int GetBackgroundOpacity(void);
185
186         result SetPosition(int x, int y);
187
188         void SetAntialiasingEnabled(bool enable);
189         bool IsAntialiasingEnabled(void) const;
190
191         static _Canvas* GetInstance(_CanvasImpl& canvas);
192         static const _Canvas* GetInstance(const _CanvasImpl& canvas);
193
194 protected:
195         bool _IsWindowCanvas(void) const;
196         result _SetPosition(int x, int y);
197         int _GetAlphaAttenuation(const _Bitmap& bitmap) const;
198
199         void _SetBlendOption(BlendOption);
200         BlendOption _GetBlendOption(void) const;
201
202 private:
203         _Canvas(const _Canvas& canvas);
204         _Canvas& operator =(const _Canvas& value);
205
206         void __InitFgBgColorFromTheme(void);
207
208         void __ComposeFgColor(void);
209         void __ComposeBgColor(void);
210
211         void __GetClipBounds(Rectangle& rect) const;
212
213         result __Copy(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect);
214         result __Copy(const Rectangle& destRect, const _Canvas& srcCanvas, const Rectangle& srcRect);
215
216         result __FillRectangle(unsigned long composedColor, const _Util::Rectangle<double>& rectangle);
217
218         result __FillRoundRectangle(unsigned long composedColor, const _Util::Rectangle<double>& rect, const _Util::Dimension<double>& arcDim);
219
220         result __FillEllipse(unsigned long composedColor, const _Util::Rectangle<double>& bounds);
221
222         result __FillTriangle(unsigned long composedColor, const _Util::Point<double>& point1, const _Util::Point<double>& point2, const _Util::Point<double>& point3);
223
224         result __DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length);
225         result __DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length, const Color& outlineColor);
226
227         bool __IsInClipBounds(const _Util::Rectangle<double>& bounds);
228
229 protected:
230         unsigned long _magicKey;
231         void* _pNativeGfxEngine;
232
233 private:
234         Tizen::Graphics::_Canvas* __pParent;
235         Tizen::Graphics::_Font* __pFont;               // weak reference
236         Tizen::Graphics::_Font* __pPriorityFont;               // weak reference
237         Handle __windowHandle;
238         Tizen::Graphics::_Canvas::BlendOption __blendOption;
239
240         _Util::GenericBuffer <SystemPixel>* __pSurface;
241         _Util::ScratchPad <SystemPixel>* __pScratchPad;
242
243         int __xBufferPos;
244         int __yBufferPos;
245         unsigned long* __pBuffer;
246         unsigned long __fgColor;
247         unsigned long __bgColor;
248         Color __fgColorNative;
249         Color __bgColorNative;
250         int __fgOpacity;
251         int __bgOpacity;
252         _Util::ScalarHolder __lineWidth;
253         LineStyle __lineStyle;
254         LineCapStyle __lineCapStyle;
255         LineJoinStyle __lineJoinStyle;
256         bool __isClipBoundsSet;
257         Rectangle __clipBounds;
258         TextOrigin __textOrigin;
259
260         struct
261         {
262                 Tizen::Graphics::_Util::AccumList<double> pattern;
263                 double offset;
264         } __dashData;
265
266         BitmapDrawingQuality __bitmapDrawingQuality;
267         CompositeMode __compositeMode;
268
269         // for performance test
270         bool __useStableRenderer;
271
272         friend class _CanvasImpl;
273         friend class _Bitmap;
274         friend class _Font;
275         friend class Tizen::Ui::Animations::_VisualElementCanvas;
276
277 }; // _Canvas
278
279 }} // Tizen::Graphics
280
281 #endif // _FGRP_INTERNAL_CANVAS_H_