2 * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included in all
12 * copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29 TEST_CASE("Basic draw", "[tvgSwEngine]")
31 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
33 auto canvas = SwCanvas::gen();
36 uint32_t buffer[100*100];
37 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
40 auto shape1 = tvg::Shape::gen();
43 REQUIRE(shape1->appendArc(150, 150, 80, 10, 180, false) == Result::Success);
44 REQUIRE(shape1->stroke(255, 255, 255, 255) == Result::Success);
45 REQUIRE(shape1->stroke(2) == Result::Success);
46 REQUIRE(canvas->push(move(shape1)) == Result::Success);
49 auto shape2 = tvg::Shape::gen();
52 REQUIRE(shape2->moveTo(50, 25) == Result::Success);
53 REQUIRE(shape2->cubicTo(62, 25, 75, 38, 75, 50) == Result::Success);
54 REQUIRE(shape2->close() == Result::Success);
55 REQUIRE(shape2->stroke(1) == Result::Success);
56 REQUIRE(canvas->push(move(shape2)) == Result::Success);
59 REQUIRE(canvas->draw() == Result::Success);
60 REQUIRE(canvas->sync() == Result::Success);
62 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
66 TEST_CASE("Rect Draw", "[tvgSwEngine]")
68 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
70 auto canvas = SwCanvas::gen();
73 uint32_t buffer[100*100];
74 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
76 //Basic shapes and masking
77 auto basicShape = tvg::Shape::gen();
79 auto basicMask = tvg::Shape::gen();
81 REQUIRE(basicShape->appendRect(0, 0, 50, 50, 0, 0) == Result::Success);
82 REQUIRE(basicMask->appendRect(10, 10, 30, 30, 0, 0) == Result::Success);
83 REQUIRE(basicShape->fill(255, 255, 255, 255) == Result::Success);
85 auto basicShape2 = std::unique_ptr<Shape>(static_cast<Shape*>(basicShape->duplicate()));
87 auto basicMask2 = std::unique_ptr<Shape>(static_cast<Shape*>(basicMask->duplicate()));
90 auto basicShape3 = std::unique_ptr<Shape>(static_cast<Shape*>(basicShape->duplicate()));
92 auto basicMask3 = std::unique_ptr<Shape>(static_cast<Shape*>(basicMask->duplicate()));
95 auto basicShape4 = std::unique_ptr<Shape>(static_cast<Shape*>(basicShape->duplicate()));
98 REQUIRE(basicShape->composite(move(basicMask), tvg::CompositeMethod::AlphaMask) == Result::Success);
99 REQUIRE(canvas->push(move(basicShape)) == Result::Success);
101 REQUIRE(basicShape2->composite(move(basicMask2), tvg::CompositeMethod::InvAlphaMask) == Result::Success);
102 REQUIRE(canvas->push(move(basicShape2)) == Result::Success);
104 REQUIRE(basicShape3->composite(move(basicMask3), tvg::CompositeMethod::ClipPath) == Result::Success);
105 REQUIRE(canvas->push(move(basicShape3)) == Result::Success);
107 REQUIRE(canvas->push(move(basicShape4)) == Result::Success);
110 REQUIRE(canvas->draw() == Result::Success);
111 REQUIRE(canvas->sync() == Result::Success);
113 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
117 TEST_CASE("RLE Rect Draw", "[tvgSwEngine]")
119 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
121 auto canvas = SwCanvas::gen();
124 uint32_t buffer[100*100];
125 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
127 //Basic shapes and masking
128 auto basicShape = tvg::Shape::gen();
130 auto basicMask = tvg::Shape::gen();
132 REQUIRE(basicShape->appendRect(0, 0, 50, 50, 50, 50) == Result::Success);
133 REQUIRE(basicMask->appendRect(10, 10, 30, 30, 0, 0) == Result::Success);
134 REQUIRE(basicShape->fill(255, 255, 255, 100) == Result::Success);
136 auto basicShape2 = std::unique_ptr<Shape>(static_cast<Shape*>(basicShape->duplicate()));
137 REQUIRE(basicShape2);
138 auto basicMask2 = std::unique_ptr<Shape>(static_cast<Shape*>(basicMask->duplicate()));
141 auto basicShape3 = std::unique_ptr<Shape>(static_cast<Shape*>(basicShape->duplicate()));
142 REQUIRE(basicShape3);
143 auto basicMask3 = std::unique_ptr<Shape>(static_cast<Shape*>(basicMask->duplicate()));
146 auto basicShape4 = std::unique_ptr<Shape>(static_cast<Shape*>(basicShape->duplicate()));
147 REQUIRE(basicShape4);
149 REQUIRE(basicShape->composite(move(basicMask), tvg::CompositeMethod::AlphaMask) == Result::Success);
150 REQUIRE(canvas->push(move(basicShape)) == Result::Success);
152 REQUIRE(basicShape2->composite(move(basicMask2), tvg::CompositeMethod::InvAlphaMask) == Result::Success);
153 REQUIRE(canvas->push(move(basicShape2)) == Result::Success);
155 REQUIRE(basicShape3->composite(move(basicMask3), tvg::CompositeMethod::ClipPath) == Result::Success);
156 REQUIRE(canvas->push(move(basicShape3)) == Result::Success);
158 REQUIRE(canvas->push(move(basicShape4)) == Result::Success);
161 REQUIRE(canvas->draw() == Result::Success);
162 REQUIRE(canvas->sync() == Result::Success);
164 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
168 TEST_CASE("Filling Draw", "[tvgSwEngine]")
170 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
172 auto canvas = SwCanvas::gen();
175 uint32_t buffer[100*100];
176 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
179 auto linearFill = LinearGradient::gen();
182 auto radialFill = RadialGradient::gen();
185 Fill::ColorStop cs[4] = {
187 {0.2f, 50, 25, 50, 25},
188 {0.5f, 100, 100, 100, 125},
189 {1.0f, 255, 255, 255, 255}
191 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
192 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
193 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
194 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
197 auto shape3 = tvg::Shape::gen();
199 auto shape4 = tvg::Shape::gen();
201 REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success);
202 REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success);
204 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
205 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
207 REQUIRE(canvas->push(move(shape3)) == Result::Success);
208 REQUIRE(canvas->push(move(shape4)) == Result::Success);
211 REQUIRE(canvas->draw() == Result::Success);
212 REQUIRE(canvas->sync() == Result::Success);
214 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
218 TEST_CASE("Filling Opaque Draw", "[tvgSwEngine]")
220 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
222 auto canvas = SwCanvas::gen();
225 uint32_t buffer[100*100];
226 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
229 auto linearFill = LinearGradient::gen();
232 auto radialFill = RadialGradient::gen();
235 Fill::ColorStop cs[4] = {
236 {0.0f, 0, 0, 0, 255},
237 {0.2f, 50, 25, 50, 255},
238 {0.5f, 100, 100, 100, 255},
239 {1.0f, 255, 255, 255, 255}
241 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
242 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
243 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
244 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
247 auto shape3 = tvg::Shape::gen();
249 auto shape4 = tvg::Shape::gen();
251 REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success);
252 REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success);
254 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
255 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
257 REQUIRE(canvas->push(move(shape3)) == Result::Success);
258 REQUIRE(canvas->push(move(shape4)) == Result::Success);
261 REQUIRE(canvas->draw() == Result::Success);
262 REQUIRE(canvas->sync() == Result::Success);
264 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
268 TEST_CASE("Filling AlphaMask", "[tvgSwEngine]")
270 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
272 auto canvas = SwCanvas::gen();
275 uint32_t buffer[100*100];
276 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
279 auto linearFill = LinearGradient::gen();
282 auto radialFill = RadialGradient::gen();
285 Fill::ColorStop cs[4] = {
287 {0.2f, 50, 25, 50, 25},
288 {0.5f, 100, 100, 100, 125},
289 {1.0f, 255, 255, 255, 255}
291 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
292 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
293 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
294 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
297 auto mask = tvg::Shape::gen();
299 REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success);
302 auto shape3 = tvg::Shape::gen();
304 auto shape4 = tvg::Shape::gen();
306 REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success);
307 REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success);
309 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
310 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
313 auto scene = tvg::Scene::gen();
315 REQUIRE(scene->push(move(shape3)) == Result::Success);
316 REQUIRE(scene->push(move(shape4)) == Result::Success);
317 REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::AlphaMask) == Result::Success);
318 REQUIRE(canvas->push(move(scene)) == Result::Success);
321 REQUIRE(canvas->draw() == Result::Success);
322 REQUIRE(canvas->sync() == Result::Success);
324 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
328 TEST_CASE("Filling InvAlphaMask", "[tvgSwEngine]")
330 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
332 auto canvas = SwCanvas::gen();
335 uint32_t buffer[100*100];
336 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
339 auto linearFill = LinearGradient::gen();
342 auto radialFill = RadialGradient::gen();
345 Fill::ColorStop cs[4] = {
347 {0.2f, 50, 25, 50, 25},
348 {0.5f, 100, 100, 100, 125},
349 {1.0f, 255, 255, 255, 255}
351 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
352 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
353 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
354 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
357 auto mask = tvg::Shape::gen();
359 REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success);
362 auto shape3 = tvg::Shape::gen();
364 auto shape4 = tvg::Shape::gen();
366 REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success);
367 REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success);
369 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
370 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
373 auto scene = tvg::Scene::gen();
375 REQUIRE(scene->push(move(shape3)) == Result::Success);
376 REQUIRE(scene->push(move(shape4)) == Result::Success);
377 REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::InvAlphaMask) == Result::Success);
378 REQUIRE(canvas->push(move(scene)) == Result::Success);
381 REQUIRE(canvas->draw() == Result::Success);
382 REQUIRE(canvas->sync() == Result::Success);
384 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
388 TEST_CASE("Filling ClipPath", "[tvgSwEngine]")
390 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
392 auto canvas = SwCanvas::gen();
395 uint32_t buffer[100*100];
396 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
399 auto linearFill = LinearGradient::gen();
402 auto radialFill = RadialGradient::gen();
405 Fill::ColorStop cs[4] = {
407 {0.2f, 50, 25, 50, 25},
408 {0.5f, 100, 100, 100, 125},
409 {1.0f, 255, 255, 255, 255}
411 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
412 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
413 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
414 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
417 auto mask = tvg::Shape::gen();
419 REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success);
422 auto shape3 = tvg::Shape::gen();
424 auto shape4 = tvg::Shape::gen();
426 REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success);
427 REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success);
429 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
430 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
433 auto scene = tvg::Scene::gen();
435 REQUIRE(scene->push(move(shape3)) == Result::Success);
436 REQUIRE(scene->push(move(shape4)) == Result::Success);
437 REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::ClipPath) == Result::Success);
438 REQUIRE(canvas->push(move(scene)) == Result::Success);
441 REQUIRE(canvas->draw() == Result::Success);
442 REQUIRE(canvas->sync() == Result::Success);
444 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
448 TEST_CASE("RLE Filling Draw", "[tvgSwEngine]")
450 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
452 auto canvas = SwCanvas::gen();
455 uint32_t buffer[100*100];
456 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
459 auto linearFill = LinearGradient::gen();
462 auto radialFill = RadialGradient::gen();
465 Fill::ColorStop cs[4] = {
467 {0.2f, 50, 25, 50, 25},
468 {0.5f, 100, 100, 100, 125},
469 {1.0f, 255, 255, 255, 255}
471 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
472 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
473 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
474 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
477 auto shape3 = tvg::Shape::gen();
479 auto shape4 = tvg::Shape::gen();
481 REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success);
482 REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success);
484 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
485 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
487 REQUIRE(canvas->push(move(shape3)) == Result::Success);
488 REQUIRE(canvas->push(move(shape4)) == Result::Success);
491 REQUIRE(canvas->draw() == Result::Success);
492 REQUIRE(canvas->sync() == Result::Success);
494 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
498 TEST_CASE("RLE Filling Opaque Draw", "[tvgSwEngine]")
500 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
502 auto canvas = SwCanvas::gen();
505 uint32_t buffer[100*100];
506 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
509 auto linearFill = LinearGradient::gen();
512 auto radialFill = RadialGradient::gen();
515 Fill::ColorStop cs[4] = {
516 {0.0f, 0, 0, 0, 255},
517 {0.2f, 50, 25, 50, 255},
518 {0.5f, 100, 100, 100, 255},
519 {1.0f, 255, 255, 255, 255}
521 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
522 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
523 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
524 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
527 auto shape3 = tvg::Shape::gen();
529 auto shape4 = tvg::Shape::gen();
531 REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success);
532 REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success);
534 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
535 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
537 REQUIRE(canvas->push(move(shape3)) == Result::Success);
538 REQUIRE(canvas->push(move(shape4)) == Result::Success);
541 REQUIRE(canvas->draw() == Result::Success);
542 REQUIRE(canvas->sync() == Result::Success);
544 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
548 TEST_CASE("RLE Filling AlphaMask", "[tvgSwEngine]")
550 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
552 auto canvas = SwCanvas::gen();
555 uint32_t buffer[100*100];
556 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
559 auto linearFill = LinearGradient::gen();
562 auto radialFill = RadialGradient::gen();
565 Fill::ColorStop cs[4] = {
567 {0.2f, 50, 25, 50, 25},
568 {0.5f, 100, 100, 100, 125},
569 {1.0f, 255, 255, 255, 255}
571 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
572 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
573 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
574 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
577 auto mask = tvg::Shape::gen();
579 REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success);
582 auto shape3 = tvg::Shape::gen();
584 auto shape4 = tvg::Shape::gen();
586 REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success);
587 REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success);
589 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
590 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
593 auto scene = tvg::Scene::gen();
595 REQUIRE(scene->push(move(shape3)) == Result::Success);
596 REQUIRE(scene->push(move(shape4)) == Result::Success);
597 REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::AlphaMask) == Result::Success);
598 REQUIRE(canvas->push(move(scene)) == Result::Success);
601 REQUIRE(canvas->draw() == Result::Success);
602 REQUIRE(canvas->sync() == Result::Success);
604 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
608 TEST_CASE("RLE Filling InvAlphaMask", "[tvgSwEngine]")
610 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
612 auto canvas = SwCanvas::gen();
615 uint32_t buffer[100*100];
616 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
619 auto linearFill = LinearGradient::gen();
622 auto radialFill = RadialGradient::gen();
625 Fill::ColorStop cs[4] = {
627 {0.2f, 50, 25, 50, 25},
628 {0.5f, 100, 100, 100, 125},
629 {1.0f, 255, 255, 255, 255}
631 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
632 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
633 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
634 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
637 auto mask = tvg::Shape::gen();
639 REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success);
642 auto shape3 = tvg::Shape::gen();
644 auto shape4 = tvg::Shape::gen();
646 REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success);
647 REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success);
649 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
650 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
653 auto scene = tvg::Scene::gen();
655 REQUIRE(scene->push(move(shape3)) == Result::Success);
656 REQUIRE(scene->push(move(shape4)) == Result::Success);
657 REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::InvAlphaMask) == Result::Success);
658 REQUIRE(canvas->push(move(scene)) == Result::Success);
661 REQUIRE(canvas->draw() == Result::Success);
662 REQUIRE(canvas->sync() == Result::Success);
664 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
668 TEST_CASE("RLE Filling ClipPath", "[tvgSwEngine]")
670 REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
672 auto canvas = SwCanvas::gen();
675 uint32_t buffer[100*100];
676 REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
679 auto linearFill = LinearGradient::gen();
682 auto radialFill = RadialGradient::gen();
685 Fill::ColorStop cs[4] = {
687 {0.2f, 50, 25, 50, 25},
688 {0.5f, 100, 100, 100, 125},
689 {1.0f, 255, 255, 255, 255}
691 REQUIRE(linearFill->colorStops(cs, 4) == Result::Success);
692 REQUIRE(radialFill->colorStops(cs, 4) == Result::Success);
693 REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success);
694 REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success);
697 auto mask = tvg::Shape::gen();
699 REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success);
702 auto shape3 = tvg::Shape::gen();
704 auto shape4 = tvg::Shape::gen();
706 REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success);
707 REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success);
709 REQUIRE(shape3->fill(move(linearFill)) == Result::Success);
710 REQUIRE(shape4->fill(move(radialFill)) == Result::Success);
713 auto scene = tvg::Scene::gen();
715 REQUIRE(scene->push(move(shape3)) == Result::Success);
716 REQUIRE(scene->push(move(shape4)) == Result::Success);
717 REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::ClipPath) == Result::Success);
718 REQUIRE(canvas->push(move(scene)) == Result::Success);
721 REQUIRE(canvas->draw() == Result::Success);
722 REQUIRE(canvas->sync() == Result::Success);
724 REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);