File: rrect_f_builder.h

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (131 lines) | stat: -rw-r--r-- 3,809 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_GFX_GEOMETRY_RRECT_F_BUILDER_H_
#define UI_GFX_GEOMETRY_RRECT_F_BUILDER_H_

#include "base/component_export.h"
#include "ui/gfx/geometry/rrect_f.h"

namespace gfx {

// RRectFBuilder is implemented to make the parameter setting easier for RRectF.
//
// For example: To build an RRectF at point(40, 50) with size(60,70),
// with corner radii {(1, 2),(3, 4),(5, 6),(7, 8)}, use:
//
//  RRectF a = RRectFBuilder()
//                  .set_origin(40, 50)
//                  .set_size(60, 70)
//                  .set_upper_left(1, 2)
//                  .set_upper_right(3, 4)
//                  .set_lower_right(5, 6)
//                  .set_lower_left(7, 8)
//                  .Build();
class COMPONENT_EXPORT(GEOMETRY_SKIA) RRectFBuilder {
 public:
  RRectFBuilder();
  RRectFBuilder(RRectFBuilder&& other);
  ~RRectFBuilder() = default;

  RRectFBuilder&& set_origin(float x, float y) {
    x_ = x;
    y_ = y;
    return std::move(*this);
  }
  RRectFBuilder&& set_origin(const PointF& origin) {
    x_ = origin.x();
    y_ = origin.y();
    return std::move(*this);
  }

  RRectFBuilder&& set_size(float width, float height) {
    width_ = width;
    height_ = height;
    return std::move(*this);
  }
  RRectFBuilder&& set_size(const SizeF& size) {
    width_ = size.width();
    height_ = size.height();
    return std::move(*this);
  }

  RRectFBuilder&& set_rect(const gfx::RectF& rect) {
    x_ = rect.x();
    y_ = rect.y();
    width_ = rect.width();
    height_ = rect.height();
    return std::move(*this);
  }
  template <class T>
  void set_rect(const T&) = delete;  // To avoid implicit conversion.

  RRectFBuilder&& set_radius(float radius) {
    set_upper_left(radius, radius);
    set_upper_right(radius, radius);
    set_lower_right(radius, radius);
    set_lower_left(radius, radius);
    return std::move(*this);
  }
  RRectFBuilder&& set_radius(float x_rad, float y_rad) {
    set_upper_left(x_rad, y_rad);
    set_upper_right(x_rad, y_rad);
    set_lower_right(x_rad, y_rad);
    set_lower_left(x_rad, y_rad);
    return std::move(*this);
  }

  RRectFBuilder&& set_upper_left(float upper_left_x, float upper_left_y) {
    upper_left_x_ = upper_left_x;
    upper_left_y_ = upper_left_y;
    return std::move(*this);
  }
  RRectFBuilder&& set_upper_right(float upper_right_x, float upper_right_y) {
    upper_right_x_ = upper_right_x;
    upper_right_y_ = upper_right_y;
    return std::move(*this);
  }
  RRectFBuilder&& set_lower_right(float lower_right_x, float lower_right_y) {
    lower_right_x_ = lower_right_x;
    lower_right_y_ = lower_right_y;
    return std::move(*this);
  }
  RRectFBuilder&& set_lower_left(float lower_left_x, float lower_left_y) {
    lower_left_x_ = lower_left_x;
    lower_left_y_ = lower_left_y;
    return std::move(*this);
  }

  RRectFBuilder&& set_corners(const gfx::RoundedCornersF& corners) {
    upper_left_x_ = corners.upper_left();
    upper_left_y_ = corners.upper_left();
    upper_right_x_ = corners.upper_right();
    upper_right_y_ = corners.upper_right();
    lower_right_x_ = corners.lower_right();
    lower_right_y_ = corners.lower_right();
    lower_left_x_ = corners.lower_left();
    lower_left_y_ = corners.lower_left();
    return std::move(*this);
  }

  RRectF Build();

 private:
  float x_ = 0.f;
  float y_ = 0.f;
  float width_ = 0.f;
  float height_ = 0.f;
  float upper_left_x_ = 0.f;
  float upper_left_y_ = 0.f;
  float upper_right_x_ = 0.f;
  float upper_right_y_ = 0.f;
  float lower_right_x_ = 0.f;
  float lower_right_y_ = 0.f;
  float lower_left_x_ = 0.f;
  float lower_left_y_ = 0.f;
};

}  // namespace gfx

#endif  // UI_GFX_GEOMETRY_RRECT_F_BUILDER_H_