@@ -114,12 +114,13 @@ PathBuilder& PathBuilder::AddCubicCurve(Point p1,
114114}
115115
116116PathBuilder& PathBuilder::AddRect (Rect rect) {
117- current_ = rect.origin ;
117+ auto origin = rect.GetOrigin ();
118+ auto size = rect.GetSize ();
118119
119- auto tl = rect. origin ;
120- auto bl = rect. origin + Point{0.0 , rect. size .height };
121- auto br = rect. origin + Point{rect. size . width , rect. size . height } ;
122- auto tr = rect. origin + Point{rect. size .width , 0.0 };
120+ auto tl = origin;
121+ auto bl = origin + Point{0.0 , size.height };
122+ auto br = origin + size;
123+ auto tr = origin + Point{size.width , 0.0 };
123124
124125 MoveTo (tl);
125126 LineTo (tr);
@@ -150,16 +151,19 @@ PathBuilder& PathBuilder::AddRoundedRect(Rect rect, RoundingRadii radii) {
150151 return AddRect (rect);
151152 }
152153
153- current_ = rect.origin + Point{radii.top_left .x , 0.0 };
154+ auto rect_origin = rect.GetOrigin ();
155+ auto rect_size = rect.GetSize ();
154156
155- MoveTo ({rect.origin .x + radii.top_left .x , rect.origin .y });
157+ current_ = rect_origin + Point{radii.top_left .x , 0.0 };
158+
159+ MoveTo ({rect_origin.x + radii.top_left .x , rect_origin.y });
156160
157161 // ----------------------------------------------------------------------------
158162 // Top line.
159163 //
160164 prototype_.AddLinearComponent (
161- {rect. origin . x + radii.top_left .x , rect. origin .y },
162- {rect. origin . x + rect. size . width - radii.top_right .x , rect. origin .y });
165+ {rect_origin. x + radii.top_left .x , rect_origin .y },
166+ {rect_origin. x + rect_size. width - radii.top_right .x , rect_origin .y });
163167
164168 // ----------------------------------------------------------------------------
165169 // Top right arc.
@@ -170,9 +174,9 @@ PathBuilder& PathBuilder::AddRoundedRect(Rect rect, RoundingRadii radii) {
170174 // Right line.
171175 //
172176 prototype_.AddLinearComponent (
173- {rect. origin . x + rect. size . width , rect. origin .y + radii.top_right .y },
174- {rect. origin . x + rect. size .width ,
175- rect. origin . y + rect. size .height - radii.bottom_right .y });
177+ {rect_origin. x + rect_size. width , rect_origin .y + radii.top_right .y },
178+ {rect_origin. x + rect_size .width ,
179+ rect_origin. y + rect_size .height - radii.bottom_right .y });
176180
177181 // ----------------------------------------------------------------------------
178182 // Bottom right arc.
@@ -183,9 +187,9 @@ PathBuilder& PathBuilder::AddRoundedRect(Rect rect, RoundingRadii radii) {
183187 // Bottom line.
184188 //
185189 prototype_.AddLinearComponent (
186- {rect. origin . x + rect. size .width - radii.bottom_right .x ,
187- rect. origin . y + rect. size .height },
188- {rect. origin . x + radii.bottom_left .x , rect. origin . y + rect. size .height });
190+ {rect_origin. x + rect_size .width - radii.bottom_right .x ,
191+ rect_origin. y + rect_size .height },
192+ {rect_origin. x + radii.bottom_left .x , rect_origin. y + rect_size .height });
189193
190194 // ----------------------------------------------------------------------------
191195 // Bottom left arc.
@@ -196,8 +200,8 @@ PathBuilder& PathBuilder::AddRoundedRect(Rect rect, RoundingRadii radii) {
196200 // Left line.
197201 //
198202 prototype_.AddLinearComponent (
199- {rect. origin . x , rect. origin . y + rect. size .height - radii.bottom_left .y },
200- {rect. origin . x , rect. origin .y + radii.top_left .y });
203+ {rect_origin. x , rect_origin. y + rect_size .height - radii.bottom_left .y },
204+ {rect_origin. x , rect_origin .y + radii.top_left .y });
201205
202206 // ----------------------------------------------------------------------------
203207 // Top left arc.
@@ -212,54 +216,48 @@ PathBuilder& PathBuilder::AddRoundedRect(Rect rect, RoundingRadii radii) {
212216PathBuilder& PathBuilder::AddRoundedRectTopLeft (Rect rect,
213217 RoundingRadii radii) {
214218 const auto magic_top_left = radii.top_left * kArcApproximationMagic ;
219+ const auto corner = rect.GetOrigin ();
215220 prototype_.AddCubicComponent (
216- {rect. origin . x , rect. origin .y + radii.top_left .y },
217- {rect. origin . x , rect. origin .y + radii.top_left .y - magic_top_left.y },
218- {rect. origin . x + radii.top_left .x - magic_top_left.x , rect. origin .y },
219- {rect. origin . x + radii.top_left .x , rect. origin .y });
221+ {corner. x , corner .y + radii.top_left .y },
222+ {corner. x , corner .y + radii.top_left .y - magic_top_left.y },
223+ {corner. x + radii.top_left .x - magic_top_left.x , corner .y },
224+ {corner. x + radii.top_left .x , corner .y });
220225 return *this ;
221226}
222227
223228PathBuilder& PathBuilder::AddRoundedRectTopRight (Rect rect,
224229 RoundingRadii radii) {
225230 const auto magic_top_right = radii.top_right * kArcApproximationMagic ;
231+ const auto corner = rect.GetOrigin () + Point{rect.GetWidth (), 0 };
226232 prototype_.AddCubicComponent (
227- {rect.origin .x + rect.size .width - radii.top_right .x , rect.origin .y },
228- {rect.origin .x + rect.size .width - radii.top_right .x + magic_top_right.x ,
229- rect.origin .y },
230- {rect.origin .x + rect.size .width ,
231- rect.origin .y + radii.top_right .y - magic_top_right.y },
232- {rect.origin .x + rect.size .width , rect.origin .y + radii.top_right .y });
233+ {corner.x - radii.top_right .x , corner.y },
234+ {corner.x - radii.top_right .x + magic_top_right.x , corner.y },
235+ {corner.x , corner.y + radii.top_right .y - magic_top_right.y },
236+ {corner.x , corner.y + radii.top_right .y });
233237 return *this ;
234238}
235239
236240PathBuilder& PathBuilder::AddRoundedRectBottomRight (Rect rect,
237241 RoundingRadii radii) {
238242 const auto magic_bottom_right = radii.bottom_right * kArcApproximationMagic ;
243+ const auto corner = rect.GetOrigin () + rect.GetSize ();
239244 prototype_.AddCubicComponent (
240- {rect.origin .x + rect.size .width ,
241- rect.origin .y + rect.size .height - radii.bottom_right .y },
242- {rect.origin .x + rect.size .width , rect.origin .y + rect.size .height -
243- radii.bottom_right .y +
244- magic_bottom_right.y },
245- {rect.origin .x + rect.size .width - radii.bottom_right .x +
246- magic_bottom_right.x ,
247- rect.origin .y + rect.size .height },
248- {rect.origin .x + rect.size .width - radii.bottom_right .x ,
249- rect.origin .y + rect.size .height });
245+ {corner.x , corner.y - radii.bottom_right .y },
246+ {corner.x , corner.y - radii.bottom_right .y + magic_bottom_right.y },
247+ {corner.x - radii.bottom_right .x + magic_bottom_right.x , corner.y },
248+ {corner.x - radii.bottom_right .x , corner.y });
250249 return *this ;
251250}
252251
253252PathBuilder& PathBuilder::AddRoundedRectBottomLeft (Rect rect,
254253 RoundingRadii radii) {
255254 const auto magic_bottom_left = radii.bottom_left * kArcApproximationMagic ;
255+ const auto corner = rect.GetOrigin () + Point{0 , rect.GetHeight ()};
256256 prototype_.AddCubicComponent (
257- {rect.origin .x + radii.bottom_left .x , rect.origin .y + rect.size .height },
258- {rect.origin .x + radii.bottom_left .x - magic_bottom_left.x ,
259- rect.origin .y + rect.size .height },
260- {rect.origin .x , rect.origin .y + rect.size .height - radii.bottom_left .y +
261- magic_bottom_left.y },
262- {rect.origin .x , rect.origin .y + rect.size .height - radii.bottom_left .y });
257+ {corner.x + radii.bottom_left .x , corner.y },
258+ {corner.x + radii.bottom_left .x - magic_bottom_left.x , corner.y },
259+ {corner.x , corner.y - radii.bottom_left .y + magic_bottom_left.y },
260+ {corner.x , corner.y - radii.bottom_left .y });
263261 return *this ;
264262}
265263
@@ -274,10 +272,8 @@ PathBuilder& PathBuilder::AddArc(const Rect& oval_bounds,
274272 sweep.radians = std::min (k2Pi, sweep.radians );
275273 start.radians = std::fmod (start.radians , k2Pi);
276274
277- const Point radius = {oval_bounds.size .width * 0 .5f ,
278- oval_bounds.size .height * 0 .5f };
279- const Point center = {oval_bounds.origin .x + radius.x ,
280- oval_bounds.origin .y + radius.y };
275+ const Point center = oval_bounds.GetCenter ();
276+ const Point radius = center - oval_bounds.GetOrigin ();
281277
282278 Vector2 p1_unit (std::cos (start.radians ), std::sin (start.radians ));
283279
@@ -324,9 +320,9 @@ PathBuilder& PathBuilder::AddArc(const Rect& oval_bounds,
324320}
325321
326322PathBuilder& PathBuilder::AddOval (const Rect& container) {
327- const Point r = { container.size . width * 0 . 5f , container. size . height * 0 . 5f } ;
328- const Point c = {container. origin . x + r. x , container.origin . y + r. y } ;
329- const Point m = { kArcApproximationMagic * r. x , kArcApproximationMagic * r. y } ;
323+ const Point c = container.GetCenter () ;
324+ const Point r = c - container.GetOrigin () ;
325+ const Point m = r * kArcApproximationMagic ;
330326
331327 MoveTo ({c.x , c.y - r.y });
332328
0 commit comments