@@ -251,11 +251,12 @@ GLPainter::draw_filled_rect(const FillRectRequest& request)
251
251
std::min (request.rect .get_width () / 2 .0f ,
252
252
request.rect .get_height () / 2 .0f ));
253
253
254
- // inner rectangle
255
- const Rectf irect (request.rect .get_left () + radius,
256
- request.rect .get_top () + radius,
257
- request.rect .get_right () - radius,
258
- request.rect .get_bottom () - radius);
254
+ // Not using Rectf here as the resulting Rectf might be invalid
255
+ // and assert() due to float imprecision
256
+ const float inner_rect_left = request.rect .get_left () + radius;
257
+ const float inner_rect_top = request.rect .get_top () + radius;
258
+ const float inner_rect_right = request.rect .get_right () - radius;
259
+ const float inner_rect_bottom = request.rect .get_bottom () - radius;
259
260
260
261
const int n = 8 ;
261
262
size_t p = 0 ;
@@ -266,23 +267,23 @@ GLPainter::draw_filled_rect(const FillRectRequest& request)
266
267
const float x = sinf (static_cast <float >(i) * math::PI_2 / static_cast <float >(n)) * radius;
267
268
const float y = cosf (static_cast <float >(i) * math::PI_2 / static_cast <float >(n)) * radius;
268
269
269
- vertices[p++] = irect. get_left () - x;
270
- vertices[p++] = irect. get_top () - y;
270
+ vertices[p++] = inner_rect_left - x;
271
+ vertices[p++] = inner_rect_top - y;
271
272
272
- vertices[p++] = irect. get_right () + x;
273
- vertices[p++] = irect. get_top () - y;
273
+ vertices[p++] = inner_rect_right + x;
274
+ vertices[p++] = inner_rect_top - y;
274
275
}
275
276
276
277
for (int i = 0 ; i <= n; ++i)
277
278
{
278
279
const float x = cosf (static_cast <float >(i) * math::PI_2 / static_cast <float >(n)) * radius;
279
280
const float y = sinf (static_cast <float >(i) * math::PI_2 / static_cast <float >(n)) * radius;
280
281
281
- vertices[p++] = irect. get_left () - x;
282
- vertices[p++] = irect. get_bottom () + y;
282
+ vertices[p++] = inner_rect_left - x;
283
+ vertices[p++] = inner_rect_bottom + y;
283
284
284
- vertices[p++] = irect. get_right () + x;
285
- vertices[p++] = irect. get_bottom () + y;
285
+ vertices[p++] = inner_rect_right + x;
286
+ vertices[p++] = inner_rect_bottom + y;
286
287
}
287
288
288
289
context.set_positions (vertices.data (), sizeof (float ) * vertices.size ());
0 commit comments