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