1/*
2 * Copyright (c) 2020-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16/**
17 * @addtogroup UI_Components
18 * @{
19 *
20 * @brief Defines UI components such as buttons, texts, images, lists, and progress bars.
21 *
22 * @since 1.0
23 * @version 1.0
24 */
25
26/**
27 * @file ui_canvas.h
28 *
29 * @brief Defines the attributes of the canvas component and provides functions for drawing rectangles,
30 *        circles, and others.
31 *
32 * @since 1.0
33 * @version 1.0
34 */
35
36#ifndef GRAPHIC_LITE_UI_CANVAS_H
37#define GRAPHIC_LITE_UI_CANVAS_H
38
39#include "common/image.h"
40#include "components/ui_label.h"
41#include "gfx_utils/diagram/depiction/depict_curve.h"
42#include "gfx_utils/diagram/depiction/depict_dash.h"
43#include "gfx_utils/diagram/depiction/depict_stroke.h"
44#include "gfx_utils/diagram/imagefilter/filter_blur.h"
45#include "gfx_utils/diagram/rasterizer/rasterizer_scanline_antialias.h"
46#include "gfx_utils/diagram/scanline/geometry_scanline.h"
47#include "gfx_utils/diagram/spancolorfill/fill_base.h"
48#include "gfx_utils/diagram/spancolorfill/fill_gradient.h"
49#include "gfx_utils/diagram/spancolorfill/fill_gradient_lut.h"
50#include "gfx_utils/diagram/spancolorfill/fill_interpolator.h"
51#include "gfx_utils/diagram/spancolorfill/fill_pattern_rgba.h"
52#include "gfx_utils/diagram/vertexprimitive/geometry_path_storage.h"
53#include "ui_extend_image_view.h"
54#include "gfx_utils/file.h"
55#include "gfx_utils/list.h"
56#include "gfx_utils/diagram/common/paint.h"
57
58namespace OHOS {
59class RenderBase;
60
61/**
62 * @brief Defines a canvas, which is used to draw multiple types of 2D graphs.
63 *
64 * @since 1.0
65 * @version 1.0
66 */
67class UICanvas : public UIView {
68public:
69    /**
70     * @brief A constructor used to create a <b>UICanvas</b> instance.
71     *
72     * @since 1.0
73     * @version 1.0
74     */
75    UICanvas() : startPoint_({0, 0}), vertices_(nullptr), path_(nullptr) {}
76
77    /**
78     * @brief A destructor used to delete the <b>UICanvas</b> instance.
79     *
80     * @since 1.0
81     * @version 1.0
82     */
83    virtual ~UICanvas();
84
85    /**
86     * @brief Obtains the view type.
87     *
88     * @return Returns the view type. For details, see {@link UIViewType}.
89     * @since 1.0
90     * @version 1.0
91     */
92    UIViewType GetViewType() const override
93    {
94        return UI_CANVAS;
95    }
96
97    /**
98     * @brief Clears the entire canvas.
99     *
100     * @since 1.0
101     * @version 1.0
102     */
103    void Clear();
104
105    /**
106     * @brief Sets the coordinates of the start point for drawing a line. For example, if <b>startPoint</b> is
107     *        set to {50, 50}, the line is drawn from this set of coordinates on the canvas.
108     *
109     * @param startPoint Indicates the coordinates of the start point.
110     * @see GetStartPosition
111     * @since 1.0
112     * @version 1.0
113     */
114    void SetStartPosition(const Point& startPoint)
115    {
116        startPoint_ = startPoint;
117    }
118
119    /**
120     * @brief Obtains the coordinates of the start point of a line.
121     *
122     * @return Returns the coordinates of the start point.
123     * @see SetStartPosition
124     * @since 1.0
125     * @version 1.0
126     */
127    const Point& GetStartPosition() const
128    {
129        return startPoint_;
130    }
131
132    /**
133     * @brief Draws a straight line.
134     *
135     * If {@link SetStartPosition} is not used to set the coordinates of the start point of the line, the drawing
136     * starts from the end point of the last line.
137     *
138     * @param endPoint Indicates the end point of the straight line.
139     * @param paint    Indicates the straight line style. For details, see {@link Paint}.
140     * @since 1.0
141     * @version 1.0
142     */
143    void DrawLine(const Point& endPoint, const Paint& paint);
144
145    /**
146     * @brief Draws a straight line from the coordinates of the start point.
147     *
148     * @param startPoint Indicates the coordinates of the start point.
149     * @param endPoint   Indicates the coordinates of the end point.
150     * @param paint      Indicates the straight line style. For details, see {@link Paint}.
151     * @since 1.0
152     * @version 1.0
153     */
154    void DrawLine(const Point& startPoint, const Point& endPoint, const Paint& paint);
155
156    /**
157     * @brief Draws a cubic Bezier curve.
158     *
159     * If {@link SetStartPosition} is not used to set the coordinates of the start point of the curve,
160     * the drawing starts from the end point of the last line.
161     * Currently, the opacity cannot be set, and the maximum line width is <b>3</b>.
162     *
163     * @param control1 Indicates the coordinates of the first control point of the cubic Bezier curve.
164     * @param control2 Indicates the coordinates of the second control point of the cubic Bezier curve.
165     * @param endPoint Indicates the coordinates of the end point of the cubic Bezier curve.
166     * @param paint    Indicates the curve style. For details, see {@link Paint}.
167     * @since 1.0
168     * @version 1.0
169     */
170    void DrawCurve(const Point& control1, const Point& control2, const Point& endPoint, const Paint& paint);
171
172    /**
173     * @brief Draws a cubic Bezier curve from the start point coordinates.
174     *
175     * Currently, the opacity cannot be set, and the maximum line width is <b>3</b>.
176     *
177     * @param startPoint Indicates the coordinates of the start point of the cubic Bezier curve.
178     * @param control1   Indicates the coordinates of the first control point of the cubic Bezier curve.
179     * @param control2   Indicates the coordinates of the second control point of the cubic Bezier curve.
180     * @param endPoint   Indicates the coordinates of the end point of the cubic Bezier curve.
181     * @param paint      Indicates the curve style. For details, see {@link Paint}.
182     * @since 1.0
183     * @version 1.0
184     */
185    void DrawCurve(const Point& startPoint, const Point& control1, const Point& control2,
186                   const Point& endPoint, const Paint& paint);
187
188    /**
189     * @brief Draws a rectangle.
190     *
191     * @param startPoint Indicates the coordinates of the point at the upper left corner of the rectangle.
192     * @param height     Indicates the height of the rectangle.
193     * @param width      Indicates the width of the rectangle.
194     * @param paint      Indicates the rectangle style. For details, see {@link Paint}.
195     * @since 1.0
196     * @version 1.0
197     */
198    void DrawRect(const Point& startPoint, int16_t height, int16_t width, const Paint& paint);
199
200#if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
201    /**
202     * @brief Draws a rectangular path with no fill.
203     * @param startPoint starting point
204     * @param height
205     * @param width
206     * @param paint paint brush
207     */
208    void StrokeRect(const Point& startPoint, int16_t height, int16_t width, const Paint& paint);
209
210    /**
211     * @brief Clears pixels within a rectangle
212     * @param startPoint starting point
213     * @param height
214     * @param width
215     */
216    void ClearRect(const Point& startPoint, int16_t height, int16_t width);
217#endif
218
219    /**
220     * @brief Draws a circle.
221     *
222     * @param center Indicates the coordinates of the circle center.
223     * @param radius Indicates the radius of the circle.
224     * @param paint  Indicates the circle style. For details, see {@link Paint}.
225     * @since 1.0
226     * @version 1.0
227     */
228    void DrawCircle(const Point& center, uint16_t radius, const Paint& paint);
229
230    /**
231     * @brief Draws a sector.
232     *
233     * When the start angle is smaller than the end angle, the sector is drawn clockwise.
234     * Otherwise, the sector is drawn counterclockwise.
235     *
236     * @param center     Indicates the coordinates of the sector's center.
237     * @param radius     Indicates the radius of the sector.
238     * @param startAngle Indicates the start angle of the sector. Value <b>0</b> indicates the 12-o'clock direction,
239     *                   and <b>90</b> indicates the 3-o'clock direction.
240     * @param endAngle   Indicates the end angle of the sector. Value <b>0</b> indicates the 12-o'clock direction,
241     *                   and <b>90</b> indicates the 3-o'clock direction.
242     * @param paint      Indicates the sector style. For details, see {@link Paint}.
243     * @since 1.0
244     * @version 1.0
245     */
246    void DrawSector(const Point& center, uint16_t radius, int16_t startAngle, int16_t endAngle, const Paint& paint);
247
248    /**
249     * @brief Draws an arc.
250     *
251     * Only stroke is supported. \n
252     * When the start angle is smaller than the end angle, the sector is drawn clockwise.
253     * Otherwise, the sector is drawn counterclockwise. \n
254    *
255     * @param center     Indicates the coordinates of the arc's center.
256     * @param radius     Indicates the radius of the arc.
257     * @param startAngle Indicates the start angle of the arc. Value <b>0</b> indicates the 12-o'clock direction,
258     *                   and <b>90</b> indicates the 3-o'clock direction.
259     * @param endAngle   Indicates the end angle of the arc. Value <b>0</b> indicates the 12-o'clock direction,
260     *                   and <b>90</b> indicates the 3-o'clock direction.
261     * @param paint      Indicates the arc style. For details, see {@link Paint}.
262     * @since 1.0
263     * @version 1.0
264     */
265    void DrawArc(const Point& center, uint16_t radius, int16_t startAngle, int16_t endAngle, const Paint& paint);
266
267#if defined(GRAPHIC_ENABLE_DRAW_IMAGE_FLAG) && GRAPHIC_ENABLE_DRAW_IMAGE_FLAG
268    /**
269     * @brief Draws an image.
270     *
271     * @param startPoint Indicates the coordinates of the start point.
272     * @param image      Indicates the pointer to the image source.
273     * @param paint      Indicates the image style. For details, see {@link Paint}.
274     * @since 1.0
275     * @version 1.0
276     */
277    void DrawImage(const Point& startPoint, const char* image, const Paint& paint);
278
279    void DrawImage(const Point& startPoint, const char* image, const Paint& paint, int16_t width, int16_t height);
280#endif
281    /**
282     * @brief Defines the font style.
283     */
284    struct FontStyle : public HeapBase {
285        /** Text direction. For details, see {@link UITextLanguageDirect}. */
286        UITextLanguageDirect direct;
287        /** Text alignment mode. For details, see {@link UITextLanguageAlignment}. */
288        UITextLanguageAlignment align;
289        /** Font size */
290        uint8_t fontSize;
291        /** Letter-spacing */
292        int16_t letterSpace;
293        /** Font name */
294        const char* fontName;
295    };
296
297    struct DrawCmd : public HeapBase {
298        Paint paint;
299        void* param;
300        void (*DrawGraphics)(BufferInfo&, void*, const Paint&, const Rect&, const Rect&, const Style&);
301        void (*DeleteParam)(void*);
302    };
303
304    /**
305     * @brief Draws text.
306     *
307     * Only fill is supported. \n
308     * If the text length exceeds the value of <b>maxWidth</b>, the text will be truncated. \n
309     *
310     * @param startPoint Indicates the coordinates of the start point.
311     * @param text       Indicates the pointer to the text content.
312     * @param maxWidth   Indicates the maximum width of the text that can be displayed. If the maximum width is
313     *                   exceeded, the text is truncated.
314     * @param fontStyle  Indicates the text layout and font style. For details, see {@link FontStyle}.
315     * @param paint      Indicates the text style. For details, see {@link Paint}.
316     * @since 1.0
317     * @version 1.0
318     */
319    void DrawLabel(const Point& startPoint, const char* text, uint16_t maxWidth, const FontStyle& fontStyle,
320                   const Paint& paint);
321
322    /**
323     * @brief Creates a path.
324     *
325     * A round corner can be used to join two lines. Currently, miter and bevel joints are not supported.
326     * To draw this path, you need to call {@link DrawPath}.
327     *
328     * @since 3.0
329     * @version 5.0
330     */
331    void BeginPath();
332
333    /**
334     * @brief Moves the start point of this path to a specified point.
335     *
336     * @param point Indicates the specified point to move to.
337     * @since 3.0
338     * @version 5.0
339     */
340    void MoveTo(const Point& point);
341
342    /**
343     * @brief Creates a straight line from the end point of this path to a specified point.
344     *
345     * @param point Indicates the coordinates of the specified point.
346     * @since 3.0
347     * @version 5.0
348     */
349    void LineTo(const Point& point);
350
351    /**
352     * @brief Creates an arc path.
353     *
354     * @param center     Indicates the coordinates of the arc's center point.
355     * @param radius     Indicates the radius of the arc.
356     * @param startAngle Indicates the start angle of the arc.
357     *                   The value <b>0</b> indicates the 12-o'clock direction,
358     *                   and <b>90</b> indicates the 3-o'clock direction.
359     * @param endAngle   Indicates the end angle of the arc.
360     *                   The value <b>0</b> indicates the 12-o'clock direction,
361     *                   and <b>90</b> indicates the 3-o'clock direction.
362     * @since 3.0
363     * @version 5.0
364     */
365    void ArcTo(const Point& center, uint16_t radius, int16_t startAngle, int16_t endAngle);
366
367    /**
368     * @brief Creates a rectangular path.
369     *
370     * @param point  Indicates the coordinates of the rectangle's upper left corner.
371     * @param height Indicates the height of the rectangle.
372     * @param width  Indicates the width of the rectangle.
373     * @since 3.0
374     * @version 5.0
375     */
376    void AddRect(const Point& point, int16_t height, int16_t width);
377
378    /**
379     * @brief Closes this path.
380     *
381     * @since 3.0
382     * @version 5.0
383     */
384    void ClosePath();
385
386    /**
387     * @brief Draws this path.
388     *
389     * @param paint Indicates the path style. For details, see {@link Paint}.
390     * @since 3.0
391     * @version 5.0
392     */
393    void DrawPath(const Paint& paint);
394
395#if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
396    /**
397     * @brief Fill polygon path
398     * @param paint fill paint
399     * @since 3.0
400     * @version 5.0
401     */
402    void FillPath(const Paint& paint);
403#endif
404
405#if defined(GRAPHIC_ENABLE_DRAW_TEXT_FLAG) && GRAPHIC_ENABLE_DRAW_TEXT_FLAG
406    /*  Draw text on canvas */
407    void StrokeText(const char* text, const Point& point, const FontStyle& fontStyle, const Paint& paint);
408#endif
409
410    /* Returns an object containing the specified text width */
411    Point MeasureText(const char* text, const FontStyle& fontStyle);
412
413    /* Save history status */
414    void Save(Paint paint)
415    {
416        paintStack_.PushBack(paint);
417    }
418
419    /**
420     * @brief Restore to last historical state
421     * @return Returns the last paint value.
422     * @since 3.0
423     * @version 5.0
424     */
425    Paint Restore()
426    {
427        Paint paint;
428        if (paintStack_.IsEmpty()) {
429            return paint;
430        }
431        paint = paintStack_.Back();
432        paintStack_.PopBack();
433        return paint;
434    }
435
436#if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
437    void OnBlendDraw(BufferInfo& gfxDstBuffer, const Rect& trunc);
438#endif
439
440    void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override;
441
442    static void BlendRaster(const Paint& paint,
443                        void* param,
444                        RasterizerScanlineAntialias& blendRasterizer,
445                        RasterizerScanlineAntialias& rasterizer,
446                        RenderBase& renBase,
447                        TransAffine& transform,
448                        SpanBase& spanGen,
449                        const Rect& rect,
450                        bool isStroke);
451    static void DeleteImageParam(void* param);
452    static void DeletePathParam(void* param);
453protected:
454    constexpr static uint8_t MAX_CURVE_WIDTH = 3;
455
456    struct LineParam : public HeapBase {
457        Point start;
458        Point end;
459    };
460
461    struct CurveParam : public HeapBase {
462        Point start;
463        Point control1;
464        Point control2;
465        Point end;
466    };
467
468    struct RectParam : public HeapBase {
469        Point start;
470        int16_t height;
471        int16_t width;
472    };
473
474    struct CircleParam : public HeapBase {
475        Point center;
476        uint16_t radius;
477    };
478
479    struct ArcParam : public HeapBase {
480        Point center;
481        uint16_t radius;
482        int16_t startAngle;
483        int16_t endAngle;
484    };
485
486    enum PathCmd {
487        CMD_MOVE_TO,
488        CMD_LINE_TO,
489        CMD_ARC,
490        CMD_CLOSE,
491    };
492
493    class UICanvasPath : public HeapBase {
494    public:
495        UICanvasPath() : startPos_({ 0, 0 }), strokeCount_(0) {};
496        ~UICanvasPath();
497        List<Point> points_;
498        List<PathCmd> cmd_;
499        List<ArcParam> arcParam_;
500        Point startPos_;
501        uint16_t strokeCount_;
502    };
503
504#if (!(defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND))
505    struct PathParam : public HeapBase {
506        UICanvasPath* path;
507        uint16_t count;
508    };
509
510    struct ImageParam : public HeapBase {
511        Point start;
512        uint16_t height;
513        uint16_t width;
514        Image* image;
515    };
516#endif
517
518    struct TextParam : public HeapBase {
519        const char* text;
520        Point position;
521        Color32 fontColor;
522        uint8_t fontOpa;
523        FontStyle fontStyle;
524        Text* textComment;
525        TextParam() : text(nullptr), position({0, 0}), fontOpa(0)
526        {
527            fontColor.full = 0;
528            fontStyle.direct = UITextLanguageDirect::TEXT_DIRECT_LTR;
529            fontStyle.align = UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT;
530            fontStyle.fontSize = 0;
531            fontStyle.letterSpace = 0;
532            fontStyle.fontName = nullptr;
533            textComment = new Text;
534        }
535
536        ~TextParam()
537        {
538            if (textComment) {
539                delete textComment;
540                textComment = nullptr;
541            }
542        };
543    };
544
545    Point startPoint_;
546    UICanvasVertices* vertices_;
547    UICanvasPath* path_;
548    List<DrawCmd> drawCmdList_;
549    // Save historical modification information of paint
550    List<Paint> paintStack_;
551    static BufferInfo* gfxMapBuffer_;
552
553    static void DeleteLineParam(void* param)
554    {
555        LineParam* lineParam = static_cast<LineParam*>(param);
556        delete lineParam;
557    }
558
559    static void DeleteCurveParam(void* param)
560    {
561        CurveParam* curveParam = static_cast<CurveParam*>(param);
562        delete curveParam;
563    }
564
565    static void DeleteRectParam(void* param)
566    {
567        RectParam* rectParam = static_cast<RectParam*>(param);
568        delete rectParam;
569    }
570
571    static void DeleteCircleParam(void* param)
572    {
573        CircleParam* circleParam = static_cast<CircleParam*>(param);
574        delete circleParam;
575    }
576
577    static void DeleteArcParam(void* param)
578    {
579        ArcParam* arcParam = static_cast<ArcParam*>(param);
580        delete arcParam;
581    }
582
583    static void DeleteLabel(void* param)
584    {
585        UILabel* label = static_cast<UILabel*>(param);
586        delete label;
587    }
588
589    static void DeleteImageView(void* param)
590    {
591        UIExtendImageView* imageView = static_cast<UIExtendImageView*>(param);
592        delete imageView;
593    }
594
595    static void DeleteTextParam(void* param)
596    {
597        TextParam* textParam = static_cast<TextParam*>(param);
598        delete textParam;
599    }
600
601    static void DoDrawLine(BufferInfo& gfxDstBuffer,
602                           void* param,
603                           const Paint& paint,
604                           const Rect& rect,
605                           const Rect& invalidatedArea,
606                           const Style& style);
607    static void DoDrawCurve(BufferInfo& gfxDstBuffer,
608                            void* param,
609                            const Paint& paint,
610                            const Rect& rect,
611                            const Rect& invalidatedArea,
612                            const Style& style);
613    static void DoDrawRect(BufferInfo& gfxDstBuffer,
614                           void* param,
615                           const Paint& paint,
616                           const Rect& rect,
617                           const Rect& invalidatedArea,
618                           const Style& style);
619    static void DoFillRect(BufferInfo& gfxDstBuffer,
620                           void* param,
621                           const Paint& paint,
622                           const Rect& rect,
623                           const Rect& invalidatedArea,
624                           const Style& style);
625    static void DoDrawCircle(BufferInfo& gfxDstBuffer,
626                             void* param,
627                             const Paint& paint,
628                             const Rect& rect,
629                             const Rect& invalidatedArea,
630                             const Style& style);
631    static void DoDrawArc(BufferInfo& gfxDstBuffer,
632                          void* param,
633                          const Paint& paint,
634                          const Rect& rect,
635                          const Rect& invalidatedArea,
636                          const Style& style);
637#if defined(GRAPHIC_ENABLE_DRAW_IMAGE_FLAG) && GRAPHIC_ENABLE_DRAW_IMAGE_FLAG
638    static void DoDrawImage(BufferInfo& gfxDstBuffer,
639                            void* param,
640                            const Paint& paint,
641                            const Rect& rect,
642                            const Rect& invalidatedArea,
643                            const Style& style);
644#endif
645
646    static void DoDrawLabel(BufferInfo& gfxDstBuffer,
647                            void* param,
648                            const Paint& paint,
649                            const Rect& rect,
650                            const Rect& invalidatedArea,
651                            const Style& style);
652    static void DoDrawPath(BufferInfo& gfxDstBuffer,
653                           void* param,
654                           const Paint& paint,
655                           const Rect& rect,
656                           const Rect& invalidatedArea,
657                           const Style& style);
658    static void GetAbsolutePosition(const Point& prePoint, const Rect& rect, const Style& style, Point& point);
659    static void DoDrawLineJoin(BufferInfo& gfxDstBuffer,
660                               const Point& center,
661                               const Rect& invalidatedArea,
662                               const Paint& paint);
663
664    static void DoFillPath(BufferInfo& gfxDstBuffer,
665                           void* param,
666                           const Paint& paint,
667                           const Rect& rect,
668                           const Rect& invalidatedArea,
669                           const Style& style);
670
671    static void  BlitMapBuffer(BufferInfo &gfxDstBuffer, BufferInfo& gfxMapBuffer,
672                              Rect& textRect, TransformMap& transMap, const Rect& invalidatedArea);
673
674#if defined(GRAPHIC_ENABLE_DRAW_TEXT_FLAG) && GRAPHIC_ENABLE_DRAW_TEXT_FLAG
675    static void DoDrawText(BufferInfo& gfxDstBuffer, void* param, const Paint& paint, const Rect& rect,
676                           const Rect& invalidatedArea, const Style& style);
677#endif
678    /**
679     * Assembly parameter setting lineweight,LineCap,LineJoin
680     */
681    template <class LineStyle>
682    static void LineStyleCalc(DepictStroke<LineStyle>& strokeLineStyle, const Paint& paint)
683    {
684        strokeLineStyle.SetWidth(paint.GetStrokeWidth()); // Line style related
685#if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG
686        strokeLineStyle.SetLineCap(paint.GetLineCap());
687#endif
688#if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
689        strokeLineStyle.SetLineJoin(paint.GetLineJoin());
690        if (paint.GetMiterLimit() > 0) {
691            strokeLineStyle.SetMiterLimit(paint.GetMiterLimit());
692        }
693#endif
694    };
695
696    static bool IsSoild(const Paint& paint)
697    {
698        if (paint.GetStyle() == Paint::STROKE_STYLE ||
699           paint.GetStyle() == Paint::FILL_STYLE ||
700           paint.GetStyle() == Paint::STROKE_FILL_STYLE) {
701            return true;
702        }
703        return false;
704    }
705
706    void DrawRectSetCmd(const Point& startPoint, int16_t height, int16_t width, const Paint& paint,
707                        Paint::PaintStyle paintStyle);
708    static void InitGfxMapBuffer(const BufferInfo& srcBuff, const Rect& rect);
709    static BufferInfo* UpdateMapBufferInfo(const BufferInfo& srcBuff, const Rect& rect);
710    static void DestroyMapBufferInfo();
711    void SetArcParamInfo(const Point& center, uint16_t radius, int16_t startAngle, int16_t endAngle);
712#if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
713    void SetDrawLinePath(const Point& startPoint, int16_t height, int16_t width, const Paint& paint);
714#endif
715};
716} // namespace OHOS
717#endif // GRAPHIC_LITE_UI_CANVAS_H
718