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 #include "ui_test_canvas.h"
17 
18 #include "common/screen.h"
19 #include "components/ui_label.h"
20 #include "test_resource_config.h"
21 namespace OHOS {
SetUp()22 void UITestCanvas::SetUp()
23 {
24     if (container_ == nullptr) {
25         container_ = new UIScrollView();
26         container_->Resize(Screen::GetInstance().GetWidth(),
27                            Screen::GetInstance().GetHeight() - BACK_BUTTON_HEIGHT);
28         container_->SetHorizontalScrollState(false);
29         container_->SetThrowDrag(true);
30     }
31     positionY_ = 0;
32 }
33 
TearDown()34 void UITestCanvas::TearDown()
35 {
36     DeleteChildren(container_);
37     container_ = nullptr;
38 }
39 
GetTestView()40 const UIView* UITestCanvas::GetTestView()
41 {
42     UIKitCanvasTestDrawImage002();
43 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
44     RM008UIKitCanvasTest001();
45     RM008UIKitCanvasTest002();
46 #endif
47     RM008UIKitCanvasTest003();
48 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
49     RM008UIKitCanvasTest004();
50     RM008UIKitCanvasTest005();
51     RM008UIKitCanvasTest006();
52     RM008UIKitCanvasTest007();
53     RM008UIKitCanvasShadowTest008();
54 #endif
55     RM009LineCapDrawPath();
56     RM009LineJoinDrawPath();
57     RM009LineDashDrawPath();
58 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
59     RM009StrokeAndClearRectDrawPath();
60 #endif
61     RM011StrokeText001();
62     RM011CanvasScale001();
63     RM011CanvasRotate001();
64 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
65     RM012globalAlpha001();
66     RM012SaveOrRestore002();
67     RM012GlobalCompositeOperationSourceOver();
68     RM012GlobalCompositeOperationSourceAtop();
69     RM012GlobalCompositeOperationSourceIn();
70     RM012GlobalCompositeOperationSourceOut();
71     RM012GlobalCompositeOperationDestinationOver();
72     RM012GlobalCompositeOperationDestinationAtop();
73     RM012GlobalCompositeOperationDestinationIn();
74     RM012GlobalCompositeOperationDestinationOut();
75     RM012GlobalCompositeOperationLIGHTER();
76     RM012GlobalCompositeOperationCopy();
77     RM012GlobalCompositeOperationXOR();
78 #endif
79     UIKitCanvasTestDraw();
80     return container_;
81 }
82 
UIKitCanvasTestDraw()83 void UITestCanvas::UIKitCanvasTestDraw()
84 {
85     UIKitCanvasTestDrawLine001();
86     UIKitCanvasTestDrawLine002();
87     UIKitCanvasTestDrawCurve001();
88     UIKitCanvasTestDrawCurve002();
89     UIKitCanvasTestDrawRect001();
90     UIKitCanvasTestDrawRect002();
91     UIKitCanvasTestDrawRect003();
92     UIKitCanvasTestDrawCircle001();
93     UIKitCanvasTestDrawCircle002();
94     UIKitCanvasTestDrawCircle003();
95     UIKitCanvasTestDrawArc001();
96     UIKitCanvasTestDrawImage001();
97     UIKitCanvasTestDrawLabel001();
98     UIKitCanvasTestDrawSector001();
99     UIKitCanvasTestClear001();
100     UIKitCanvasTestDrawPath001();
101     UIKitCanvasTestDrawPath002();
102     UIKitCanvasTestDrawPath003();
103     UIKitCanvasTestDrawPath004();
104     UIKitCanvasTestDrawPath005();
105     UIKitCanvasTestDrawPath006();
106     UIKitCanvasTestDrawPath007();
107     UIKitCanvasTestDrawPath008();
108     UIKitCanvasTestDrawPath009();
109     UIKitCanvasTestDrawPath010();
110     UIKitCanvasTestDrawPath011();
111     UIKitCanvasTestDrawPath012();
112     UIKitCanvasTestDrawPath013();
113     UIKitCanvasTestDrawPath014();
114     UIKitCanvasTestDrawPath015();
115     UIKitCanvasTestDrawPath016();
116     UIKitCanvasTestDrawPath017();
117     UIKitCanvasTestDrawPath018();
118     UIKitCanvasTestDrawPath019();
119     UIKitCanvasTestDrawPath020();
120     UIKitCanvasTestDrawPath021();
121     UIKitCanvasTestDrawPath022();
122     UIKitCanvasTestDrawPath023();
123     UIKitCanvasTestDrawPath024();
124     UIKitCanvasTestDrawPath025();
125     UIKitCanvasTestDrawPath026();
126     UIKitCanvasTestDrawPath027();
127     UIKitCanvasTestDrawPath028();
128     UIKitCanvasTestDrawPath029();
129     UIKitCanvasTestDrawPath030();
130     UIKitCanvasTestDrawPath031();
131     UIKitCanvasTestDrawPath032();
132     UIKitCanvasTestDrawPath033();
133     UIKitCanvasTestDrawPath034();
134 }
135 
CreateTitleLabel(const char * title)136 void UITestCanvas::CreateTitleLabel(const char* title)
137 {
138     UILabel* titleLabel = new UILabel();
139     titleLabel->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, positionY_, Screen::GetInstance().GetWidth(), TITLE_HEIGHT);
140     titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
141     titleLabel->SetText(title);
142     container_->Add(titleLabel);
143     positionY_ += TITLE_HEIGHT + HEIGHT_GAP; // 8: gap
144 }
145 
CreateCanvas()146 UICanvas* UITestCanvas::CreateCanvas()
147 {
148     UICanvas* canvas = new UICanvas();
149     canvas->SetHeight(CANVAS_HEIGHT);
150     canvas->SetWidth(CANVAS_WIDTH);
151     canvas->SetPosition(VIEW_DISTANCE_TO_LEFT_SIDE, positionY_);
152     canvas->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full);
153     container_->Add(canvas);
154     positionY_ += CANVAS_HEIGHT + GAP;
155     return canvas;
156 }
157 
UIKitCanvasTestDrawLine001()158 void UITestCanvas::UIKitCanvasTestDrawLine001()
159 {
160     if (container_ == nullptr) {
161         return;
162     }
163     CreateTitleLabel("绘制直线");
164     UICanvas* canvas = CreateCanvas();
165     Paint paint;
166     // {0, 10}: Start point coordinates x, y; {50, 10}: end point coordinates x, y
167     canvas->DrawLine({0, START1_X}, {LINE4_X, START1_X}, paint);
168 }
169 
UIKitCanvasTestDrawLine002()170 void UITestCanvas::UIKitCanvasTestDrawLine002()
171 {
172     if (container_ == nullptr) {
173         return;
174     }
175     CreateTitleLabel("绘制直线");
176     UICanvas* canvas = CreateCanvas();
177 
178     Paint paint;
179 
180     paint.SetStrokeWidth(LINE_WIDTH5);            // 5: line width
181     canvas->SetStartPosition({START_X, START_Y}); // {50, 10}: Start point coordinates x, y;
182     canvas->DrawLine({LINE2_X, RECT_Y}, paint);   // {100, 50}: end point coordinates x, y
183 }
184 
UIKitCanvasTestDrawCurve001()185 void UITestCanvas::UIKitCanvasTestDrawCurve001()
186 {
187     if (container_ == nullptr) {
188         return;
189     }
190     CreateTitleLabel("绘制曲线");
191     UICanvas* canvas = CreateCanvas();
192 
193     Paint paint;
194     paint.SetStrokeColor(Color::Red());
195     canvas->DrawCurve({LINE2_X, RECT_Y}, {LINE12_X, RECT_Y}, {LINE12_X, RECT_Y},
196                       {LINE12_X, LINE1_Y}, paint);
197 }
198 
UIKitCanvasTestDrawCurve002()199 void UITestCanvas::UIKitCanvasTestDrawCurve002()
200 {
201     if (container_ == nullptr) {
202         return;
203     }
204     CreateTitleLabel("绘制曲线");
205     UICanvas* canvas = CreateCanvas();
206 
207     Paint paint;
208     paint.SetStrokeColor(Color::Red());
209     canvas->DrawCurve({LINE2_X, LINE_CURVE_Y}, {LINE12_X, LINE_CURVE_Y},
210                       {LINE12_X, LINE1_Y}, paint);
211 }
212 
UIKitCanvasTestDrawRect001()213 void UITestCanvas::UIKitCanvasTestDrawRect001()
214 {
215     if (container_ == nullptr) {
216         return;
217     }
218     CreateTitleLabel("矩形填充");
219     UICanvas* canvas = CreateCanvas();
220 
221     Paint paint;
222     paint.SetStyle(Paint::PaintStyle::FILL_STYLE);
223     paint.SetFillColor(Color::Yellow());
224     paint.SetStrokeWidth(LINE_WIDTH30); // 30: line width
225     // {100, 10}: left corner coordinates point, 50: width, 50: rectangle style
226     canvas->DrawRect({LINE1_Y, START1_Y}, LINE4_X, TRANSLATE_Y, paint);
227 }
228 
UIKitCanvasTestDrawRect002()229 void UITestCanvas::UIKitCanvasTestDrawRect002()
230 {
231     if (container_ == nullptr) {
232         return;
233     }
234     CreateTitleLabel("矩形描边");
235     UICanvas* canvas = CreateCanvas();
236 
237     Paint paint;
238     paint.SetStyle(Paint::PaintStyle::STROKE_STYLE);
239     paint.SetStrokeColor(Color::Blue());
240     // {200, 10}: left corner coordinates point, 50: width, 50: rectangle style
241     canvas->DrawRect({LINE28_X, START2_Y}, LINE4_X, LINE_RECT_Y50, paint);
242 }
243 
UIKitCanvasTestDrawRect003()244 void UITestCanvas::UIKitCanvasTestDrawRect003()
245 {
246     if (container_ == nullptr) {
247         return;
248     }
249     CreateTitleLabel("矩形填充 + 描边");
250     UICanvas* canvas = CreateCanvas();
251 
252     Paint paint;
253     paint.SetStyle(Paint::PaintStyle::STROKE_FILL_STYLE);
254     paint.SetFillColor(Color::Yellow());
255     paint.SetStrokeColor(Color::Blue());
256     // {300, 10}: left corner coordinates point, 50: width, 50: rectangle style
257     canvas->DrawRect({LINE_RECT_X300, LINE_RECT_Y10}, LINE_RECT_WIDTH50, LINE_RECT_HEIGHT50, paint);
258 }
259 
UIKitCanvasTestDrawCircle001()260 void UITestCanvas::UIKitCanvasTestDrawCircle001()
261 {
262     if (container_ == nullptr) {
263         return;
264     }
265     CreateTitleLabel("圆形填充");
266     UICanvas* canvas = CreateCanvas();
267 
268     Paint paint;
269     paint.SetStyle(Paint::PaintStyle::FILL_STYLE);
270     paint.SetStrokeColor(Color::Yellow());
271     paint.SetFillColor(Color::Yellow());
272     paint.SetStrokeWidth(LINE_WIDTH10); // 10: line width
273     paint.SetOpacity(OPARCITY_127);     // 127: opacity
274     // {100, 100}: circle center coordinates, 30: circle radius
275     canvas->DrawCircle({LINE_CURVE_X100, LINE_CURVE_Y100}, LINE_CURVE_R30, paint);
276 }
277 
UIKitCanvasTestDrawCircle002()278 void UITestCanvas::UIKitCanvasTestDrawCircle002()
279 {
280     if (container_ == nullptr) {
281         return;
282     }
283     CreateTitleLabel("圆形描边");
284     UICanvas* canvas = CreateCanvas();
285 
286     Paint paint;
287     paint.SetStyle(Paint::PaintStyle::STROKE_STYLE);
288     paint.SetStrokeColor(Color::Blue());
289     paint.SetStrokeWidth(LINE_WIDTH10); // 10: line width
290     paint.SetOpacity(OPARCITY_127);     // 127: opacity
291     // {200, 100}: circle center coordinates, 30: circle radius
292     canvas->DrawCircle({LINE_CURVE_X200, LINE_CURVE_Y100}, LINE_CURVE_R30, paint);
293 }
294 
UIKitCanvasTestDrawCircle003()295 void UITestCanvas::UIKitCanvasTestDrawCircle003()
296 {
297     if (container_ == nullptr) {
298         return;
299     }
300     CreateTitleLabel("圆形填充 + 描边");
301     UICanvas* canvas = CreateCanvas();
302 
303     Paint paint;
304     paint.SetStyle(Paint::PaintStyle::STROKE_FILL_STYLE);
305     paint.SetFillColor(Color::Yellow());
306     paint.SetStrokeColor(Color::Blue());
307     paint.SetStrokeWidth(LINE_WIDTH10); // 10: line width
308     paint.SetOpacity(OPARCITY_127);     // 127: opacity
309     // {300, 100}: circle center coordinates, 30: circle radius
310     canvas->DrawCircle({LINE_CURVE_X300, LINE_CURVE_Y100}, LINE_CURVE_R30, paint);
311 }
312 
UIKitCanvasTestDrawArc001()313 void UITestCanvas::UIKitCanvasTestDrawArc001()
314 {
315     if (container_ == nullptr) {
316         return;
317     }
318     CreateTitleLabel("绘制弧线");
319     UICanvas* canvas = CreateCanvas();
320 
321     Paint paint;
322     paint.SetStyle(Paint::PaintStyle::STROKE_STYLE);
323     paint.SetStrokeColor(Color::Red());
324     paint.SetStrokeWidth(LINE_WIDTH10); // 10: line width
325     canvas->BeginPath();
326 
327     canvas->MoveTo({LINE11_X, LINE13_Y});
328     // {100, 150}: arc's center coordinates, 50: arc radius, 135: start angle, 270: end angle
329     canvas->DrawArc({ARC_X100, ARC_Y150}, ARC_R50, ARC_ANGLE135, ARC_ANGLE270, paint);
330 }
331 
UIKitCanvasTestDrawImage001()332 void UITestCanvas::UIKitCanvasTestDrawImage001()
333 {
334     if (container_ == nullptr) {
335         return;
336     }
337     CreateTitleLabel("绘制图片");
338     // {200, 50}: start point coordinates
339 #if defined(GRAPHIC_ENABLE_DRAW_IMAGE_FLAG) && GRAPHIC_ENABLE_DRAW_IMAGE_FLAG
340     UICanvas* canvas = CreateCanvas();
341 
342     Paint paint;
343     paint.SetOpacity(OPARCITY_127); // 127: opacity
344 
345     canvas->DrawImage({0, IMAGE_START60}, RED_IMAGE_PATH, paint);
346     paint.SetOpacity(OPA_OPAQUE);
347     paint.Rotate(ROTATE_20);
348     canvas->DrawImage({IMAGE_START100, IMAGE_START20}, JPEG_IMAGE_PATH, paint);
349     canvas->DrawImage({0, 0}, JPEG_IMAGE_PATH, paint, IMAGE_WIDTH100, IMAGE_HEIGHT100);
350 #endif
351 }
UIKitCanvasTestDrawImage002()352 void UITestCanvas::UIKitCanvasTestDrawImage002()
353 {
354     if (container_ == nullptr) {
355         return;
356     }
357     CreateTitleLabel("绘制图片");
358     // {200, 50}: start point coordinates
359 #if defined(GRAPHIC_ENABLE_DRAW_IMAGE_FLAG) && GRAPHIC_ENABLE_DRAW_IMAGE_FLAG
360     UICanvas* canvas = CreateCanvas();
361     const float scale = 1.5f;
362     const int16_t trx = 50;
363     Paint paint;
364     paint.Rotate(ROTATE20);
365     paint.Scale(scale, scale);
366     paint.Translate(trx, 0);
367     paint.SetOpacity(OPARCITY_127); // 127: opacity
368     canvas->DrawImage({ 200, 50 }, GREEN_IMAGE_PATH, paint);
369 #if defined(GRAPHIC_ENABLE_DRAW_TEXT_FLAG) && GRAPHIC_ENABLE_DRAW_TEXT_FLAG
370     UICanvas::FontStyle fontStyle;
371     fontStyle.align = TEXT_ALIGNMENT_CENTER;
372     fontStyle.direct = TEXT_DIRECT_LTR;
373     fontStyle.fontName = DEFAULT_VECTOR_FONT_FILENAME;
374     fontStyle.fontSize = FONT_SIZE15;
375     fontStyle.letterSpace = FONT_LETTERSPACE2;
376     paint.SetFillColor(Color::Green());
377     canvas->StrokeText("CANVAS绘制图片", {0, 0}, fontStyle, paint);
378 #endif
379     paint.Translate(trx, 0);
380     canvas->DrawImage({0, 0}, GIF_IMAGE_PATH, paint);
381     canvas->DrawImage({0, 0}, GIF_IMAGE_PATH, paint, DRAWIMAGE_WIDTH, DRAWIMAGE_HEIGHT);
382 #endif
383 }
384 
UIKitCanvasTestDrawLabel001()385 void UITestCanvas::UIKitCanvasTestDrawLabel001()
386 {
387     if (container_ == nullptr) {
388         return;
389     }
390     CreateTitleLabel("绘制文字");
391     UICanvas* canvas = CreateCanvas();
392 
393     Paint paint;
394     paint.SetFillColor(Color::Blue());
395     UICanvas::FontStyle fontStyle;
396     fontStyle.align = TEXT_ALIGNMENT_RIGHT;
397     fontStyle.direct = TEXT_DIRECT_LTR;
398     fontStyle.fontName = DEFAULT_VECTOR_FONT_FILENAME;
399     fontStyle.fontSize = FONT_SIZE30;         // 30: font size
400     fontStyle.letterSpace = FONT_LETTERSPACE; // 10 letter space
401     // {50, 50}: start point coordinates, 100: max width
402     canvas->DrawLabel({LABEL_START50, LABEL_START50}, "canvas绘制字体", LABEL_WIDTH100, fontStyle, paint);
403 }
404 
UIKitCanvasTestDrawSector001()405 void UITestCanvas::UIKitCanvasTestDrawSector001()
406 {
407     if (container_ == nullptr) {
408         return;
409     }
410     CreateTitleLabel("扇形填充");
411     UICanvas* canvas = CreateCanvas();
412 
413     Paint paint;
414     paint.SetStyle(Paint::PaintStyle::FILL_STYLE);
415     paint.SetFillColor(Color::Yellow());
416     // {350, 150}: sector's center coordinates, 100: sector radius, 0: start angle, 30: end angle
417     canvas->DrawSector({START_X350, START_Y150}, ARC_R100, 0, END_ANGLE30, paint);
418 }
419 
UIKitCanvasTestClear001()420 void UITestCanvas::UIKitCanvasTestClear001()
421 {
422     if (container_ == nullptr) {
423         return;
424     }
425     CreateTitleLabel("清空画布,无显示");
426     UICanvas* canvas = CreateCanvas();
427 
428     Paint paint;
429     // {0, 10}: Start point coordinates x, y; {50, 10}: end point coordinates x, y
430     canvas->DrawLine({0, START_Y}, {TRANSLATE_X, START_Y}, paint);
431     canvas->Clear();
432 }
433 
UIKitCanvasTestDrawPath001()434 void UITestCanvas::UIKitCanvasTestDrawPath001()
435 {
436     if (container_ == nullptr) {
437         return;
438     }
439     CreateTitleLabel("moveTo,无显示");
440     UICanvas* canvas = CreateCanvas();
441 
442     Paint paint;
443     canvas->BeginPath();
444     canvas->MoveTo({START1_X, START1_Y});
445     canvas->ClosePath();
446     canvas->DrawPath(paint);
447 }
448 
UIKitCanvasTestDrawPath002()449 void UITestCanvas::UIKitCanvasTestDrawPath002()
450 {
451     if (container_ == nullptr) {
452         return;
453     }
454     CreateTitleLabel("lineTo,无显示");
455     UICanvas* canvas = CreateCanvas();
456 
457     Paint paint;
458     canvas->BeginPath();
459     canvas->LineTo({LINE1_X, LINE1_Y});
460     canvas->DrawPath(paint);
461 }
462 
UIKitCanvasTestDrawPath003()463 void UITestCanvas::UIKitCanvasTestDrawPath003()
464 {
465     if (container_ == nullptr) {
466         return;
467     }
468     CreateTitleLabel("arc");
469     UICanvas* canvas = CreateCanvas();
470 
471     Paint paint;
472     canvas->BeginPath();
473     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
474     canvas->DrawPath(paint);
475 }
476 
UIKitCanvasTestDrawPath004()477 void UITestCanvas::UIKitCanvasTestDrawPath004()
478 {
479     if (container_ == nullptr) {
480         return;
481     }
482     CreateTitleLabel("rect");
483     UICanvas* canvas = CreateCanvas();
484 
485     Paint paint;
486     canvas->BeginPath();
487     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
488     canvas->DrawPath(paint);
489 }
490 
UIKitCanvasTestDrawPath005()491 void UITestCanvas::UIKitCanvasTestDrawPath005()
492 {
493     if (container_ == nullptr) {
494         return;
495     }
496     CreateTitleLabel("closePath,无显示");
497     UICanvas* canvas = CreateCanvas();
498 
499     Paint paint;
500     canvas->BeginPath();
501     canvas->ClosePath();
502     canvas->DrawPath(paint);
503 }
504 
UIKitCanvasTestDrawPath006()505 void UITestCanvas::UIKitCanvasTestDrawPath006()
506 {
507     if (container_ == nullptr) {
508         return;
509     }
510     CreateTitleLabel("moveTo + lineTo");
511     UICanvas* canvas = CreateCanvas();
512 
513     Paint paint;
514     canvas->BeginPath();
515     canvas->MoveTo({START1_X, START1_Y});
516     canvas->LineTo({LINE1_X, LINE1_Y});
517     canvas->DrawPath(paint);
518 }
519 
UIKitCanvasTestDrawPath007()520 void UITestCanvas::UIKitCanvasTestDrawPath007()
521 {
522     if (container_ == nullptr) {
523         return;
524     }
525     CreateTitleLabel("moveTo + arc");
526     UICanvas* canvas = CreateCanvas();
527 
528     Paint paint;
529     canvas->BeginPath();
530     canvas->MoveTo({START1_X, START1_Y});
531     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
532     canvas->DrawPath(paint);
533 }
534 
UIKitCanvasTestDrawPath008()535 void UITestCanvas::UIKitCanvasTestDrawPath008()
536 {
537     if (container_ == nullptr) {
538         return;
539     }
540     CreateTitleLabel("moveTo + rect");
541     UICanvas* canvas = CreateCanvas();
542 
543     Paint paint;
544     canvas->BeginPath();
545     canvas->MoveTo({START1_X, START1_Y});
546     canvas->AddRect({RECT_X, RECT_Y}, RECT_WIDTH, RECT_HEIGHT);
547     canvas->DrawPath(paint);
548 }
549 
UIKitCanvasTestDrawPath009()550 void UITestCanvas::UIKitCanvasTestDrawPath009()
551 {
552     if (container_ == nullptr) {
553         return;
554     }
555     CreateTitleLabel("moveTo + closePath");
556     UICanvas* canvas = CreateCanvas();
557 
558     Paint paint;
559     canvas->BeginPath();
560     canvas->MoveTo({START1_X, START1_Y});
561     canvas->LineTo({LINE1_X, LINE1_Y});
562     canvas->LineTo({LINE2_X, LINE2_Y});
563     canvas->ClosePath();
564     canvas->DrawPath(paint);
565 }
566 
UIKitCanvasTestDrawPath010()567 void UITestCanvas::UIKitCanvasTestDrawPath010()
568 {
569     if (container_ == nullptr) {
570         return;
571     }
572     CreateTitleLabel("闭合路径调用closePath");
573     UICanvas* canvas = CreateCanvas();
574 
575     Paint paint;
576     canvas->BeginPath();
577     canvas->MoveTo({START1_X, START1_Y});
578     canvas->LineTo({LINE1_X, LINE1_Y});
579     canvas->LineTo({LINE2_X, LINE2_Y});
580     canvas->LineTo({START1_X, START1_Y});
581     canvas->ClosePath();
582     canvas->DrawPath(paint);
583 }
584 
UIKitCanvasTestDrawPath011()585 void UITestCanvas::UIKitCanvasTestDrawPath011()
586 {
587     if (container_ == nullptr) {
588         return;
589     }
590     CreateTitleLabel("moveTo + lineTo + moveTo + lineTo");
591     UICanvas* canvas = CreateCanvas();
592 
593     Paint paint;
594     canvas->BeginPath();
595     canvas->MoveTo({START1_X, START1_Y});
596     canvas->LineTo({LINE1_X, LINE1_Y});
597     canvas->MoveTo({START2_X, START2_Y});
598     canvas->LineTo({LINE2_X, LINE2_Y});
599     canvas->DrawPath(paint);
600 }
601 
UIKitCanvasTestDrawPath012()602 void UITestCanvas::UIKitCanvasTestDrawPath012()
603 {
604     if (container_ == nullptr) {
605         return;
606     }
607     CreateTitleLabel("moveTo + lineTo + arc");
608     UICanvas* canvas = CreateCanvas();
609 
610     Paint paint;
611     canvas->BeginPath();
612     canvas->MoveTo({START1_X, START1_Y});
613     canvas->LineTo({LINE1_X, LINE1_Y});
614     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
615     canvas->DrawPath(paint);
616 }
617 
UIKitCanvasTestDrawPath013()618 void UITestCanvas::UIKitCanvasTestDrawPath013()
619 {
620     if (container_ == nullptr) {
621         return;
622     }
623     CreateTitleLabel("moveTo + lineTo + arc + closePath");
624     UICanvas* canvas = CreateCanvas();
625 
626     Paint paint;
627     canvas->BeginPath();
628     canvas->MoveTo({START1_X, START1_Y});
629     canvas->LineTo({LINE1_X, LINE1_Y});
630     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
631     canvas->ClosePath();
632     canvas->DrawPath(paint);
633 }
634 
UIKitCanvasTestDrawPath014()635 void UITestCanvas::UIKitCanvasTestDrawPath014()
636 {
637     if (container_ == nullptr) {
638         return;
639     }
640     CreateTitleLabel("moveTo + lineTo + rect");
641     UICanvas* canvas = CreateCanvas();
642 
643     Paint paint;
644     canvas->BeginPath();
645     canvas->MoveTo({START1_X, START1_Y});
646     canvas->LineTo({LINE1_X, LINE1_Y});
647     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
648     canvas->DrawPath(paint);
649 }
650 
UIKitCanvasTestDrawPath015()651 void UITestCanvas::UIKitCanvasTestDrawPath015()
652 {
653     if (container_ == nullptr) {
654         return;
655     }
656     CreateTitleLabel("moveTo + lineTo + rect + closePath");
657     UICanvas* canvas = CreateCanvas();
658 
659     Paint paint;
660     canvas->BeginPath();
661     canvas->MoveTo({START1_X, START1_Y});
662     canvas->LineTo({LINE1_X, LINE1_Y});
663     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
664     canvas->ClosePath();
665     canvas->DrawPath(paint);
666 }
667 
UIKitCanvasTestDrawPath016()668 void UITestCanvas::UIKitCanvasTestDrawPath016()
669 {
670     if (container_ == nullptr) {
671         return;
672     }
673     CreateTitleLabel("rect + lineTo");
674     UICanvas* canvas = CreateCanvas();
675 
676     Paint paint;
677     canvas->BeginPath();
678     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
679     canvas->LineTo({LINE1_X, LINE1_Y});
680     canvas->DrawPath(paint);
681 }
682 
UIKitCanvasTestDrawPath017()683 void UITestCanvas::UIKitCanvasTestDrawPath017()
684 {
685     if (container_ == nullptr) {
686         return;
687     }
688     CreateTitleLabel("rect + moveTo + lineTo");
689     UICanvas* canvas = CreateCanvas();
690 
691     Paint paint;
692     canvas->BeginPath();
693     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
694     canvas->MoveTo({START1_X, START1_Y});
695     canvas->LineTo({LINE1_X, LINE1_Y});
696     canvas->DrawPath(paint);
697 }
698 
UIKitCanvasTestDrawPath018()699 void UITestCanvas::UIKitCanvasTestDrawPath018()
700 {
701     if (container_ == nullptr) {
702         return;
703     }
704     CreateTitleLabel("rect + arc");
705     UICanvas* canvas = CreateCanvas();
706 
707     Paint paint;
708     canvas->BeginPath();
709     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
710     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
711     canvas->DrawPath(paint);
712 }
713 
UIKitCanvasTestDrawPath019()714 void UITestCanvas::UIKitCanvasTestDrawPath019()
715 {
716     if (container_ == nullptr) {
717         return;
718     }
719     CreateTitleLabel("arc + rect");
720     UICanvas* canvas = CreateCanvas();
721 
722     Paint paint;
723     canvas->BeginPath();
724     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
725     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
726     canvas->DrawPath(paint);
727 }
728 
UIKitCanvasTestDrawPath020()729 void UITestCanvas::UIKitCanvasTestDrawPath020()
730 {
731     if (container_ == nullptr) {
732         return;
733     }
734     CreateTitleLabel("moveTo + arc + closePath + lineTo");
735     UICanvas* canvas = CreateCanvas();
736 
737     Paint paint;
738     canvas->BeginPath();
739     canvas->MoveTo({START1_X, START1_Y});
740     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
741     canvas->ClosePath();
742     canvas->LineTo({LINE1_X, LINE1_Y});
743     canvas->DrawPath(paint);
744 }
745 
UIKitCanvasTestDrawPath021()746 void UITestCanvas::UIKitCanvasTestDrawPath021()
747 {
748     if (container_ == nullptr) {
749         return;
750     }
751     CreateTitleLabel("不调用beginPath,无显示");
752     UICanvas* canvas = CreateCanvas();
753 
754     Paint paint;
755     canvas->MoveTo({START1_X, START1_Y});
756     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
757     canvas->ClosePath();
758     canvas->LineTo({LINE1_X, LINE1_Y});
759     canvas->DrawPath(paint);
760 }
761 
UIKitCanvasTestDrawPath022()762 void UITestCanvas::UIKitCanvasTestDrawPath022()
763 {
764     if (container_ == nullptr) {
765         return;
766     }
767     CreateTitleLabel("不调用drawPath,无显示");
768     UICanvas* canvas = CreateCanvas();
769 
770     Paint paint;
771     canvas->BeginPath();
772     canvas->MoveTo({START1_X, START1_Y});
773     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
774     canvas->ClosePath();
775     canvas->LineTo({LINE1_X, LINE1_Y});
776 }
777 
UIKitCanvasTestDrawPath023()778 void UITestCanvas::UIKitCanvasTestDrawPath023()
779 {
780     if (container_ == nullptr) {
781         return;
782     }
783     CreateTitleLabel("moveTo + lineTo + closePath");
784     UICanvas* canvas = CreateCanvas();
785 
786     Paint paint;
787     canvas->BeginPath();
788     canvas->MoveTo({START1_X, START1_Y});
789     canvas->LineTo({LINE1_X, LINE1_Y});
790     canvas->ClosePath();
791     canvas->DrawPath(paint);
792 }
793 
UIKitCanvasTestDrawPath024()794 void UITestCanvas::UIKitCanvasTestDrawPath024()
795 {
796     if (container_ == nullptr) {
797         return;
798     }
799     CreateTitleLabel("moveTo + closePath,无显示");
800     UICanvas* canvas = CreateCanvas();
801 
802     Paint paint;
803     canvas->BeginPath();
804     canvas->MoveTo({START1_X, START1_Y});
805     canvas->ClosePath();
806     canvas->DrawPath(paint);
807 }
808 
UIKitCanvasTestDrawPath025()809 void UITestCanvas::UIKitCanvasTestDrawPath025()
810 {
811     if (container_ == nullptr) {
812         return;
813     }
814     CreateTitleLabel("多次drawPath");
815     UICanvas* canvas = CreateCanvas();
816 
817     Paint paint;
818     canvas->BeginPath();
819     canvas->MoveTo({START1_X, START1_Y});
820     canvas->LineTo({LINE1_X, LINE1_Y});
821     canvas->DrawPath(paint);
822     paint.SetStrokeColor(Color::Blue());
823     paint.SetStrokeWidth(1);
824     canvas->LineTo({LINE2_X, LINE2_Y});
825     canvas->DrawPath(paint);
826 }
827 
UIKitCanvasTestDrawPath026()828 void UITestCanvas::UIKitCanvasTestDrawPath026()
829 {
830     if (container_ == nullptr) {
831         return;
832     }
833     CreateTitleLabel("arc起止角度互换");
834     UICanvas* canvas = CreateCanvas();
835 
836     Paint paint;
837     canvas->BeginPath();
838     canvas->MoveTo({START1_X, START1_Y});
839     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
840 
841     canvas->MoveTo({START2_X, START2_Y});
842     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, END_ANGLE, START_ANGLE);
843 
844     canvas->DrawPath(paint);
845 }
846 
UIKitCanvasTestDrawPath027()847 void UITestCanvas::UIKitCanvasTestDrawPath027()
848 {
849     if (container_ == nullptr) {
850         return;
851     }
852     CreateTitleLabel("arc扫描范围超过360度 ");
853     UICanvas* canvas = CreateCanvas();
854 
855     Paint paint;
856     canvas->BeginPath();
857     canvas->MoveTo({START1_X, START1_Y});
858     canvas->ArcTo({CENTER_X, CENTER_Y},
859                   RADIUS, START_ANGLE, START_ANGLE + CIRCLE_IN_DEGREE + QUARTER_IN_DEGREE);
860     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, END_ANGLE,
861                   START_ANGLE + CIRCLE_IN_DEGREE);
862 
863     canvas->DrawPath(paint);
864 }
865 
UIKitCanvasTestDrawPath028()866 void UITestCanvas::UIKitCanvasTestDrawPath028()
867 {
868     if (container_ == nullptr) {
869         return;
870     }
871     CreateTitleLabel("创建两条路径,只绘制后一条 ");
872     UICanvas* canvas = CreateCanvas();
873 
874     Paint paint;
875     canvas->BeginPath();
876     canvas->MoveTo({START1_X, START1_Y});
877     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, START_ANGLE + CIRCLE_IN_DEGREE);
878 
879     canvas->BeginPath();
880     canvas->MoveTo({START2_X, START2_Y});
881     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, END_ANGLE,
882                   START_ANGLE + CIRCLE_IN_DEGREE);
883 
884     canvas->DrawPath(paint);
885 }
886 
UIKitCanvasTestDrawPath029()887 void UITestCanvas::UIKitCanvasTestDrawPath029()
888 {
889     if (container_ == nullptr) {
890         return;
891     }
892     CreateTitleLabel("绘制两条不同样式的路径 ");
893     UICanvas* canvas = CreateCanvas();
894 
895     Paint paint;
896     canvas->BeginPath();
897     canvas->MoveTo({START1_X, START1_Y});
898     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, START_ANGLE + CIRCLE_IN_DEGREE);
899     canvas->DrawPath(paint);
900 
901     canvas->BeginPath();
902     canvas->MoveTo({START2_X, START2_Y});
903     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, END_ANGLE,
904                   START_ANGLE + CIRCLE_IN_DEGREE);
905     paint.SetStrokeColor(Color::Blue());
906     canvas->DrawPath(paint);
907 }
908 
UIKitCanvasTestDrawPath030()909 void UITestCanvas::UIKitCanvasTestDrawPath030()
910 {
911     if (container_ == nullptr) {
912         return;
913     }
914     CreateTitleLabel("同一条路径绘制100遍 ");
915     UICanvas* canvas = CreateCanvas();
916 
917     Paint paint;
918     canvas->BeginPath();
919     canvas->MoveTo({START1_X, START1_Y});
920     canvas->LineTo({LINE1_X, LINE1_Y});
921     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, START_ANGLE + CIRCLE_IN_DEGREE);
922     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
923     for (uint8_t i = 0; i < 100; i++) { // 100: number of times for drawing loops
924         canvas->DrawPath(paint);
925     }
926 }
927 
UIKitCanvasTestDrawPath031()928 void UITestCanvas::UIKitCanvasTestDrawPath031()
929 {
930     if (container_ == nullptr) {
931         return;
932     }
933     CreateTitleLabel("绘制直线超出canvas范围");
934     UICanvas* canvas = CreateCanvas();
935 
936     Paint paint;
937     canvas->BeginPath();
938     canvas->MoveTo({START1_X, START1_Y});
939     canvas->LineTo({int16_t(LINE1_X + HORIZONTAL_RESOLUTION), LINE1_Y});
940     canvas->LineTo({LINE2_X, LINE2_Y});
941     canvas->DrawPath(paint);
942 }
943 
UIKitCanvasTestDrawPath032()944 void UITestCanvas::UIKitCanvasTestDrawPath032()
945 {
946     if (container_ == nullptr) {
947         return;
948     }
949     CreateTitleLabel("绘制直线传入临界值 ");
950     UICanvas* canvas = CreateCanvas();
951 
952     Paint paint;
953     canvas->BeginPath();
954     canvas->MoveTo({INT16_MAX, INT16_MAX});
955     canvas->LineTo({0, 0});
956 
957     canvas->MoveTo({0, 0});
958     canvas->LineTo({INT16_MAX, INT16_MAX});
959 
960     canvas->MoveTo({INT16_MIN, INT16_MIN});
961     canvas->LineTo({0, 0});
962 
963     canvas->MoveTo({0, 0});
964     canvas->LineTo({INT16_MIN, INT16_MIN});
965     canvas->DrawPath(paint);
966 }
967 
UIKitCanvasTestDrawPath033()968 void UITestCanvas::UIKitCanvasTestDrawPath033()
969 {
970     if (container_ == nullptr) {
971         return;
972     }
973 
974     CreateTitleLabel("绘制arc传入临界值 ");
975     UICanvas* canvas = CreateCanvas();
976 
977     Paint paint;
978     canvas->BeginPath();
979     canvas->ArcTo({INT16_MAX, INT16_MAX}, RADIUS, START_ANGLE, END_ANGLE);
980     canvas->DrawPath(paint);
981 
982     canvas->BeginPath();
983     canvas->ArcTo({INT16_MIN, INT16_MIN}, RADIUS, START_ANGLE, END_ANGLE);
984     paint.SetStrokeColor(Color::Red());
985     canvas->DrawPath(paint);
986 
987     canvas->BeginPath();
988     canvas->ArcTo({CENTER_X, CENTER_Y}, UINT16_MAX, START_ANGLE, END_ANGLE);
989     paint.SetStrokeColor(Color::Yellow());
990     canvas->DrawPath(paint);
991 
992     canvas->BeginPath();
993     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, INT16_MIN, INT16_MAX);
994     paint.SetStrokeColor(Color::Blue());
995     canvas->DrawPath(paint);
996 }
997 
UIKitCanvasTestDrawPath034()998 void UITestCanvas::UIKitCanvasTestDrawPath034()
999 {
1000     if (container_ == nullptr) {
1001         return;
1002     }
1003 
1004     CreateTitleLabel("绘制rect传入临界值 ");
1005     UICanvas* canvas = CreateCanvas();
1006 
1007     Paint paint;
1008     canvas->BeginPath();
1009     canvas->AddRect({INT16_MAX, INT16_MAX}, RECT_HEIGHT, RECT_WIDTH);
1010     canvas->DrawPath(paint);
1011 
1012     canvas->BeginPath();
1013     canvas->AddRect({RECT_X, RECT_Y}, INT16_MAX, INT16_MAX);
1014     paint.SetStrokeColor(Color::Red());
1015     canvas->DrawPath(paint);
1016 }
1017 
DrawLineSegment(UICanvas * canvas,const int16_t line1,const int16_t line2,const int16_t line3,const int16_t line4)1018 void UITestCanvas::DrawLineSegment(UICanvas *canvas, const int16_t line1,
1019                                    const int16_t line2, const int16_t line3, const int16_t line4)
1020 {
1021     Paint paint;
1022     canvas->BeginPath();
1023     canvas->MoveTo({line1, line2});
1024     canvas->LineTo({line3, line4});
1025     canvas->DrawPath(paint);
1026 }
1027 
RM009LineCapDrawPath()1028 void UITestCanvas::RM009LineCapDrawPath()
1029 {
1030     if (container_ == nullptr) {
1031         return;
1032     }
1033 
1034     CreateTitleLabel("RM009LineCap_平直的边缘_正方形_圆形线帽");
1035     UICanvas* canvas = CreateCanvas();
1036     Paint paint;
1037     paint.SetStrokeWidth(STROKE_WIDTH12);
1038     paint.SetStrokeColor(Color::Green());
1039 #if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG
1040     paint.SetLineCap(LineCap::BUTT_CAP);
1041 #endif
1042     DrawLineSegment(canvas, LINE11_X, LINE13_Y, LINE11_X, LINE11_Y); /* 竖线 */
1043     DrawLineSegment(canvas, LINE11_X, LINE1_Y, LINE17_X, LINE1_Y); /* 横线 */
1044     DrawLineSegment(canvas, LINE26_Y, LINE25_Y, LINE18_X, LINE1_Y); /* 斜线 */
1045     paint.SetStrokeColor(Color::Red());
1046 #if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG
1047     paint.SetLineCap(LineCap::SQUARE_CAP);
1048 #endif
1049     DrawLineSegment(canvas, LINE1_X, LINE13_Y, LINE19_X, LINE11_Y); /* 竖线 */
1050     DrawLineSegment(canvas, LINE11_X, LINE26_X, LINE17_X, LINE2_Y); /* 横线 */
1051     DrawLineSegment(canvas, LINE28_X, LINE25_Y, LINE21_X, LINE1_Y); /* 斜线 */
1052     paint.SetStrokeColor(Color::Blue());
1053 #if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG
1054     paint.SetLineCap(LineCap::ROUND_CAP);
1055 #endif
1056     DrawLineSegment(canvas, LINE22_X, LINE13_Y, LINE22_X, LINE11_Y); /* 竖线 */
1057     DrawLineSegment(canvas, LINE11_X, LINE23_Y, LINE17_X, LINE23_Y); /* 横线 */
1058     DrawLineSegment(canvas, LINE18_X, LINE25_Y, LINE24_X, LINE1_Y); /* 斜线 */
1059 }
1060 
RM009LineJoinDrawPath()1061 void UITestCanvas::RM009LineJoinDrawPath()
1062 {
1063     if (container_ == nullptr) {
1064         return;
1065     }
1066     CreateTitleLabel("RM009LineJoin_圆角_斜角_尖角_限制尖角长度");
1067     UICanvas* canvas = CreateCanvas();
1068 
1069     Paint paint;
1070     paint.SetStrokeWidth(STROKE_WIDTH10);
1071     paint.SetStrokeColor(Color::Green());
1072 #if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
1073     paint.SetLineJoin(LineJoin::ROUND_JOIN);
1074 #endif
1075     canvas->BeginPath();
1076     canvas->MoveTo({LINE11_X, LINE13_Y});
1077     canvas->LineTo({LINE11_X, LINE11_Y});
1078     canvas->LineTo({LINE25_X, LINE25_X});
1079     canvas->LineTo({LINE22_X, LINE11_Y});
1080     canvas->DrawPath(paint);
1081 #if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
1082     paint.SetLineJoin(LineJoin::BEVEL_JOIN);
1083 #endif
1084     canvas->BeginPath();
1085     canvas->MoveTo({LINE1_Y, LINE13_Y});
1086     canvas->LineTo({LINE2_X, LINE11_Y});
1087     canvas->LineTo({LINE26_X, LINE25_Y});
1088     canvas->LineTo({LINE27_X, LINE11_Y});
1089     canvas->DrawPath(paint);
1090 #if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
1091     paint.SetLineJoin(LineJoin::MITER_JOIN);
1092 #endif
1093     canvas->BeginPath();
1094     canvas->MoveTo({LINE14_X, LINE13_Y});
1095     canvas->LineTo({LINE14_X, LINE11_Y});
1096     canvas->LineTo({LINE28_X, LINE25_Y});
1097     canvas->LineTo({LINE29_X, LINE11_Y});
1098     canvas->DrawPath(paint);
1099 #if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
1100     // 当斜接角度超过MiterLimit时应该转化为平角
1101     paint.SetLineJoin(LineJoin::MITER_JOIN);
1102     paint.SetMiterLimit(MITERLIMIT4);
1103 #endif
1104 
1105     canvas->BeginPath();
1106     canvas->MoveTo({LINE21_X, LINE13_Y});
1107     canvas->LineTo({LINE21_X, LINE11_Y});
1108     canvas->LineTo({LINE30_X, LINE25_Y});
1109     canvas->LineTo({LINE31_X, LINE25_Y});
1110     canvas->DrawPath(paint);
1111 }
RM009LineDashDrawPath()1112 void UITestCanvas::RM009LineDashDrawPath()
1113 {
1114 #if defined(GRAPHIC_ENABLE_DASH_GENERATE_FLAG) && GRAPHIC_ENABLE_DASH_GENERATE_FLAG
1115     if (container_ == nullptr) {
1116         return;
1117     }
1118     CreateTitleLabel("RM009LineDash_虚实线(10,5,5,2)_更改虚实线起点的偏移量(5)");
1119     UICanvas* canvas = CreateCanvas();
1120     Paint paint;
1121     paint.SetStrokeWidth(DASH_LINE_WIDTH2);
1122     paint.SetStrokeColor(Color::Green());
1123     float ds2[] = {DASH10, DASH5, DASH5, DASH2};
1124     paint.SetLineDash(ds2, DASH_COUNT);
1125     canvas->BeginPath();
1126     canvas->MoveTo({MOVETO20, MOVETO20});
1127     canvas->LineTo({LINET0200, MOVETO20});
1128     canvas->LineTo({LINET0200, LINET080});
1129     canvas->LineTo({LINET020, LINET080});
1130     canvas->ClosePath();
1131     canvas->DrawPath(paint);
1132 
1133     paint.SetLineDashOffset(LINE_DASH_OFFSET5);
1134     canvas->BeginPath();
1135     canvas->MoveTo({MOVETO20, LINET0120});
1136     canvas->LineTo({LINET0200, LINET0120});
1137     canvas->LineTo({LINET0200, LINET0180});
1138     canvas->LineTo({LINET020, LINET0180});
1139     canvas->ClosePath();
1140     canvas->DrawPath(paint);
1141 #endif
1142 }
1143 
1144 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
RM009StrokeAndClearRectDrawPath()1145 void UITestCanvas::RM009StrokeAndClearRectDrawPath()
1146 {
1147     if (container_ == nullptr) {
1148         return;
1149     }
1150     CreateTitleLabel("RM009_StrokeRect_ClearRect");
1151     UICanvas* canvas = CreateCanvas();
1152     Paint paint;
1153     paint.SetStrokeWidth(STROKEWIDTH2);
1154     paint.SetStrokeColor(Color::Orange());
1155     canvas->StrokeRect({START1_X, START1_Y}, RECT40, RECT50, paint);
1156 
1157     paint.SetFillColor(Color::Red());
1158     canvas->BeginPath();
1159     canvas->MoveTo({MOVETO30, MOVETO60});
1160     canvas->LineTo({LINET0200, MOVETO60});
1161     canvas->LineTo({LINET0200, LINET0200});
1162     canvas->LineTo({MOVETO30, LINET0200});
1163     canvas->ClosePath();
1164     canvas->FillPath(paint);
1165 
1166     canvas->ClearRect({RECT50, RECT80}, RECT100, RECT70);
1167 }
1168 
RM008UIKitCanvasTest001()1169 void UITestCanvas::RM008UIKitCanvasTest001()
1170 {
1171     if (container_ == nullptr) {
1172         return;
1173     }
1174     CreateTitleLabel("RM008_FillStyle_Solid_单色绘制多边形和填充多边形");
1175     UICanvas* canvas = CreateCanvas();
1176     Paint paint;
1177 
1178     paint.SetStyle(Paint::STROKE_FILL_STYLE);
1179     paint.SetStrokeWidth(STROKEWIDTH2);
1180     paint.SetStrokeColor(Color::Orange());
1181     paint.SetFillColor(Color::Blue());
1182     canvas->BeginPath();
1183 
1184     canvas->MoveTo({LINE11_X, LINE13_Y});
1185     canvas->LineTo({LINE22_X, LINE11_Y});
1186     canvas->LineTo({LINE26_X, LINE13_Y});
1187     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1188     canvas->LineTo({LINE26_X, LINE26_Y});
1189     canvas->LineTo({LINE4_X, LINE2_Y});
1190     canvas->LineTo({LINE11_X, LINE27_Y});
1191     canvas->LineTo({LINE3_X, LINE11_Y});
1192     canvas->ClosePath();
1193     canvas->FillPath(paint);
1194     canvas->DrawPath(paint);
1195 }
1196 
RM008UIKitCanvasTest002()1197 void UITestCanvas::RM008UIKitCanvasTest002()
1198 {
1199     if (container_ == nullptr) {
1200         return;
1201     }
1202     CreateTitleLabel("RM008_FillStyle_RM_013_Gradient_渐变填充多边形");
1203     UICanvas* canvas = CreateCanvas();
1204     Paint paint;
1205     paint.SetStyle(Paint::GRADIENT);
1206     // 线性渐变
1207 #if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG
1208     paint.createLinearGradient(LINEARGRADIENT50, LINEARGRADIENT50, LINEARGRADIENT150, LINEARGRADIENT150);
1209     paint.addColorStop(0, Color::Yellow());
1210     paint.addColorStop(COLOR_STOP3, Color::White());
1211     paint.addColorStop(COLOR_STOP6, Color::Green());
1212     paint.addColorStop(1, Color::Blue());
1213 #endif
1214     canvas->BeginPath();
1215     canvas->MoveTo({LINE11_X, LINE13_Y});
1216     canvas->LineTo({LINE22_X, LINE11_Y});
1217     canvas->LineTo({LINE26_X, LINE13_Y});
1218     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1219     canvas->LineTo({LINE26_X, LINE26_Y});
1220     canvas->LineTo({LINE4_X, LINE2_Y});
1221     canvas->LineTo({LINE11_X, LINE27_Y});
1222     canvas->LineTo({LINE3_X, LINE11_Y});
1223     canvas->ClosePath();
1224     canvas->FillPath(paint);
1225     // 放射渐变
1226 #if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG
1227     paint.createRadialGradient(RADIAL_GRADIENT300, RADIAL_GRADIENT140, RADIAL_GRADIENT5,
1228                                RADIAL_GRADIENT270, RADIAL_GRADIENT100, RADIAL_GRADIENT80);
1229 #endif
1230     canvas->BeginPath();
1231 
1232     canvas->MoveTo({LINE9_X, LINE13_Y});
1233     canvas->LineTo({LINE32_X, LINE11_Y});
1234     canvas->LineTo({LINE31_X, LINE13_Y});
1235     canvas->ArcTo({LINE31_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1236     canvas->LineTo({LINE31_X, LINE26_Y});
1237     canvas->LineTo({LINE21_X, LINE2_Y});
1238     canvas->LineTo({LINE9_X, LINE27_Y});
1239     canvas->LineTo({LINE33_X, LINE11_Y});
1240     canvas->ClosePath();
1241     canvas->FillPath(paint);
1242 }
1243 #endif
1244 
RM008UIKitCanvasTest003()1245 void UITestCanvas::RM008UIKitCanvasTest003()
1246 {
1247     if (container_ == nullptr) {
1248         return;
1249     }
1250     CreateTitleLabel("RM008_StrokeStyle_RM_013_Gradient_渐变绘制多边形路径");
1251     UICanvas* canvas = CreateCanvas();
1252     Paint paint;
1253     paint.SetStyle(Paint::GRADIENT);
1254     paint.SetStrokeWidth(STROKE_WIDTH8);
1255     // 线性渐变
1256 #if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG
1257     paint.createLinearGradient(LINEARGRADIENT50, LINEARGRADIENT50, LINEARGRADIENT150, LINEARGRADIENT150);
1258     paint.addColorStop(0, Color::Yellow());
1259     paint.addColorStop(COLOR_STOP3, Color::White());
1260     paint.addColorStop(COLOR_STOP6, Color::Green());
1261     paint.addColorStop(1, Color::Blue());
1262 #endif
1263     canvas->BeginPath();
1264     canvas->MoveTo({LINE11_X, LINE13_Y});
1265     canvas->LineTo({LINE22_X, LINE11_Y});
1266     canvas->LineTo({LINE26_X, LINE13_Y});
1267     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1268     canvas->LineTo({LINE26_X, LINE26_Y});
1269     canvas->LineTo({LINE4_X, LINE2_Y});
1270     canvas->LineTo({LINE11_X, LINE27_Y});
1271     canvas->LineTo({LINE3_X, LINE11_Y});
1272     canvas->ClosePath();
1273     canvas->DrawPath(paint);
1274     // 放射渐变
1275 #if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG
1276     paint.createRadialGradient(LINEARGRADIENT300, LINEARGRADIENT140, LINEARGRADIENT5,
1277                                LINEARGRADIENT270, LINEARGRADIENT100, LINEARGRADIENT80);
1278 #endif
1279     canvas->BeginPath();
1280     canvas->MoveTo({LINE9_X, LINE13_Y});
1281     canvas->LineTo({LINE32_X, LINE11_Y});
1282     canvas->LineTo({LINE31_X, LINE13_Y});
1283     canvas->ArcTo({LINE31_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1284     canvas->LineTo({LINE31_X, LINE26_Y});
1285     canvas->LineTo({LINE21_X, LINE2_Y});
1286     canvas->LineTo({LINE9_X, LINE27_Y});
1287     canvas->LineTo({LINE33_X, LINE11_Y});
1288     canvas->ClosePath();
1289     canvas->DrawPath(paint);
1290 }
1291 
1292 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
RM008UIKitCanvasTest004()1293 void UITestCanvas::RM008UIKitCanvasTest004()
1294 {
1295     if (container_ == nullptr) {
1296         return;
1297     }
1298     CreateTitleLabel("RM008_Pattern_模式REPEAT(图像)绘制多边形路径和填充");
1299     UICanvas* canvas = CreateCanvas();
1300     Paint paint;
1301     paint.SetStyle(Paint::PATTERN);
1302     paint.SetStrokeWidth(STROKEWIDTH8);
1303 #if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG
1304     paint.CreatePattern(RED_IMAGE_PATH, REPEAT);
1305 #endif
1306     canvas->BeginPath();
1307     canvas->MoveTo({LINE11_X, LINE13_Y});
1308     canvas->LineTo({LINE22_X, LINE11_Y});
1309     canvas->LineTo({LINE26_X, LINE13_Y});
1310     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1311     canvas->LineTo({LINE26_X, LINE26_Y});
1312     canvas->LineTo({LINE4_X, LINE2_Y});
1313     canvas->LineTo({LINE11_X, LINE27_Y});
1314     canvas->LineTo({LINE3_X, LINE11_Y});
1315     canvas->ClosePath();
1316     canvas->DrawPath(paint);
1317 
1318     canvas->BeginPath();
1319     canvas->MoveTo({LINE9_X, LINE13_Y});
1320     canvas->LineTo({LINE32_X, LINE11_Y});
1321     canvas->LineTo({LINE31_X, LINE13_Y});
1322     canvas->ArcTo({LINE31_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1323     canvas->LineTo({LINE31_X, LINE26_Y});
1324     canvas->LineTo({LINE21_X, LINE2_Y});
1325     canvas->LineTo({LINE9_X, LINE27_Y});
1326     canvas->LineTo({LINE33_X, LINE11_Y});
1327     canvas->ClosePath();
1328     canvas->FillPath(paint);
1329 }
RM008UIKitCanvasTest005()1330 void UITestCanvas::RM008UIKitCanvasTest005()
1331 {
1332     if (container_ == nullptr) {
1333         return;
1334     }
1335     CreateTitleLabel("RM008_Pattern_模式REPEAT_X(图像)绘制多边形路径和填充");
1336     UICanvas* canvas = CreateCanvas();
1337     Paint paint;
1338     paint.SetStyle(Paint::PATTERN);
1339     paint.SetStrokeWidth(STROKEWIDTH8);
1340 #if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG
1341     paint.CreatePattern(RED_IMAGE_PATH, REPEAT_X);
1342 #endif
1343     canvas->BeginPath();
1344 
1345     canvas->MoveTo({LINE11_X, LINE13_Y});
1346     canvas->LineTo({LINE22_X, LINE11_Y});
1347     canvas->LineTo({LINE26_X, LINE13_Y});
1348     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1349     canvas->LineTo({LINE26_X, LINE26_Y});
1350     canvas->LineTo({LINE4_X, LINE2_Y});
1351     canvas->LineTo({LINE11_X, LINE27_Y});
1352     canvas->LineTo({LINE3_X, LINE11_Y});
1353     canvas->ClosePath();
1354     canvas->DrawPath(paint);
1355 
1356     canvas->BeginPath();
1357     canvas->MoveTo({LINE9_X, LINE13_Y});
1358     canvas->LineTo({LINE32_X, LINE11_Y});
1359     canvas->LineTo({LINE31_X, LINE13_Y});
1360     canvas->ArcTo({LINE31_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1361     canvas->LineTo({LINE31_X, LINE26_Y});
1362     canvas->LineTo({LINE21_X, LINE2_Y});
1363     canvas->LineTo({LINE9_X, LINE27_Y});
1364     canvas->LineTo({LINE33_X, LINE11_Y});
1365     canvas->ClosePath();
1366     canvas->FillPath(paint);
1367 }
RM008UIKitCanvasTest006()1368 void UITestCanvas::RM008UIKitCanvasTest006()
1369 {
1370     if (container_ == nullptr) {
1371         return;
1372     }
1373     CreateTitleLabel("RM008_Pattern_模式REPEAT_Y(图像)绘制多边形路径和填充");
1374     UICanvas* canvas = CreateCanvas();
1375     Paint paint;
1376     paint.SetStyle(Paint::PATTERN);
1377     paint.SetStrokeWidth(STROKEWIDTH8);
1378 #if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG
1379     paint.CreatePattern(RED_IMAGE_PATH, REPEAT_Y);
1380 #endif
1381     canvas->BeginPath();
1382     canvas->MoveTo({LINE11_X, LINE13_Y});
1383     canvas->LineTo({LINE11_X, LINE10_Y});
1384     canvas->LineTo({LINE28_X, LINE10_Y});
1385     canvas->LineTo({LINE28_X, LINE13_Y});
1386     canvas->ClosePath();
1387     canvas->DrawPath(paint);
1388 
1389     canvas->BeginPath();
1390     canvas->MoveTo({LINE11_X, LINE11_Y});
1391     canvas->LineTo({LINE11_X, LINE26_Y});
1392     canvas->LineTo({LINE28_X, LINE26_Y});
1393     canvas->LineTo({LINE28_X, LINE11_Y});
1394     canvas->ClosePath();
1395     canvas->FillPath(paint);
1396 }
RM008UIKitCanvasTest007()1397 void UITestCanvas::RM008UIKitCanvasTest007()
1398 {
1399     if (container_ == nullptr) {
1400         return;
1401     }
1402     CreateTitleLabel("RM008_Pattern_模式NO_REPEAT(图像)绘制多边形路径和填充");
1403     UICanvas* canvas = CreateCanvas();
1404     Paint paint;
1405     paint.SetStyle(Paint::PATTERN);
1406     paint.SetStrokeWidth(STROKEWIDTH8);
1407 #if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG
1408     paint.CreatePattern(RED_IMAGE_PATH, NO_REPEAT);
1409 #endif
1410     canvas->BeginPath();
1411     canvas->MoveTo({LINE11_X, LINE13_Y});
1412     canvas->LineTo({LINE11_X, LINE10_Y});
1413     canvas->LineTo({LINE28_X, LINE10_Y});
1414     canvas->LineTo({LINE28_X, LINE13_Y});
1415     canvas->ClosePath();
1416     canvas->DrawPath(paint);
1417 
1418     canvas->BeginPath();
1419     canvas->MoveTo({LINE11_X, LINE11_Y});
1420     canvas->LineTo({LINE11_X, LINE26_Y});
1421     canvas->LineTo({LINE28_X, LINE26_Y});
1422     canvas->LineTo({LINE28_X, LINE11_Y});
1423     canvas->ClosePath();
1424     canvas->FillPath(paint);
1425 }
1426 
DrawRectangle(UICanvas * canvas,const int16_t line1,const int16_t line2,const int16_t line3,const int16_t line4)1427 void DrawRectangle(UICanvas *canvas, const int16_t line1,
1428                    const int16_t line2, const int16_t line3, const int16_t line4)
1429 {
1430     canvas->BeginPath();
1431     canvas->MoveTo({line1, line3});
1432     canvas->LineTo({line1, line4});
1433     canvas->LineTo({line2, line4});
1434     canvas->LineTo({line2, line3});
1435     canvas->ClosePath();
1436 }
1437 
RM008UIKitCanvasShadowTest008()1438 void UITestCanvas::RM008UIKitCanvasShadowTest008()
1439 {
1440 #if defined(GRAPHIC_ENABLE_SHADOW_EFFECT_FLAG) && GRAPHIC_ENABLE_SHADOW_EFFECT_FLAG
1441     if (container_ == nullptr) {
1442         return;
1443     }
1444     CreateTitleLabel("RM008_阴影不偏移_偏移_改变模糊级别_改变模糊颜色");
1445     UICanvas* canvas = CreateCanvas();
1446     Paint paint;
1447     paint.SetFillStyle(Color::Orange());
1448     paint.SetStrokeWidth(STROKEWIDTH8);
1449     paint.SetShadowBlur(LINEARGRADIENT5);
1450     paint.SetShadowColor(Color::Black());
1451     DrawRectangle(canvas, LINE11_X, LINE2_X, LINE13_Y, LINE10_Y);
1452     canvas->FillPath(paint);
1453     paint.SetShadowOffsetX(OFFSETX20);
1454     paint.SetShadowOffsetY(OFFSETX10);
1455     DrawRectangle(canvas, LINE26_X, LINE28_X, LINE13_Y, LINE10_Y);
1456     canvas->FillPath(paint);
1457     paint.SetStrokeStyle(Color::Orange());
1458     paint.SetShadowOffsetX(0);
1459     paint.SetShadowOffsetY(0);
1460     DrawRectangle(canvas, LINE11_X, LINE2_X, LINE11_Y, LINE2_Y);
1461     canvas->DrawPath(paint);
1462     paint.SetShadowOffsetX(OFFSETX20);
1463     paint.SetShadowOffsetY(OFFSETX10);
1464     DrawRectangle(canvas, LINE26_X, LINE28_X, LINE11_Y, LINE2_Y);
1465     canvas->DrawPath(paint);
1466     paint.SetFillStyle(Color::Orange());
1467     paint.SetShadowBlur(SHADOWBLUR15);
1468     paint.SetShadowOffsetX(OFFSETX20);
1469     paint.SetShadowOffsetY(OFFSETX10);
1470     DrawRectangle(canvas, LINE34_X, LINE31_X, LINE13_Y, LINE10_Y);
1471     canvas->FillPath(paint);
1472     paint.SetStrokeStyle(Color::Orange());
1473     paint.SetShadowBlur(SHADOWBLUR5);
1474     paint.SetShadowColor(Color::Blue());
1475     paint.SetShadowOffsetX(OFFSETX20);
1476     paint.SetShadowOffsetY(OFFSETX10);
1477     DrawRectangle(canvas, LINE34_X, LINE31_X, LINE11_Y, LINE26_X);
1478     canvas->DrawPath(paint);
1479 #endif
1480 }
1481 
1482 #endif
RM011StrokeText001()1483 void UITestCanvas::RM011StrokeText001()
1484 {
1485     CreateTitleLabel("RM011_StrokeText_多国文字加旋转放大");
1486 
1487 #if defined(GRAPHIC_ENABLE_DRAW_TEXT_FLAG) && GRAPHIC_ENABLE_DRAW_TEXT_FLAG
1488     UICanvas* canvas = CreateCanvas();
1489     UICanvas::FontStyle fontStyle;
1490     fontStyle.align = TEXT_ALIGNMENT_CENTER;
1491     fontStyle.direct = TEXT_DIRECT_LTR;
1492     fontStyle.fontName = DEFAULT_VECTOR_FONT_FILENAME;
1493     fontStyle.fontSize = FONT_SIZE15;
1494     fontStyle.letterSpace = FONT_LETTERSPACE2;
1495     Paint paint;
1496     paint.SetFillColor(Color::Blue());
1497     canvas->StrokeText("葡萄牙语:Hongmeng, teste", {0, HEIGHT_Y20}, fontStyle, paint);
1498     canvas->StrokeText("西班牙语:Hong Meng, test", {0, HEIGHT_Y40}, fontStyle, paint);
1499     canvas->StrokeText("法语:HongMeng, test", {0, HEIGHT_Y60}, fontStyle, paint);
1500     canvas->StrokeText("瓜拉尼语:mitapoañda, pens", {0, HEIGHT_Y80}, fontStyle, paint);
1501     canvas->StrokeText("荷兰语:Hongmeng, kom op.", {0, HEIGHT_Y100}, fontStyle, paint);
1502     canvas->StrokeText("樊瓦什语:Кайалла", {0, HEIGHT_Y120}, fontStyle, paint);
1503     canvas->StrokeText("白俄罗斯语:Прывітанне", {0, HEIGHT_Y140}, fontStyle, paint);
1504     canvas->StrokeText("希腊语:Γεια.", {0, HEIGHT_Y160}, fontStyle, paint);
1505     canvas->StrokeText("瑞典语:Hej, Hongmeng.", {0, HEIGHT_Y180}, fontStyle, paint);
1506     canvas->StrokeText("俄语: Привет, hongmon ", {0, HEIGHT_Y200}, fontStyle, paint);
1507     paint.Scale(SCALE1_X, SCALE1_Y);
1508     paint.Rotate(ROTATE45);
1509     canvas->StrokeText("中国 你好,鸿蒙。。", {HEIGHT_Y20, 0}, fontStyle, paint);
1510 #endif
1511 }
1512 
RM011CanvasScale001()1513 void UITestCanvas::RM011CanvasScale001()
1514 {
1515     if (container_ == nullptr) {
1516         return;
1517     }
1518     CreateTitleLabel("RM011放大和缩小Scale");
1519     UICanvas* canvas = CreateCanvas();
1520     Paint paint;
1521     paint.SetStrokeStyle(Color::Red());
1522     paint.SetStrokeWidth(STROKEWIDTH3);
1523     canvas->BeginPath();
1524     canvas->MoveTo({MOVETO5, MOVETO5});
1525     canvas->LineTo({LINET050, MOVETO5});
1526     canvas->LineTo({LINET050, LINET035});
1527     canvas->LineTo({MOVETO5, LINET035});
1528     canvas->ClosePath();
1529     canvas->DrawPath(paint);
1530     paint.SetStrokeStyle(Color::Green());
1531     paint.SetGlobalAlpha(GLOBALALPHA5);
1532     paint.Scale(SCALE2, SCALE4);
1533     canvas->BeginPath();
1534     canvas->MoveTo({MOVETO5, MOVETO5});
1535     canvas->LineTo({LINET050, MOVETO5});
1536     canvas->LineTo({LINET050, LINET035});
1537     canvas->LineTo({LINE3_X, LINE3_Y});
1538     canvas->ClosePath();
1539     canvas->DrawPath(paint);
1540     paint.SetStrokeStyle(Color::Blue());
1541     paint.SetGlobalAlpha(GLOBALALPHA5);
1542     paint.Scale(SCALE_X, SCALE_Y);
1543     canvas->BeginPath();
1544     canvas->MoveTo({LINE3_X, LINE4_Y});
1545     canvas->LineTo({LINE4_X, LINE4_Y});
1546     canvas->LineTo({LINE4_X, LINE3_Y});
1547     canvas->LineTo({LINE3_X, LINE3_Y});
1548     canvas->ClosePath();
1549     canvas->DrawPath(paint);
1550 }
1551 
DrawRotate001(UICanvas * canvas,Paint paint,const int16_t line1,const int16_t line2)1552 void UITestCanvas::DrawRotate001(UICanvas *canvas, Paint paint, const int16_t line1, const int16_t line2)
1553 {
1554     canvas->BeginPath();
1555     canvas->MoveTo({LINE8_X, line1});
1556     canvas->LineTo({LINE6_X, LINE6_Y});
1557     canvas->LineTo({LINE6_X, LINE7_Y});
1558     canvas->LineTo({LINE8_X, line2});
1559     canvas->ClosePath();
1560     canvas->DrawPath(paint);
1561 }
1562 
RM011CanvasRotate001()1563 void UITestCanvas::RM011CanvasRotate001()
1564 {
1565     if (container_ == nullptr) {
1566         return;
1567     }
1568     CreateTitleLabel("RM011原(红)_旋转(绿)_平移(蓝)_单位矩阵(黄)_重置矩阵后再设置矩阵(橘色)");
1569     UICanvas* canvas = CreateCanvas();
1570     Paint paint;
1571     paint.SetStrokeStyle(Color::Red());
1572     paint.SetStrokeWidth(STROKE3_WIDTH);
1573     DrawRotate001(canvas, paint, LINE8_X, LINE8_Y);
1574     paint.SetStrokeStyle(Color::Green());
1575     paint.Rotate(ROTATE_ANGLE);
1576     DrawRotate001(canvas, paint, LINE6_Y, LINE7_Y);
1577     paint.Translate(TRANSLATE_X, TRANSLATE_Y);
1578     paint.SetStrokeStyle(Color::Blue());
1579     DrawRotate001(canvas, paint, LINE6_Y, LINE8_Y);
1580     paint.Transform(SCALE1_X, SHEAR_X, SHEAR_Y, SCALE2_Y, TRANSLATE1_X, TRANSLATE1_Y);
1581     paint.SetStrokeStyle(Color::Yellow());
1582     DrawRotate001(canvas, paint, LINE6_Y, LINE8_Y);
1583     paint.SetTransform(SCALE1_X, SHEAR1_X, SHEAR1_Y, SCALE2_Y, TRANSLATE1_X, TRANSLATE1_Y);
1584     paint.SetStrokeStyle(Color::Orange());
1585     DrawRotate001(canvas, paint, LINE6_Y, LINE8_Y);
1586 }
1587 
1588 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
RM012globalAlpha001()1589 void UITestCanvas::RM012globalAlpha001()
1590 {
1591     if (container_ == nullptr) {
1592         return;
1593     }
1594     CreateTitleLabel("RM012_设置图像透明度_红不透明_绿蓝_一半透明度");
1595     UICanvas* canvas = CreateCanvas();
1596     Paint paint;
1597     paint.SetFillColor(Color::Red());
1598     canvas->BeginPath();
1599     canvas->MoveTo({LINE11_X, LINE13_Y});
1600     canvas->LineTo({LINE11_X, LINE11_Y});
1601     canvas->LineTo({LINE12_X, LINE11_Y});
1602     canvas->LineTo({LINE12_X, LINE13_Y});
1603     canvas->ClosePath();
1604     canvas->FillPath(paint);
1605 
1606     paint.SetGlobalAlpha(GLOBALALPHA2);
1607     paint.SetFillColor(Color::Green());
1608     canvas->BeginPath();
1609     canvas->MoveTo({LINE1_Y, LINE10_Y});
1610     canvas->LineTo({LINE2_X, LINE2_Y});
1611     canvas->LineTo({LINE9_X, LINE2_Y});
1612     canvas->LineTo({LINE9_X, LINE10_Y});
1613     canvas->ClosePath();
1614     canvas->FillPath(paint);
1615 
1616     paint.SetFillColor(Color::Blue());
1617     canvas->BeginPath();
1618     canvas->MoveTo({LINE14_X, LINE1_Y});
1619     canvas->LineTo({LINE14_X, LINE14_Y});
1620     canvas->LineTo({LINE15_X, LINE14_Y});
1621     canvas->LineTo({LINE15_X, LINE1_Y});
1622     canvas->ClosePath();
1623     canvas->FillPath(paint);
1624 }
1625 
RM012GlobalCompositeOperationSourceOver()1626 void UITestCanvas::RM012GlobalCompositeOperationSourceOver()
1627 {
1628     if (container_ == nullptr) {
1629         return;
1630     }
1631     CreateTitleLabel("RM012_设置混合_SOURCE_OVER_第二个图源在第一个图源之上");
1632     UICanvas* canvas = CreateCanvas();
1633     Paint paint;
1634     paint.SetFillColor(Color::Red());
1635     canvas->BeginPath();
1636     canvas->MoveTo({LINE11_X, LINE13_Y});
1637     canvas->LineTo({LINE11_X, LINE11_Y});
1638     canvas->LineTo({LINE12_X, LINE11_Y});
1639     canvas->LineTo({LINE12_X, LINE13_Y});
1640     canvas->ClosePath();
1641     canvas->FillPath(paint);
1642     paint.SetGlobalCompositeOperation(SOURCE_OVER);
1643     paint.SetFillColor(Color::Green());
1644     canvas->BeginPath();
1645     canvas->MoveTo({LINE1_Y, LINE10_Y});
1646     canvas->LineTo({LINE2_X, LINE2_Y});
1647     canvas->LineTo({LINE9_X, LINE2_Y});
1648     canvas->LineTo({LINE9_X, LINE10_Y});
1649     canvas->ClosePath();
1650     canvas->FillPath(paint);
1651 }
1652 
RM012GlobalCompositeOperationSourceAtop()1653 void UITestCanvas::RM012GlobalCompositeOperationSourceAtop()
1654 {
1655     if (container_ == nullptr) {
1656         return;
1657     }
1658     CreateTitleLabel("RM012_设置混合_SOURCE_ATOP_第一个图源和与第二个图源相交部分");
1659     UICanvas* canvas = CreateCanvas();
1660     Paint paint;
1661     paint.SetFillColor(Color::Red());
1662     canvas->BeginPath();
1663     canvas->MoveTo({LINE11_X, LINE13_Y});
1664     canvas->LineTo({LINE11_X, LINE11_Y});
1665     canvas->LineTo({LINE12_X, LINE11_Y});
1666     canvas->LineTo({LINE12_X, LINE13_Y});
1667     canvas->ClosePath();
1668     canvas->FillPath(paint);
1669     paint.SetGlobalCompositeOperation(SOURCE_ATOP);
1670     paint.SetFillColor(Color::Green());
1671     canvas->BeginPath();
1672     canvas->MoveTo({LINE1_Y, LINE10_Y});
1673     canvas->LineTo({LINE2_X, LINE2_Y});
1674     canvas->LineTo({LINE9_X, LINE2_Y});
1675     canvas->LineTo({LINE9_X, LINE10_Y});
1676     canvas->ClosePath();
1677     canvas->FillPath(paint);
1678 }
RM012GlobalCompositeOperationSourceIn()1679 void UITestCanvas::RM012GlobalCompositeOperationSourceIn()
1680 {
1681     if (container_ == nullptr) {
1682         return;
1683     }
1684     CreateTitleLabel("RM012_设置混合_SOURCE_IN_只显示两个相交部分显示第二个图源颜色");
1685     UICanvas* canvas = CreateCanvas();
1686     Paint paint;
1687     paint.SetFillColor(Color::Red());
1688     canvas->BeginPath();
1689     canvas->MoveTo({LINE11_X, LINE13_Y});
1690     canvas->LineTo({LINE11_X, LINE11_Y});
1691     canvas->LineTo({LINE12_X, LINE11_Y});
1692     canvas->LineTo({LINE12_X, LINE13_Y});
1693     canvas->ClosePath();
1694     canvas->FillPath(paint);
1695     paint.SetGlobalCompositeOperation(SOURCE_IN);
1696     paint.SetFillColor(Color::Green());
1697     canvas->BeginPath();
1698     canvas->MoveTo({LINE1_Y, LINE10_Y});
1699     canvas->LineTo({LINE2_X, LINE2_Y});
1700     canvas->LineTo({LINE9_X, LINE2_Y});
1701     canvas->LineTo({LINE9_X, LINE10_Y});
1702     canvas->ClosePath();
1703     canvas->FillPath(paint);
1704 }
RM012GlobalCompositeOperationSourceOut()1705 void UITestCanvas::RM012GlobalCompositeOperationSourceOut()
1706 {
1707     if (container_ == nullptr) {
1708         return;
1709     }
1710     CreateTitleLabel("RM012_设置混合_SOURCE_OUT_只显示第二个图源的第一个不相交部分");
1711     UICanvas* canvas = CreateCanvas();
1712     Paint paint;
1713     paint.SetFillColor(Color::Red());
1714     canvas->BeginPath();
1715     canvas->MoveTo({LINE11_X, LINE13_Y});
1716     canvas->LineTo({LINE11_X, LINE11_Y});
1717     canvas->LineTo({LINE12_X, LINE11_Y});
1718     canvas->LineTo({LINE12_X, LINE13_Y});
1719     canvas->ClosePath();
1720     canvas->FillPath(paint);
1721     paint.SetGlobalCompositeOperation(SOURCE_OUT);
1722     paint.SetFillColor(Color::Green());
1723     canvas->BeginPath();
1724     canvas->MoveTo({LINE1_Y, LINE10_Y});
1725     canvas->LineTo({LINE2_X, LINE2_Y});
1726     canvas->LineTo({LINE9_X, LINE2_Y});
1727     canvas->LineTo({LINE9_X, LINE10_Y});
1728     canvas->ClosePath();
1729     canvas->FillPath(paint);
1730 }
RM012GlobalCompositeOperationDestinationOver()1731 void UITestCanvas::RM012GlobalCompositeOperationDestinationOver()
1732 {
1733     if (container_ == nullptr) {
1734         return;
1735     }
1736     CreateTitleLabel("RM012_设置混合_DESTINATION_OVER_源图像在目标图像之上");
1737     UICanvas* canvas = CreateCanvas();
1738     Paint paint;
1739     paint.SetFillColor(Color::Red());
1740     canvas->BeginPath();
1741     canvas->MoveTo({LINE11_X, LINE13_Y});
1742     canvas->LineTo({LINE11_X, LINE11_Y});
1743     canvas->LineTo({LINE12_X, LINE11_Y});
1744     canvas->LineTo({LINE12_X, LINE13_Y});
1745     canvas->ClosePath();
1746     canvas->FillPath(paint);
1747     paint.SetGlobalCompositeOperation(DESTINATION_OVER);
1748     paint.SetFillColor(Color::Green());
1749     canvas->BeginPath();
1750     canvas->MoveTo({LINE1_Y, LINE10_Y});
1751     canvas->LineTo({LINE2_X, LINE2_Y});
1752     canvas->LineTo({LINE9_X, LINE2_Y});
1753     canvas->LineTo({LINE9_X, LINE10_Y});
1754     canvas->ClosePath();
1755     canvas->FillPath(paint);
1756 }
1757 
RM012GlobalCompositeOperationDestinationAtop()1758 void UITestCanvas::RM012GlobalCompositeOperationDestinationAtop()
1759 {
1760     if (container_ == nullptr) {
1761         return;
1762     }
1763     CreateTitleLabel("RM012_设置混合_DESTINATION_ATOP_在源图像上显示目标图像");
1764     UICanvas* canvas = CreateCanvas();
1765     Paint paint;
1766     paint.SetFillColor(Color::Red());
1767     canvas->BeginPath();
1768     canvas->MoveTo({LINE11_X, LINE13_Y});
1769     canvas->LineTo({LINE11_X, LINE11_Y});
1770     canvas->LineTo({LINE12_X, LINE11_Y});
1771     canvas->LineTo({LINE12_X, LINE13_Y});
1772     canvas->ClosePath();
1773     canvas->FillPath(paint);
1774     paint.SetGlobalCompositeOperation(DESTINATION_ATOP);
1775     paint.SetFillColor(Color::Green());
1776     canvas->BeginPath();
1777     canvas->MoveTo({LINE1_Y, LINE10_Y});
1778     canvas->LineTo({LINE2_X, LINE2_Y});
1779     canvas->LineTo({LINE9_X, LINE2_Y});
1780     canvas->LineTo({LINE9_X, LINE10_Y});
1781     canvas->ClosePath();
1782     canvas->FillPath(paint);
1783 }
1784 
RM012GlobalCompositeOperationDestinationIn()1785 void UITestCanvas::RM012GlobalCompositeOperationDestinationIn()
1786 {
1787     if (container_ == nullptr) {
1788         return;
1789     }
1790     CreateTitleLabel("RM012_设置混合_DESTINATION_IN_在源图像上显示目标图像");
1791     UICanvas* canvas = CreateCanvas();
1792     Paint paint;
1793     paint.SetFillColor(Color::Red());
1794     canvas->BeginPath();
1795     canvas->MoveTo({LINE11_X, LINE13_Y});
1796     canvas->LineTo({LINE11_X, LINE11_Y});
1797     canvas->LineTo({LINE12_X, LINE11_Y});
1798     canvas->LineTo({LINE12_X, LINE13_Y});
1799     canvas->ClosePath();
1800     canvas->FillPath(paint);
1801     paint.SetGlobalCompositeOperation(DESTINATION_IN);
1802     paint.SetFillColor(Color::Green());
1803     canvas->BeginPath();
1804     canvas->MoveTo({LINE1_Y, LINE10_Y});
1805     canvas->LineTo({LINE2_X, LINE2_Y});
1806     canvas->LineTo({LINE9_X, LINE2_Y});
1807     canvas->LineTo({LINE9_X, LINE10_Y});
1808     canvas->ClosePath();
1809     canvas->FillPath(paint);
1810 }
1811 
RM012GlobalCompositeOperationDestinationOut()1812 void UITestCanvas::RM012GlobalCompositeOperationDestinationOut()
1813 {
1814     if (container_ == nullptr) {
1815         return;
1816     }
1817     CreateTitleLabel("RM012_设置混合_DESTINATION_OUT_在源图像上显示目标图像");
1818     UICanvas* canvas = CreateCanvas();
1819     Paint paint;
1820     paint.SetFillColor(Color::Red());
1821     canvas->BeginPath();
1822     canvas->MoveTo({LINE11_X, LINE13_Y});
1823     canvas->LineTo({LINE11_X, LINE11_Y});
1824     canvas->LineTo({LINE12_X, LINE11_Y});
1825     canvas->LineTo({LINE12_X, LINE13_Y});
1826     canvas->ClosePath();
1827     canvas->FillPath(paint);
1828     paint.SetGlobalCompositeOperation(DESTINATION_OUT);
1829     paint.SetFillColor(Color::Green());
1830     canvas->BeginPath();
1831     canvas->MoveTo({LINE1_Y, LINE10_Y});
1832     canvas->LineTo({LINE2_X, LINE2_Y});
1833     canvas->LineTo({LINE9_X, LINE2_Y});
1834     canvas->LineTo({LINE9_X, LINE10_Y});
1835     canvas->ClosePath();
1836     canvas->FillPath(paint);
1837 }
1838 
RM012GlobalCompositeOperationLIGHTER()1839 void UITestCanvas::RM012GlobalCompositeOperationLIGHTER()
1840 {
1841     if (container_ == nullptr) {
1842         return;
1843     }
1844     CreateTitleLabel("RM012_设置混合_LIGHTER_显示源图像 + 目标图像相交部分混合");
1845     UICanvas* canvas = CreateCanvas();
1846     Paint paint;
1847     paint.SetFillColor(Color::Red());
1848     canvas->BeginPath();
1849     canvas->MoveTo({LINE11_X, LINE13_Y});
1850     canvas->LineTo({LINE11_X, LINE11_Y});
1851     canvas->LineTo({LINE12_X, LINE11_Y});
1852     canvas->LineTo({LINE12_X, LINE13_Y});
1853     canvas->ClosePath();
1854     canvas->FillPath(paint);
1855     paint.SetGlobalCompositeOperation(LIGHTER);
1856     paint.SetFillColor(Color::Blue());
1857     canvas->BeginPath();
1858     canvas->MoveTo({LINE1_Y, LINE10_Y});
1859     canvas->LineTo({LINE2_X, LINE2_Y});
1860     canvas->LineTo({LINE9_X, LINE2_Y});
1861     canvas->LineTo({LINE9_X, LINE10_Y});
1862     canvas->ClosePath();
1863     canvas->FillPath(paint);
1864 }
1865 
RM012GlobalCompositeOperationCopy()1866 void UITestCanvas::RM012GlobalCompositeOperationCopy()
1867 {
1868     if (container_ == nullptr) {
1869         return;
1870     }
1871     CreateTitleLabel("RM012_设置混合_COPY_只显示第二个图源绿色");
1872     UICanvas* canvas = CreateCanvas();
1873     Paint paint;
1874     paint.SetFillColor(Color::Red());
1875     canvas->BeginPath();
1876     canvas->MoveTo({LINE11_X, LINE13_Y});
1877     canvas->LineTo({LINE11_X, LINE11_Y});
1878     canvas->LineTo({LINE12_X, LINE11_Y});
1879     canvas->LineTo({LINE12_X, LINE13_Y});
1880     canvas->ClosePath();
1881     canvas->FillPath(paint);
1882     paint.SetGlobalCompositeOperation(COPY);
1883     paint.SetFillColor(Color::Green());
1884     canvas->BeginPath();
1885     canvas->MoveTo({LINE1_Y, LINE10_Y});
1886     canvas->LineTo({LINE2_X, LINE2_Y});
1887     canvas->LineTo({LINE9_X, LINE2_Y});
1888     canvas->LineTo({LINE9_X, LINE10_Y});
1889     canvas->ClosePath();
1890     canvas->FillPath(paint);
1891 }
1892 
RM012GlobalCompositeOperationXOR()1893 void UITestCanvas::RM012GlobalCompositeOperationXOR()
1894 {
1895     if (container_ == nullptr) {
1896         return;
1897     }
1898     CreateTitleLabel("RM012_设置混合_XOR_相交部分不显示");
1899     UICanvas* canvas = CreateCanvas();
1900     Paint paint;
1901     paint.SetFillColor(Color::Red());
1902     canvas->BeginPath();
1903     canvas->MoveTo({LINE11_X, LINE13_Y});
1904     canvas->LineTo({LINE11_X, LINE11_Y});
1905     canvas->LineTo({LINE12_X, LINE11_Y});
1906     canvas->LineTo({LINE12_X, LINE13_Y});
1907     canvas->ClosePath();
1908     canvas->FillPath(paint);
1909     paint.SetGlobalCompositeOperation(XOR);
1910     paint.SetFillColor(Color::Green());
1911     canvas->BeginPath();
1912     canvas->MoveTo({LINE1_Y, LINE10_Y});
1913     canvas->LineTo({LINE2_X, LINE2_Y});
1914     canvas->LineTo({LINE9_X, LINE2_Y});
1915     canvas->LineTo({LINE9_X, LINE10_Y});
1916     canvas->ClosePath();
1917     canvas->FillPath(paint);
1918 }
1919 
RM012SaveOrRestore002()1920 void UITestCanvas::RM012SaveOrRestore002()
1921 {
1922     if (container_ == nullptr) {
1923         return;
1924     }
1925     CreateTitleLabel("RM012_设置图像透明度_红不透明_绿蓝_一半透明度Save_Restore");
1926     UICanvas* canvas = CreateCanvas();
1927     Paint paint;
1928     paint.SetFillColor(Color::Red());
1929     canvas->BeginPath();
1930     canvas->MoveTo({LINE11_X, LINE13_Y});
1931     canvas->LineTo({LINE11_X, LINE11_Y});
1932     canvas->LineTo({LINE12_X, LINE11_Y});
1933     canvas->LineTo({LINE12_X, LINE13_Y});
1934     canvas->ClosePath();
1935     canvas->FillPath(paint);
1936 
1937     paint.SetGlobalAlpha(GLOBALALPHA2);
1938     paint.SetFillColor(Color::Green());
1939     canvas->BeginPath();
1940     canvas->MoveTo({LINE1_Y, LINE10_Y});
1941     canvas->LineTo({LINE2_X, LINE2_Y});
1942     canvas->LineTo({LINE9_X, LINE2_Y});
1943     canvas->LineTo({LINE9_X, LINE10_Y});
1944     canvas->ClosePath();
1945     canvas->FillPath(paint);
1946 
1947     canvas->Save(paint);
1948     paint.SetFillColor(Color::Blue());
1949     canvas->BeginPath();
1950     canvas->MoveTo({LINE14_X, LINE1_Y});
1951     canvas->LineTo({LINE14_X, LINE14_Y});
1952     canvas->LineTo({LINE15_X, LINE14_Y});
1953     canvas->LineTo({LINE15_X, LINE1_Y});
1954     canvas->ClosePath();
1955     paint = canvas->Restore();
1956     canvas->FillPath(paint);
1957 }
1958 #endif
1959 } // namespace OHOS
1960