rrect_f_builder.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef UI_GFX_GEOMETRY_RRECT_F_BUILDER_H_
  5. #define UI_GFX_GEOMETRY_RRECT_F_BUILDER_H_
  6. #include "ui/gfx/geometry/rrect_f.h"
  7. namespace gfx {
  8. // RRectFBuilder is implemented to make the parameter setting easier for RRectF.
  9. //
  10. // For example: To build an RRectF at point(40, 50) with size(60,70),
  11. // with corner radii {(1, 2),(3, 4),(5, 6),(7, 8)}, use:
  12. //
  13. // RRectF a = RRectFBuilder()
  14. // .set_origin(40, 50)
  15. // .set_size(60, 70)
  16. // .set_upper_left(1, 2)
  17. // .set_upper_right(3, 4)
  18. // .set_lower_right(5, 6)
  19. // .set_lower_left(7, 8)
  20. // .Build();
  21. class GEOMETRY_SKIA_EXPORT RRectFBuilder {
  22. public:
  23. RRectFBuilder();
  24. RRectFBuilder(RRectFBuilder&& other);
  25. ~RRectFBuilder() = default;
  26. RRectFBuilder&& set_origin(float x, float y) {
  27. x_ = x;
  28. y_ = y;
  29. return std::move(*this);
  30. }
  31. RRectFBuilder&& set_origin(const PointF& origin) {
  32. x_ = origin.x();
  33. y_ = origin.y();
  34. return std::move(*this);
  35. }
  36. RRectFBuilder&& set_size(float width, float height) {
  37. width_ = width;
  38. height_ = height;
  39. return std::move(*this);
  40. }
  41. RRectFBuilder&& set_size(const SizeF& size) {
  42. width_ = size.width();
  43. height_ = size.height();
  44. return std::move(*this);
  45. }
  46. RRectFBuilder&& set_rect(const gfx::RectF& rect) {
  47. x_ = rect.x();
  48. y_ = rect.y();
  49. width_ = rect.width();
  50. height_ = rect.height();
  51. return std::move(*this);
  52. }
  53. template <class T>
  54. void set_rect(const T&) = delete; // To avoid implicit conversion.
  55. RRectFBuilder&& set_radius(float radius) {
  56. set_upper_left(radius, radius);
  57. set_upper_right(radius, radius);
  58. set_lower_right(radius, radius);
  59. set_lower_left(radius, radius);
  60. return std::move(*this);
  61. }
  62. RRectFBuilder&& set_radius(float x_rad, float y_rad) {
  63. set_upper_left(x_rad, y_rad);
  64. set_upper_right(x_rad, y_rad);
  65. set_lower_right(x_rad, y_rad);
  66. set_lower_left(x_rad, y_rad);
  67. return std::move(*this);
  68. }
  69. RRectFBuilder&& set_upper_left(float upper_left_x, float upper_left_y) {
  70. upper_left_x_ = upper_left_x;
  71. upper_left_y_ = upper_left_y;
  72. return std::move(*this);
  73. }
  74. RRectFBuilder&& set_upper_right(float upper_right_x, float upper_right_y) {
  75. upper_right_x_ = upper_right_x;
  76. upper_right_y_ = upper_right_y;
  77. return std::move(*this);
  78. }
  79. RRectFBuilder&& set_lower_right(float lower_right_x, float lower_right_y) {
  80. lower_right_x_ = lower_right_x;
  81. lower_right_y_ = lower_right_y;
  82. return std::move(*this);
  83. }
  84. RRectFBuilder&& set_lower_left(float lower_left_x, float lower_left_y) {
  85. lower_left_x_ = lower_left_x;
  86. lower_left_y_ = lower_left_y;
  87. return std::move(*this);
  88. }
  89. RRectFBuilder&& set_corners(const gfx::RoundedCornersF& corners) {
  90. upper_left_x_ = corners.upper_left();
  91. upper_left_y_ = corners.upper_left();
  92. upper_right_x_ = corners.upper_right();
  93. upper_right_y_ = corners.upper_right();
  94. lower_right_x_ = corners.lower_right();
  95. lower_right_y_ = corners.lower_right();
  96. lower_left_x_ = corners.lower_left();
  97. lower_left_y_ = corners.lower_left();
  98. return std::move(*this);
  99. }
  100. RRectF Build();
  101. private:
  102. float x_ = 0.f;
  103. float y_ = 0.f;
  104. float width_ = 0.f;
  105. float height_ = 0.f;
  106. float upper_left_x_ = 0.f;
  107. float upper_left_y_ = 0.f;
  108. float upper_right_x_ = 0.f;
  109. float upper_right_y_ = 0.f;
  110. float lower_right_x_ = 0.f;
  111. float lower_right_y_ = 0.f;
  112. float lower_left_x_ = 0.f;
  113. float lower_left_y_ = 0.f;
  114. };
  115. } // namespace gfx
  116. #endif // UI_GFX_GEOMETRY_RRECT_F_BUILDER_H_