276 .top_left =
Size(1.0f, 2.0f),
277 .top_right =
Size(3.0f, 4.0f),
278 .bottom_left =
Size(5.0f, 6.0f),
279 .bottom_right =
Size(7.0f, 8.0f),
283 EXPECT_FALSE(shifted.IsEmpty());
284 EXPECT_FALSE(shifted.IsRect());
285 EXPECT_FALSE(shifted.IsOval());
286 EXPECT_TRUE(shifted.IsFinite());
287 EXPECT_FALSE(shifted.GetBounds().IsEmpty());
288 EXPECT_EQ(shifted.GetBounds(),
Rect::MakeLTRB(15.0f, 16.0f, 45.0f, 46.0f));
289 EXPECT_EQ(shifted.GetRadii().top_left,
Size(1.0f, 2.0f));
290 EXPECT_EQ(shifted.GetRadii().top_right,
Size(3.0f, 4.0f));
291 EXPECT_EQ(shifted.GetRadii().bottom_left,
Size(5.0f, 6.0f));
292 EXPECT_EQ(shifted.GetRadii().bottom_right,
Size(7.0f, 8.0f));
297 .top_left =
Size(1.0f, 2.0f),
298 .top_right =
Size(3.0f, 4.0f),
299 .bottom_left =
Size(5.0f, 6.0f),
300 .bottom_right =
Size(7.0f, 8.0f),
304TEST(RoundRectTest, ExpandScalar) {
308 .top_left =
Size(1.0f, 2.0f),
309 .top_right =
Size(3.0f, 4.0f),
310 .bottom_left =
Size(5.0f, 6.0f),
311 .bottom_right =
Size(7.0f, 8.0f),
315 EXPECT_FALSE(expanded.IsEmpty());
316 EXPECT_FALSE(expanded.IsRect());
317 EXPECT_FALSE(expanded.IsOval());
318 EXPECT_TRUE(expanded.IsFinite());
319 EXPECT_FALSE(expanded.GetBounds().IsEmpty());
320 EXPECT_EQ(expanded.GetBounds(),
Rect::MakeLTRB(5.0f, 5.0f, 45.0f, 45.0f));
321 EXPECT_EQ(expanded.GetRadii().top_left,
Size(1.0f, 2.0f));
322 EXPECT_EQ(expanded.GetRadii().top_right,
Size(3.0f, 4.0f));
323 EXPECT_EQ(expanded.GetRadii().bottom_left,
Size(5.0f, 6.0f));
324 EXPECT_EQ(expanded.GetRadii().bottom_right,
Size(7.0f, 8.0f));
329 .top_left =
Size(1.0f, 2.0f),
330 .top_right =
Size(3.0f, 4.0f),
331 .bottom_left =
Size(5.0f, 6.0f),
332 .bottom_right =
Size(7.0f, 8.0f),
336TEST(RoundRectTest, ExpandTwoScalars) {
340 .top_left =
Size(1.0f, 2.0f),
341 .top_right =
Size(3.0f, 4.0f),
342 .bottom_left =
Size(5.0f, 6.0f),
343 .bottom_right =
Size(7.0f, 8.0f),
347 EXPECT_FALSE(expanded.IsEmpty());
348 EXPECT_FALSE(expanded.IsRect());
349 EXPECT_FALSE(expanded.IsOval());
350 EXPECT_TRUE(expanded.IsFinite());
351 EXPECT_FALSE(expanded.GetBounds().IsEmpty());
352 EXPECT_EQ(expanded.GetBounds(),
Rect::MakeLTRB(5.0f, 4.0f, 45.0f, 46.0f));
353 EXPECT_EQ(expanded.GetRadii().top_left,
Size(1.0f, 2.0f));
354 EXPECT_EQ(expanded.GetRadii().top_right,
Size(3.0f, 4.0f));
355 EXPECT_EQ(expanded.GetRadii().bottom_left,
Size(5.0f, 6.0f));
356 EXPECT_EQ(expanded.GetRadii().bottom_right,
Size(7.0f, 8.0f));
361 .top_left =
Size(1.0f, 2.0f),
362 .top_right =
Size(3.0f, 4.0f),
363 .bottom_left =
Size(5.0f, 6.0f),
364 .bottom_right =
Size(7.0f, 8.0f),
368TEST(RoundRectTest, ExpandFourScalars) {
372 .top_left =
Size(1.0f, 2.0f),
373 .top_right =
Size(3.0f, 4.0f),
374 .bottom_left =
Size(5.0f, 6.0f),
375 .bottom_right =
Size(7.0f, 8.0f),
379 EXPECT_FALSE(expanded.IsEmpty());
380 EXPECT_FALSE(expanded.IsRect());
381 EXPECT_FALSE(expanded.IsOval());
382 EXPECT_TRUE(expanded.IsFinite());
383 EXPECT_FALSE(expanded.GetBounds().IsEmpty());
384 EXPECT_EQ(expanded.GetBounds(),
Rect::MakeLTRB(5.0f, 4.0f, 47.0f, 48.0f));
385 EXPECT_EQ(expanded.GetRadii().top_left,
Size(1.0f, 2.0f));
386 EXPECT_EQ(expanded.GetRadii().top_right,
Size(3.0f, 4.0f));
387 EXPECT_EQ(expanded.GetRadii().bottom_left,
Size(5.0f, 6.0f));
388 EXPECT_EQ(expanded.GetRadii().bottom_right,
Size(7.0f, 8.0f));
393 .top_left =
Size(1.0f, 2.0f),
394 .top_right =
Size(3.0f, 4.0f),
395 .bottom_left =
Size(5.0f, 6.0f),
396 .bottom_right =
Size(7.0f, 8.0f),
400TEST(RoundRectTest, ContractScalar) {
404 .top_left =
Size(1.0f, 2.0f),
405 .top_right =
Size(3.0f, 4.0f),
406 .bottom_left =
Size(5.0f, 6.0f),
407 .bottom_right =
Size(7.0f, 8.0f),
411 EXPECT_FALSE(expanded.IsEmpty());
412 EXPECT_FALSE(expanded.IsRect());
413 EXPECT_FALSE(expanded.IsOval());
414 EXPECT_TRUE(expanded.IsFinite());
415 EXPECT_FALSE(expanded.GetBounds().IsEmpty());
416 EXPECT_EQ(expanded.GetBounds(),
Rect::MakeLTRB(12.0f, 12.0f, 38.0f, 38.0f));
417 EXPECT_EQ(expanded.GetRadii().top_left,
Size(1.0f, 2.0f));
418 EXPECT_EQ(expanded.GetRadii().top_right,
Size(3.0f, 4.0f));
419 EXPECT_EQ(expanded.GetRadii().bottom_left,
Size(5.0f, 6.0f));
420 EXPECT_EQ(expanded.GetRadii().bottom_right,
Size(7.0f, 8.0f));
425 .top_left =
Size(1.0f, 2.0f),
426 .top_right =
Size(3.0f, 4.0f),
427 .bottom_left =
Size(5.0f, 6.0f),
428 .bottom_right =
Size(7.0f, 8.0f),
432TEST(RoundRectTest, ContractTwoScalars) {
436 .top_left =
Size(1.0f, 2.0f),
437 .top_right =
Size(3.0f, 4.0f),
438 .bottom_left =
Size(5.0f, 6.0f),
439 .bottom_right =
Size(7.0f, 8.0f),
443 EXPECT_FALSE(expanded.IsEmpty());
444 EXPECT_FALSE(expanded.IsRect());
445 EXPECT_FALSE(expanded.IsOval());
446 EXPECT_TRUE(expanded.IsFinite());
447 EXPECT_FALSE(expanded.GetBounds().IsEmpty());
448 EXPECT_EQ(expanded.GetBounds(),
Rect::MakeLTRB(11.0f, 12.0f, 39.0f, 38.0f));
449 EXPECT_EQ(expanded.GetRadii().top_left,
Size(1.0f, 2.0f));
450 EXPECT_EQ(expanded.GetRadii().top_right,
Size(3.0f, 4.0f));
451 EXPECT_EQ(expanded.GetRadii().bottom_left,
Size(5.0f, 6.0f));
452 EXPECT_EQ(expanded.GetRadii().bottom_right,
Size(7.0f, 8.0f));
457 .top_left =
Size(1.0f, 2.0f),
458 .top_right =
Size(3.0f, 4.0f),
459 .bottom_left =
Size(5.0f, 6.0f),
460 .bottom_right =
Size(7.0f, 8.0f),
464TEST(RoundRectTest, ContractFourScalars) {
468 .top_left =
Size(1.0f, 2.0f),
469 .top_right =
Size(3.0f, 4.0f),
470 .bottom_left =
Size(5.0f, 6.0f),
471 .bottom_right =
Size(7.0f, 8.0f),
475 EXPECT_FALSE(expanded.IsEmpty());
476 EXPECT_FALSE(expanded.IsRect());
477 EXPECT_FALSE(expanded.IsOval());
478 EXPECT_TRUE(expanded.IsFinite());
479 EXPECT_FALSE(expanded.GetBounds().IsEmpty());
480 EXPECT_EQ(expanded.GetBounds(),
Rect::MakeLTRB(11.0f, 11.5f, 38.0f, 37.5f));
481 EXPECT_EQ(expanded.GetRadii().top_left,
Size(1.0f, 2.0f));
482 EXPECT_EQ(expanded.GetRadii().top_right,
Size(3.0f, 4.0f));
483 EXPECT_EQ(expanded.GetRadii().bottom_left,
Size(5.0f, 6.0f));
484 EXPECT_EQ(expanded.GetRadii().bottom_right,
Size(7.0f, 8.0f));
489 .top_left =
Size(1.0f, 2.0f),
490 .top_right =
Size(3.0f, 4.0f),
491 .bottom_left =
Size(5.0f, 6.0f),
492 .bottom_right =
Size(7.0f, 8.0f),
496TEST(RoundRectTest, ContractAndRequireRadiiAdjustment) {
500 .top_left =
Size(1.0f, 2.0f),
501 .top_right =
Size(3.0f, 4.0f),
502 .bottom_left =
Size(5.0f, 6.0f),
503 .bottom_right =
Size(7.0f, 8.0f),
511 EXPECT_FALSE(expanded.IsEmpty());
512 EXPECT_FALSE(expanded.IsRect());
513 EXPECT_FALSE(expanded.IsOval());
514 EXPECT_TRUE(expanded.IsFinite());
515 EXPECT_FALSE(expanded.GetBounds().IsEmpty());
516 EXPECT_EQ(expanded.GetBounds(),
Rect::MakeLTRB(22.0f, 22.0f, 28.0f, 28.0f));
517 EXPECT_EQ(expanded.GetRadii().top_left,
Size(0.5f, 1.0f));
518 EXPECT_EQ(expanded.GetRadii().top_right,
Size(1.5f, 2.0f));
519 EXPECT_EQ(expanded.GetRadii().bottom_left,
Size(2.5f, 3.0f));
520 EXPECT_EQ(expanded.GetRadii().bottom_right,
Size(3.5f, 4.0f));
527 .top_left =
Size(1.0f, 2.0f),
528 .top_right =
Size(3.0f, 4.0f),
529 .bottom_left =
Size(5.0f, 6.0f),
530 .bottom_right =
Size(7.0f, 8.0f),
539 .top_left =
Size(0.5f, 1.0f),
540 .top_right =
Size(1.5f, 2.0f),
541 .bottom_left =
Size(2.5f, 3.0f),
542 .bottom_right =
Size(3.5f, 4.0f),
546TEST(RoundRectTest, NoCornerRoundRectContains) {
551 EXPECT_TRUE(no_corners.Contains({-50, -50}));
554 EXPECT_TRUE(no_corners.Contains({-50, 49.99}));
555 EXPECT_TRUE(no_corners.Contains({49.99, -50}));
556 EXPECT_TRUE(no_corners.Contains({49.99, 49.99}));
557 EXPECT_FALSE(no_corners.Contains({-50.01, -50}));
558 EXPECT_FALSE(no_corners.Contains({-50, -50.01}));
559 EXPECT_FALSE(no_corners.Contains({-50.01, 50}));
560 EXPECT_FALSE(no_corners.Contains({-50, 50.01}));
561 EXPECT_FALSE(no_corners.Contains({50.01, -50}));
562 EXPECT_FALSE(no_corners.Contains({50, -50.01}));
563 EXPECT_FALSE(no_corners.Contains({50.01, 50}));
564 EXPECT_FALSE(no_corners.Contains({50, 50.01}));
567TEST(RoundRectTest, TinyCornerRoundRectContains) {
572 EXPECT_FALSE(tiny_corners.Contains({-50, -50}));
573 EXPECT_FALSE(tiny_corners.Contains({-50, 50}));
574 EXPECT_FALSE(tiny_corners.Contains({50, -50}));
575 EXPECT_FALSE(tiny_corners.Contains({50, 50}));
578TEST(RoundRectTest, UniformCircularRoundRectContains) {
584 EXPECT_TRUE(expanded_2_r_2.Contains({-50, -50}));
585 EXPECT_TRUE(expanded_2_r_2.Contains({-50, 50}));
586 EXPECT_TRUE(expanded_2_r_2.Contains({50, -50}));
587 EXPECT_TRUE(expanded_2_r_2.Contains({50, 50}));
600 EXPECT_TRUE(expanded_2_r_2.Contains({-coord_in, -coord_in}));
601 EXPECT_FALSE(expanded_2_r_2.Contains({-coord_out, -coord_out}));
603 EXPECT_TRUE(expanded_2_r_2.Contains({coord_in, -coord_in}));
604 EXPECT_FALSE(expanded_2_r_2.Contains({coord_out, -coord_out}));
606 EXPECT_TRUE(expanded_2_r_2.Contains({-coord_in, coord_in}));
607 EXPECT_FALSE(expanded_2_r_2.Contains({-coord_out, coord_out}));
609 EXPECT_TRUE(expanded_2_r_2.Contains({coord_in, coord_in}));
610 EXPECT_FALSE(expanded_2_r_2.Contains({coord_out, coord_out}));
613TEST(RoundRectTest, UniformEllipticalRoundRectContains) {
619 EXPECT_TRUE(expanded_2_r_2.Contains({-50, -50}));
620 EXPECT_TRUE(expanded_2_r_2.Contains({-50, 50}));
621 EXPECT_TRUE(expanded_2_r_2.Contains({50, -50}));
622 EXPECT_TRUE(expanded_2_r_2.Contains({50, 50}));
639 EXPECT_TRUE(expanded_2_r_2.Contains({-x_coord_in, -y_coord_in}));
640 EXPECT_FALSE(expanded_2_r_2.Contains({-x_coord_out, -y_coord_out}));
642 EXPECT_TRUE(expanded_2_r_2.Contains({x_coord_in, -y_coord_in}));
643 EXPECT_FALSE(expanded_2_r_2.Contains({x_coord_out, -y_coord_out}));
645 EXPECT_TRUE(expanded_2_r_2.Contains({-x_coord_in, y_coord_in}));
646 EXPECT_FALSE(expanded_2_r_2.Contains({-x_coord_out, y_coord_out}));
648 EXPECT_TRUE(expanded_2_r_2.Contains({x_coord_in, y_coord_in}));
649 EXPECT_FALSE(expanded_2_r_2.Contains({x_coord_out, y_coord_out}));
652TEST(RoundRectTest, DifferingCornersRoundRectContains) {
656 .top_left =
Size(2.0, 3.0),
657 .top_right =
Size(4.0, 5.0),
658 .bottom_left =
Size(6.0, 7.0),
659 .bottom_right =
Size(8.0, 9.0),
670 auto coord = [](
Scalar radius) {
673 auto coord_in = [&coord](
Scalar radius) {
676 auto coord_out = [&coord](
Scalar radius) {
682 EXPECT_TRUE(round_rect.Contains({-coord_in(2.0), -coord_in(3.0)}));
683 EXPECT_FALSE(round_rect.Contains({-coord_out(2.0), -coord_out(3.0)}));
685 EXPECT_TRUE(round_rect.Contains({coord_in(4.0), -coord_in(5.0)}));
686 EXPECT_FALSE(round_rect.Contains({coord_out(4.0), -coord_out(5.0)}));
688 EXPECT_TRUE(round_rect.Contains({-coord_in(6.0), coord_in(7.0)}));
689 EXPECT_FALSE(round_rect.Contains({-coord_out(6.0), coord_out(7.0)}));
691 EXPECT_TRUE(round_rect.Contains({coord_in(8.0), coord_in(9.0)}));
692 EXPECT_FALSE(round_rect.Contains({coord_out(8.0), coord_out(9.0)}));
RoundRect Expand(Scalar left, Scalar top, Scalar right, Scalar bottom) const
Returns a round rectangle with expanded edges. Negative expansion results in shrinking.