654224f41ffbcde8197edefae3f82c4c1a2c7808
[platform/framework/native/uifw.git] / src / graphics / inc / FGrp_CanvasImpl.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_CanvasImpl.h
20  * @brief       This is the header file for the _CanvasImpl class.
21  *
22  * This header file contains the declarations of the %_CanvasImpl class.
23  *
24  */
25
26 #ifndef _FGRP_INTERNAL_CANVASIMPL_H_
27 #define _FGRP_INTERNAL_CANVASIMPL_H_
28
29
30 #include <FBaseObject.h>
31 #include <FGrpCanvasCommon.h>
32 #include <FBaseColArrayListT.h>
33
34
35 namespace Tizen { namespace Base { namespace Collection
36 {
37 class IList;
38 }}} // Tizen::Base::Collection
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 Dimension;
49 class Rectangle;
50 class FloatPoint;
51 class FloatDimension;
52 class FloatRectangle;
53 class Color;
54 class BufferInfo;
55 class Bitmap;
56 class Canvas;
57 class Font;
58 class EnrichedText;
59
60 class _BitmapImpl;
61 class _Canvas;
62
63
64 // * @enum      BitmapDrawingQuality
65 // *
66 // * Defines the bitmap drawing quality.
67 // *
68 // * @since 2.0
69
70 enum BitmapDrawingQuality
71 {
72         BITMAP_DRAWING_QUALITY_LOW, // The low-quality but high-performance
73         BITMAP_DRAWING_QUALITY_MID, // The mid-quality
74         BITMAP_DRAWING_QUALITY_HIGH // The high-quality but low-performance
75 };
76
77 enum TextOrigin
78 {
79         TEXT_ORIGIN_LEFT_TOP,
80         TEXT_ORIGIN_BASELINE
81 };
82
83 class _OSP_EXPORT_ _CanvasImpl
84         : public Tizen::Base::Object
85 {
86 public:
87         _CanvasImpl(void);
88         virtual ~_CanvasImpl(void);
89
90         result Construct(void);
91         result Construct(const Rectangle& rect);
92         result Construct(const BufferInfo& bufferInfo);
93         result Construct(Handle windowHandle);
94         result Construct(Handle windowHandle, const Rectangle& rect);
95
96         result Construct(const FloatRectangle& rect);
97         result Construct(Handle windowHandle, const FloatRectangle& rect);
98
99         bool IsConstructed(void) const;
100
101         result Clear(void);
102         result Clear(const Rectangle& rect);
103         result Clear(const FloatRectangle& rect);
104
105         result Copy(const Point& destPoint, const _CanvasImpl& srcCanvas, const Rectangle& srcRect);
106         result Copy(const FloatPoint& destPoint, const _CanvasImpl& srcCanvas, const FloatRectangle& srcRect);
107         result Copy(const Rectangle& destRect, const _CanvasImpl& srcCanvas, const Rectangle& srcRect);
108         result Copy(const FloatRectangle& destRect, const _CanvasImpl& srcCanvas, const FloatRectangle& srcRect);
109         result Copy(const Point& destPoint, const _CanvasImpl& srcCanvas, const Rectangle& srcRect, CompositeMode compositeMode);
110         result Copy(const FloatPoint& destPoint, const _CanvasImpl& srcCanvas, const FloatRectangle& srcRect, CompositeMode compositeMode);
111
112         result CopyEx(const Point& destPoint, const _CanvasImpl& srcCanvas, const Rectangle& srcRect);
113         result CopyEx(const FloatPoint& destPoint, const _CanvasImpl& srcCanvas, const FloatRectangle& srcRect);
114
115         LineStyle GetLineStyle(void) const;
116         int GetLineWidth(void) const;
117         float GetLineWidthF(void) const;
118         LineCapStyle GetLineCapStyle(void) const;
119         LineJoinStyle GetLineJoinStyle(void) const;
120         result SetLineStyle(LineStyle style);
121         result SetLineWidth(int width);
122         result SetLineWidth(float width);
123         result SetLineCapStyle(LineCapStyle lineCapStyle);
124         result SetLineJoinStyle(LineJoinStyle lineJoinStyle);
125
126         result GetDashPattern(Tizen::Base::Collection::IListT<int>& pattern, int& offset);
127         result GetDashPattern(Tizen::Base::Collection::IListT<float>& pattern, float& offset);
128         result SetDashPattern(const Tizen::Base::Collection::IListT<int>& pattern, int offset);
129         result SetDashPattern(const Tizen::Base::Collection::IListT<float>& pattern, float offset);
130
131         result SetDrawingQuality(BitmapDrawingQuality quality);
132         BitmapDrawingQuality GetDrawingQuality(void) const;
133
134         result SetCompositeMode(CompositeMode compositeMode);
135         CompositeMode GetCompositeMode(void) const;
136
137         result GetPixel(const Point& point, Color& color) const;
138         result GetPixel(const FloatPoint& point, Color& color) const;
139
140         result SetPixel(const Point& point);
141         result SetPixel(const FloatPoint& point);
142
143         result DrawRectangle(const Rectangle& rect);
144         result DrawRectangle(const FloatRectangle& rect);
145         result FillRectangle(const Color& color, const Rectangle& rect);
146         result FillRectangle(const Color& color, const FloatRectangle& rect);
147
148         result DrawRoundRectangle(const Rectangle& rect, const Dimension& arcDim);
149         result DrawRoundRectangle(const FloatRectangle& rect, const FloatDimension& arcDim);
150         result FillRoundRectangle(const Color& color, const Rectangle& rect, const Dimension& arcDim);
151         result FillRoundRectangle(const Color& color, const FloatRectangle& rect, const FloatDimension& arcDim);
152
153         result DrawEllipse(const Rectangle& rect);
154         result DrawEllipse(const FloatRectangle& rect);
155         result FillEllipse(const Color& color, const Rectangle& rect);
156         result FillEllipse(const Color& color, const FloatRectangle& rect);
157
158         result DrawArc(const Rectangle& rect, int startAngle, int endAngle, ArcStyle arcStyle);
159         result DrawArc(const FloatRectangle& rect, float startAngle, float endAngle, ArcStyle arcStyle);
160
161         result DrawTriangle(const Point& point1, const Point& point2, const Point& point3);
162         result DrawTriangle(const FloatPoint& point1, const FloatPoint& point2, const FloatPoint& point3);
163         result FillTriangle(const Color& color, const Point& point1, const Point& point2, const Point& point3);
164         result FillTriangle(const Color& color, const FloatPoint& point1, const FloatPoint& point2, const FloatPoint& point3);
165
166         result DrawLine(const Point& point1, const Point& point2);
167         result DrawLine(const FloatPoint& point1, const FloatPoint& point2);
168         result DrawPolyline(const Tizen::Base::Collection::IList& points);
169         result DrawPolygon(const Tizen::Base::Collection::IList& points);
170         result FillPolygon(const Color& color, const Tizen::Base::Collection::IList& points);
171
172         result SetFont(const Font& font);
173         Font* GetFontN(void);
174
175         void SetTextOrigin(TextOrigin origin);
176
177         result DrawText(const Point& point, const Tizen::Base::String& text);
178         result DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length);
179         result DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, const Color& outlineColor);
180         result DrawText(const Point& point, const Tizen::Base::String& text, int startIndex, int length, const Color& outlineColor);
181         result DrawText(const Point& point, const EnrichedText& enrichedText);
182
183         result DrawText(const FloatPoint& point, const Tizen::Base::String& text);
184         result DrawText(const FloatPoint& point, const Tizen::Base::String& text, int startIndex, int length);
185         result DrawText(const FloatPoint& point, const Tizen::Base::String& text, int startIndex, const Color& outlineColor);
186         result DrawText(const FloatPoint& point, const Tizen::Base::String& text, int startIndex, int length, const Color& outlineColor);
187         result DrawText(const FloatPoint& point, const EnrichedText& enrichedText);
188
189         result DrawBitmap(const Point& point, const _BitmapImpl& bitmap);
190         result DrawBitmap(const FloatPoint& point, const _BitmapImpl& bitmap);
191         result DrawBitmap(const Rectangle& rect, const _BitmapImpl& bitmap);
192         result DrawBitmap(const FloatRectangle& rect, const _BitmapImpl& bitmap);
193         result DrawBitmap(const Rectangle& destRect, const _BitmapImpl& srcBitmap, const Rectangle& srcRect);
194         result DrawBitmap(const FloatRectangle& destRect, const _BitmapImpl& srcBitmap, const FloatRectangle& srcRect);
195         result DrawBitmap(const Point& point, const _BitmapImpl& bitmap, FlipDirection dir);
196         result DrawBitmap(const FloatPoint& point, const _BitmapImpl& bitmap, FlipDirection dir);
197         result DrawBitmap(const Point& point, const _BitmapImpl& bitmap, const Point& pivot, int degree);
198         result DrawBitmap(const FloatPoint& point, const _BitmapImpl& bitmap, const FloatPoint& pivot, float degree);
199         result DrawNinePatchedBitmap(const Rectangle& rect, const _BitmapImpl& bitmap);
200         result DrawNinePatchedBitmap(const FloatRectangle& rect, const _BitmapImpl& bitmap);
201         result DrawNineTiledBitmap(const Rectangle& rect, const _BitmapImpl& bitmap);
202
203         result Show(void);
204         result Show(const Rectangle& rect);
205
206         Rectangle GetBounds(void) const;
207         FloatRectangle GetBoundsF(void) const;
208         FloatRectangle GetActualBounds(void) const;
209
210         result SetClipBounds(const Rectangle& rect);
211         result SetClipBounds(const FloatRectangle& rect);
212         Rectangle GetClipBounds(void) const;
213         FloatRectangle GetClipBoundsF(void) const;
214
215         result Lock(BufferInfo& info, long timeout = INFINITE);
216         result Unlock(void);
217
218         void SetForegroundColor(const Color& color);
219         Color GetForegroundColor(void) const;
220         void SetBackgroundColor(const Color& color);
221         Color GetBackgroundColor(void) const;
222
223         result SetPosition(const Point& point);
224         result SetPosition(int x, int y);
225
226         Canvas* GetSubCanvasN(const Rectangle& subRegion) const;
227         Canvas* GetSubCanvasFN(const FloatRectangle& subRegion) const;
228
229         void SetAntialiasingEnabled(bool enable);
230         bool IsAntialiasingEnabled(void) const;
231
232         /*
233          * Sets a priority font to the %_CanvasImpl. This font have priority at user font which is installed through _CanvasImpl::SetFont()
234          *
235          * @return              An error code
236          * @param[in]   pFont   The font @n
237          *                      It should be constructed before being passed to this method.
238          * @exception  E_SUCCESS                        The method is successful.
239          * @exception  E_INVALID_ARG            The specified input parameter is invalid.
240          * @exception  E_OPERATION_FAILED       This instance is in an invalid state.
241          */
242         result SetPriorityFont(const Font& font);
243
244         /*
245          * Resets a priority font
246          */
247         void ResetPriorityFont(void);
248
249         // for performance test
250         void SetStableRenderer(bool isStable);
251
252         // for removing the Ui dependency
253         static void SetFrameInfoCallback(void* (*pGetDefaultFrameNativeHandle)(void), void* (*pGetDefaultFrameHandle)(void));
254         static void SetThemeInfoCallback(Color (*pGetDefaultForegroundColor)(void), Color (*pGetDefaultBackgroundColor)(void));
255
256         static _CanvasImpl* GetInstance(Canvas& canvas);
257         static const _CanvasImpl* GetInstance(const Canvas& canvas);
258
259 private:
260         _CanvasImpl(const _CanvasImpl& canvas);
261         _CanvasImpl& operator =(const _CanvasImpl& value);
262
263 protected:
264         unsigned long _magicKey;
265         _Canvas* _pNativeCanvas;
266         struct _CanvasCoordHolder* _pCoordHolder;
267         Font* _pFont;
268         Font* _pPriorityFont;
269         Tizen::Base::Collection::ArrayListT<float> _dashList;
270         int _dashOffset;
271         bool (* _pShowCallbackFunc)(void*);
272         void* _pShowCallbackParam;
273
274         friend class _Canvas;
275         friend class _CanvasImplPrivate;
276         friend class _BitmapImpl;
277         friend class TextElement;
278         friend class Tizen::Ui::Animations::_VisualElementCanvas;
279
280 }; // _CanvasImpl
281
282 }} // Tizen::Graphics
283
284 #endif // _FGRP_INTERNAL_CANVASIMPL_H_