From 0e10d2b1a2320004e1609e2463e24aa1d04d845d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 5 Aug 2021 18:27:44 +0200 Subject: [PATCH] box-drawing: wedges: avoid floating point math Re-use the pre-calculated offsets used by the sextants. This is the correct thing to do since wedges *should* align with sextants. --- box-drawing.c | 134 +++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 68 deletions(-) diff --git a/box-drawing.c b/box-drawing.c index 5e511262..4a405b4e 100644 --- a/box-drawing.c +++ b/box-drawing.c @@ -2117,245 +2117,243 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc) { const int width = buf->width; const int height = buf->height; - const double width_f = width; - const double height_f = height; int p1_x, p1_y, p2_x, p2_y, p3_x, p3_y; switch (wc) { case 0x1fb3c: /* ๐Ÿฌผ */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); - p1_y = 2 * height / 3; p2_y = p3_y = height; + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; + p1_y = buf->y_thirds[3]; p2_y = p3_y = height; break; case 0x1fb52: /* ๐Ÿญ’ */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); - p1_y = round(2. * height_f / 3.); p2_y = p3_y = height; + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; + p1_y = buf->y_thirds[2]; p2_y = p3_y = height; break; case 0x1fb3d: /* ๐Ÿฌฝ */ p1_x = p2_x = 0; p3_x = width; - p1_y = 2 * height / 3; p2_y = p3_y = height; + p1_y = buf->y_thirds[3]; p2_y = p3_y = height; break; case 0x1fb53: /* ๐Ÿญ“ */ p1_x = p2_x = 0; p3_x = width; - p1_y = round(2. * height_f / 3.); p2_y = p3_y = height; + p1_y = buf->y_thirds[2]; p2_y = p3_y = height; break; case 0x1fb3e: /* ๐Ÿฌพ */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); - p1_y = height / 3; p2_y = p3_y = height; + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; + p1_y = buf->y_thirds[1]; p2_y = p3_y = height; break; case 0x1fb54: /* ๐Ÿญ” */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); - p1_y = round(height_f / 3.); p2_y = p3_y = height; + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; + p1_y = buf->y_thirds[0]; p2_y = p3_y = height; break; case 0x1fb3f: /* ๐Ÿฌฟ */ p1_x = p2_x = 0; p3_x = width; - p1_y = height / 3; p2_y = p3_y = height; + p1_y = buf->y_thirds[1]; p2_y = p3_y = height; break; case 0x1fb55: /* ๐Ÿญ• */ p1_x = p2_x = 0; p3_x = width; - p1_y = round(height_f / 3.); p2_y = p3_y = height; + p1_y = buf->y_thirds[0]; p2_y = p3_y = height; break; case 0x1fb40: /* ๐Ÿญ€ */ case 0x1fb56: /* ๐Ÿญ– */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; p1_y = 0; p2_y = p3_y = height; break; case 0x1fb47: /* ๐Ÿญ‡ */ - p1_x = p2_x = width; p3_x = width / 2; - p1_y = 2 * height / 3; p2_y = p3_y = height; + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; + p1_y = buf->y_thirds[3]; p2_y = p3_y = height; break; case 0x1fb5d: /* ๐Ÿญ */ - p1_x = p2_x = width; p3_x = width / 2; - p1_y = round(2. * height_f / 3.); p2_y = p3_y = height; + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; + p1_y = buf->y_thirds[2]; p2_y = p3_y = height; break; case 0x1fb48: /* ๐Ÿญˆ */ p1_x = p2_x = width; p3_x = 0; - p1_y = 2 * height / 3; p2_y = p3_y = height; + p1_y = buf->y_thirds[3]; p2_y = p3_y = height; break; case 0x1fb5e: /* ๐Ÿญž */ p1_x = p2_x = width; p3_x = 0; - p1_y = round(2. * height_f / 3.); p2_y = p3_y = height; + p1_y = buf->y_thirds[2]; p2_y = p3_y = height; break; case 0x1fb49: /* ๐Ÿญ‰ */ - p1_x = p2_x = width; p3_x = width / 2; - p1_y = height / 3; p2_y = p3_y = height; + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; + p1_y = buf->y_thirds[1]; p2_y = p3_y = height; break; case 0x1fb5f: /* ๐ŸญŸ */ - p1_x = p2_x = width; p3_x = width / 2; - p1_y = round(height_f / 3.); p2_y = p3_y = height; + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; + p1_y = buf->y_thirds[0]; p2_y = p3_y = height; break; case 0x1fb4a: /* ๐ŸญŠ */ p1_x = p2_x = width; p3_x = 0; - p1_y = height / 3; p2_y = p3_y = height; + p1_y = buf->y_thirds[1]; p2_y = p3_y = height; break; case 0x1fb60: /* ๐Ÿญ  */ p1_x = p2_x = width; p3_x = 0; - p1_y = round(height_f / 3.); p2_y = p3_y = height; + p1_y = buf->y_thirds[0]; p2_y = p3_y = height; break; case 0x1fb4b: /* ๐Ÿญ‹ */ case 0x1fb61: /* ๐Ÿญก */ - p1_x = p2_x = width; p3_x = width / 2; + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; p1_y = 0; p2_y = p3_y = height; break; case 0x1fb57: /* ๐Ÿญ— */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); - p1_y = p3_y = 0; p2_y = round(height_f / 3.); + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; + p1_y = p3_y = 0; p2_y = buf->y_thirds[0]; break; case 0x1fb41: /* ๐Ÿญ */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); - p1_y = p3_y = 0; p2_y = height / 3; + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; + p1_y = p3_y = 0; p2_y = buf->y_thirds[1]; break; case 0x1fb58: /* ๐Ÿญ˜ */ p1_x = p2_x = 0; p3_x = width; - p1_y = p3_y = 0; p2_y = round(height_f / 3.); + p1_y = p3_y = 0; p2_y = buf->y_thirds[0]; break; case 0x1fb42: /* ๐Ÿญ‚ */ p1_x = p2_x = 0; p3_x = width; - p1_y = p3_y = 0; p2_y = height / 3; + p1_y = p3_y = 0; p2_y = buf->y_thirds[1]; break; case 0x1fb59: /* ๐Ÿญ™ */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); - p1_y = p3_y = 0; p2_y = round(2. * height_f / 3.); + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; + p1_y = p3_y = 0; p2_y = buf->y_thirds[2]; break; case 0x1fb43: /* ๐Ÿญƒ */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); - p1_y = p3_y = 0; p2_y = 2 * height / 3; + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; + p1_y = p3_y = 0; p2_y = buf->y_thirds[3]; break; case 0x1fb5a: /* ๐Ÿญš */ p1_x = p2_x = 0; p3_x = width; - p1_y = p3_y = 0; p2_y = round(2. * height_f / 3.); + p1_y = p3_y = 0; p2_y = buf->y_thirds[2]; break; case 0x1fb44: /* ๐Ÿญ„ */ p1_x = p2_x = 0; p3_x = width; - p1_y = p3_y = 0; p2_y = 2 * height / 3; + p1_y = p3_y = 0; p2_y = buf->y_thirds[3]; break; case 0x1fb5b: /* ๐Ÿญ› */ case 0x1fb45: /* ๐Ÿญ… */ - p1_x = p2_x = 0; p3_x = round(width_f / 2.); + p1_x = p2_x = 0; p3_x = buf->x_halfs[0]; p1_y = p3_y = 0; p2_y = height; break; case 0x1fb62: /* ๐Ÿญข */ - p1_x = p2_x = width; p3_x = width / 2; - p1_y = p3_y = 0; p2_y = round(height_f / 3.); + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; + p1_y = p3_y = 0; p2_y = buf->y_thirds[0]; break; case 0x1fb4c: /* ๐ŸญŒ */ - p1_x = p2_x = width; p3_x = width / 2; - p1_y = p3_y = 0; p2_y = height / 3; + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; + p1_y = p3_y = 0; p2_y = buf->y_thirds[1]; break; case 0x1fb63: /* ๐Ÿญฃ */ p1_x = p2_x = width; p3_x = 0; - p1_y = p3_y = 0; p2_y = round(height_f / 3.); + p1_y = p3_y = 0; p2_y = buf->y_thirds[0]; break; case 0x1fb4d: /* ๐Ÿญ */ p1_x = p2_x = width; p3_x = 0; - p1_y = p3_y = 0; p2_y = height / 3; + p1_y = p3_y = 0; p2_y = buf->y_thirds[1]; break; case 0x1fb64: /* ๐Ÿญค */ - p1_x = p2_x = width; p3_x = width / 2; - p1_y = p3_y = 0; p2_y = round(2. * height_f / 3.); + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; + p1_y = p3_y = 0; p2_y = buf->y_thirds[2]; break; case 0x1fb4e: /* ๐ŸญŽ */ - p1_x = p2_x = width; p3_x = width / 2; - p1_y = p3_y = 0; p2_y = 2 * height / 3; + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; + p1_y = p3_y = 0; p2_y = buf->y_thirds[3]; break; case 0x1fb65: /* ๐Ÿญฅ */ p1_x = p2_x = width; p3_x = 0; - p1_y = p3_y = 0; p2_y = round(2. * height_f / 3.); + p1_y = p3_y = 0; p2_y = buf->y_thirds[2]; break; case 0x1fb4f: /* ๐Ÿญ */ p1_x = p2_x = width; p3_x = 0; - p1_y = p3_y = 0; p2_y = 2 * height / 3; + p1_y = p3_y = 0; p2_y = buf->y_thirds[3]; break; case 0x1fb66: /* ๐Ÿญฆ */ case 0x1fb50: /* ๐Ÿญ */ - p1_x = p2_x = width; p3_x = width / 2; + p1_x = p2_x = width; p3_x = buf->x_halfs[1]; p1_y = p3_y = 0; p2_y = height; break; case 0x1fb46: /* ๐Ÿญ† */ - p1_x = 0; p1_y = round(2. * height_f / 3.); - p2_x = width; p2_y = height / 3; + p1_x = 0; p1_y = buf->y_thirds[2]; + p2_x = width; p2_y = buf->y_thirds[1]; p3_x = width; p3_y = p1_y; break; case 0x1fb51: /* ๐Ÿญ‘ */ - p1_x = 0; p1_y = height / 3; - p2_x = 0; p2_y = round(2. * height_f / 3.); + p1_x = 0; p1_y = buf->y_thirds[1]; + p2_x = 0; p2_y = buf->y_thirds[2]; p3_x = width; p3_y = p2_y; break; case 0x1fb5c: /* ๐Ÿญœ */ - p1_x = 0; p1_y = height / 3; - p2_x = 0; p2_y = round(2. * height_f / 3.); + p1_x = 0; p1_y = buf->y_thirds[1]; + p2_x = 0; p2_y = buf->y_thirds[2]; p3_x = width; p3_y = p1_y; break; case 0x1fb67: /* ๐Ÿญง */ - p1_x = 0; p1_y = height / 3; + p1_x = 0; p1_y = buf->y_thirds[1]; p2_x = width; p2_y = p1_y; - p3_x = width; p3_y = round(2. * height_f / 3.); + p3_x = width; p3_y = buf->y_thirds[2]; break; case 0x1fb6c: /* ๐Ÿญฌ */ case 0x1fb68: /* ๐Ÿญจ */ p1_x = 0; p1_y = 0; - p2_x = round(width_f / 2.); p2_y = round(height_f / 2.); + p2_x = buf->x_halfs[0]; p2_y = height / 2; p3_x = 0; p3_y = height; break; case 0x1fb6d: /* ๐Ÿญญ */ case 0x1fb69: /* ๐Ÿญฉ */ p1_x = 0; p1_y = 0; - p2_x = width / 2; p2_y = round(height_f / 2.); + p2_x = buf->x_halfs[1]; p2_y = height / 2; p3_x = width; p3_y = 0; break; case 0x1fb6e: /* ๐Ÿญฎ */ case 0x1fb6a: /* ๐Ÿญช */ p1_x = width; p1_y = 0; - p2_x = width / 2; p2_y = round(height_f / 2.); + p2_x = buf->x_halfs[1]; p2_y = height / 2; p3_x = width; p3_y = height; break; case 0x1fb6f: /* ๐Ÿญฏ */ case 0x1fb6b: /* ๐Ÿญซ */ p1_x = 0; p1_y = height; - p2_x = width / 2; p2_y = round(height_f / 2.); + p2_x = buf->x_halfs[1]; p2_y = height / 2; p3_x = width; p3_y = height; break; @@ -2400,7 +2398,7 @@ draw_wedge_triangle_and_box(struct buf *buf, wchar_t wc) case 0x1fb46: case 0x1fb51: box = (pixman_box32_t){ - .x1 = 0, .y1 = round(2. * height / 3.), + .x1 = 0, .y1 = buf->y_thirds[2], .x2 = width, .y2 = height, }; break; @@ -2409,7 +2407,7 @@ draw_wedge_triangle_and_box(struct buf *buf, wchar_t wc) case 0x1fb67: box = (pixman_box32_t){ .x1 = 0, .y1 = 0, - .x2 = width, .y2 = height / 3, + .x2 = width, .y2 = buf->y_thirds[1], }; break; }