Revert " modify license, permission and remove ^M char"
[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);
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::Rectangle<double>& rect, const _Bitmap& bitmap);
157         result DrawBitmap(const _Util::Rectangle<double>& destRect, const _Bitmap& srcBitmap, const _Util::Rectangle<double>& srcRect);
158         result DrawBitmapForNinePatchedBitmap(const Rectangle& destRect, const _Bitmap& srcBitmap, const Rectangle& srcRect, bool copyOnly = false);
159         result DrawBitmap(const _Util::Point<double>& point, const _Bitmap& bitmap, FlipDirection dir);
160         result DrawBitmap(const _Util::Point<double>& point, const _Bitmap& bitmap, const _Util::Point<double>& pivot, double degree);
161         result DrawNinePatchedBitmap(const Rectangle& rect, const _Bitmap& bitmap);
162         result DrawNineTiledBitmap(const Rectangle& rect, const _Bitmap& bitmap);
163
164         result Show(void);
165         result Show(const Rectangle& rect);
166
167         Rectangle GetBounds(void) const;
168
169         result SetClipBounds(const Rectangle& rect);
170         Rectangle GetClipBounds(void) const;
171
172         result Lock(BufferInfo& info, long timeout = INFINITE);
173         result Unlock(void);
174
175         void SetForegroundColor(const Color& color);
176         Color GetForegroundColor(void);
177         void SetBackgroundColor(const Color& color);
178         Color GetBackgroundColor(void);
179
180         void SetForegroundOpacity(int level);
181         int GetForegroundOpacity(void);
182         void SetBackgroundOpacity(int level);
183         int GetBackgroundOpacity(void);
184
185         result SetPosition(int x, int y);
186
187         void SetAntialiasingEnabled(bool enable);
188         bool IsAntialiasingEnabled(void) const;
189
190         static _Canvas* GetInstance(_CanvasImpl& canvas);
191         static const _Canvas* GetInstance(const _CanvasImpl& canvas);
192
193 protected:
194         bool _IsWindowCanvas(void) const;
195         result _SetPosition(int x, int y);
196         int _GetAlphaAttenuation(const _Bitmap& bitmap) const;
197
198         void _SetBlendOption(BlendOption);
199         BlendOption _GetBlendOption(void) const;
200
201 private:
202         _Canvas(const _Canvas& canvas);
203         _Canvas& operator =(const _Canvas& value);
204
205         void __InitFgBgColorFromTheme(void);
206
207         void __ComposeFgColor(void);
208         void __ComposeBgColor(void);
209
210         void __GetClipBounds(Rectangle& rect) const;
211
212         result __Copy(const Point& destPoint, const _Canvas& srcCanvas, const Rectangle& srcRect);
213         result __Copy(const Rectangle& destRect, const _Canvas& srcCanvas, const Rectangle& srcRect);
214
215         result __FillRectangle(unsigned long composedColor, const _Util::Rectangle<double>& rectangle);
216
217         result __FillRoundRectangle(unsigned long composedColor, const _Util::Rectangle<double>& rect, const _Util::Dimension<double>& arcDim);
218
219         result __FillEllipse(unsigned long composedColor, const _Util::Rectangle<double>& bounds);
220
221         result __FillTriangle(unsigned long composedColor, const _Util::Point<double>& point1, const _Util::Point<double>& point2, const _Util::Point<double>& point3);
222
223         result __DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length);
224         result __DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length, const Color& outlineColor);
225
226         bool __IsInClipBounds(const _Util::Rectangle<double>& bounds);
227
228 protected:
229         void* _pNativeGfxEngine;
230
231 private:
232         Tizen::Graphics::_Canvas* __pParent;
233         Tizen::Graphics::_Font* __pFont;               // weak reference
234         Tizen::Graphics::_Font* __pPriorityFont;               // weak reference
235         Handle __windowHandle;
236         Tizen::Graphics::_Canvas::BlendOption __blendOption;
237
238         _Util::GenericBuffer <SystemPixel>* __pSurface;
239         _Util::ScratchPad <SystemPixel>* __pScratchPad;
240
241         int __xBufferPos;
242         int __yBufferPos;
243         unsigned long* __pBuffer;
244         unsigned long __fgColor;
245         unsigned long __bgColor;
246         Color __fgColorNative;
247         Color __bgColorNative;
248         int __fgOpacity;
249         int __bgOpacity;
250         _Util::ScalarHolder __lineWidth;
251         LineStyle __lineStyle;
252         LineCapStyle __lineCapStyle;
253         LineJoinStyle __lineJoinStyle;
254         bool __isClipBoundsSet;
255         Rectangle __clipBounds;
256         TextOrigin __textOrigin;
257         bool __applyEmoji;
258
259         struct
260         {
261                 Tizen::Graphics::_Util::AccumList<double> pattern;
262                 double offset;
263         } __dashData;
264
265         BitmapDrawingQuality __bitmapDrawingQuality;
266         CompositeMode __compositeMode;
267
268         // for performance test
269         bool __useStableRenderer;
270
271         friend class _CanvasImpl;
272         friend class _Bitmap;
273         friend class _Font;
274         friend class Tizen::Ui::Animations::_VisualElementCanvas;
275
276 }; // _Canvas
277
278 }} // Tizen::Graphics
279
280 #endif // _FGRP_INTERNAL_CANVAS_H_