Merge branch 'box-drawing-realign-sextants-and-wedges'

This commit is contained in:
Daniel Eklöf 2021-08-06 22:30:45 +02:00
commit 7f62e4398d
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

View file

@ -34,7 +34,7 @@ struct buf {
/* For sextants and wedges */ /* For sextants and wedges */
int x_halfs[2]; int x_halfs[2];
int y_thirds[4]; int y_thirds[2];
}; };
static const pixman_color_t white = {0xffff, 0xffff, 0xffff, 0xffff}; static const pixman_color_t white = {0xffff, 0xffff, 0xffff, 0xffff};
@ -1967,13 +1967,13 @@ sextant_upper_left(struct buf *buf)
static void static void
sextant_middle_left(struct buf *buf) sextant_middle_left(struct buf *buf)
{ {
rect(0, buf->y_thirds[1], buf->x_halfs[0], buf->y_thirds[2]); rect(0, buf->y_thirds[0], buf->x_halfs[0], buf->y_thirds[1]);
} }
static void static void
sextant_lower_left(struct buf *buf) sextant_lower_left(struct buf *buf)
{ {
rect(0, buf->y_thirds[3], buf->x_halfs[0], buf->height); rect(0, buf->y_thirds[1], buf->x_halfs[0], buf->height);
} }
static void static void
@ -1985,13 +1985,13 @@ sextant_upper_right(struct buf *buf)
static void static void
sextant_middle_right(struct buf *buf) sextant_middle_right(struct buf *buf)
{ {
rect(buf->x_halfs[1], buf->y_thirds[1], buf->width, buf->y_thirds[2]); rect(buf->x_halfs[1], buf->y_thirds[0], buf->width, buf->y_thirds[1]);
} }
static void static void
sextant_lower_right(struct buf *buf) sextant_lower_right(struct buf *buf)
{ {
rect(buf->x_halfs[1], buf->y_thirds[3], buf->width, buf->height); rect(buf->x_halfs[1], buf->y_thirds[1], buf->width, buf->height);
} }
static void NOINLINE static void NOINLINE
@ -2122,35 +2122,33 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
int halfs1 = buf->x_halfs[1]; int halfs1 = buf->x_halfs[1];
int thirds0 = buf->y_thirds[0]; int thirds0 = buf->y_thirds[0];
int thirds1 = buf->y_thirds[1]; int thirds1 = buf->y_thirds[1];
int thirds2 = buf->y_thirds[2];
int thirds3 = buf->y_thirds[3];
int p1_x, p1_y, p2_x, p2_y, p3_x, p3_y; int p1_x, p1_y, p2_x, p2_y, p3_x, p3_y;
switch (wc) { switch (wc) {
case 0x1fb3c: /* 🬼 */ case 0x1fb3c: /* 🬼 */
p1_x = p2_x = 0; p3_x = halfs0; p1_x = p2_x = 0; p3_x = halfs0;
p1_y = thirds3; p2_y = p3_y = height; p1_y = thirds1; p2_y = p3_y = height;
break; break;
case 0x1fb52: /* 🭒 */ case 0x1fb52: /* 🭒 */
p1_x = p2_x = 0; p3_x = halfs0; p1_x = p2_x = 0; p3_x = halfs0;
p1_y = thirds2; p2_y = p3_y = height; p1_y = thirds1; p2_y = p3_y = height;
break; break;
case 0x1fb3d: /* 🬽 */ case 0x1fb3d: /* 🬽 */
p1_x = p2_x = 0; p3_x = width; p1_x = p2_x = 0; p3_x = width;
p1_y = thirds3; p2_y = p3_y = height; p1_y = thirds1; p2_y = p3_y = height;
break; break;
case 0x1fb53: /* 🭓 */ case 0x1fb53: /* 🭓 */
p1_x = p2_x = 0; p3_x = width; p1_x = p2_x = 0; p3_x = width;
p1_y = thirds2; p2_y = p3_y = height; p1_y = thirds1; p2_y = p3_y = height;
break; break;
case 0x1fb3e: /* 🬾 */ case 0x1fb3e: /* 🬾 */
p1_x = p2_x = 0; p3_x = halfs0; p1_x = p2_x = 0; p3_x = halfs0;
p1_y = thirds1; p2_y = p3_y = height; p1_y = thirds0; p2_y = p3_y = height;
break; break;
case 0x1fb54: /* 🭔 */ case 0x1fb54: /* 🭔 */
@ -2160,7 +2158,7 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
case 0x1fb3f: /* 🬿 */ case 0x1fb3f: /* 🬿 */
p1_x = p2_x = 0; p3_x = width; p1_x = p2_x = 0; p3_x = width;
p1_y = thirds1; p2_y = p3_y = height; p1_y = thirds0; p2_y = p3_y = height;
break; break;
case 0x1fb55: /* 🭕 */ case 0x1fb55: /* 🭕 */
@ -2176,27 +2174,27 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
case 0x1fb47: /* 🭇 */ case 0x1fb47: /* 🭇 */
p1_x = p2_x = width; p3_x = halfs1; p1_x = p2_x = width; p3_x = halfs1;
p1_y = thirds3; p2_y = p3_y = height; p1_y = thirds1; p2_y = p3_y = height;
break; break;
case 0x1fb5d: /* 🭝 */ case 0x1fb5d: /* 🭝 */
p1_x = p2_x = width; p3_x = halfs1; p1_x = p2_x = width; p3_x = halfs1;
p1_y = thirds2; p2_y = p3_y = height; p1_y = thirds1; p2_y = p3_y = height;
break; break;
case 0x1fb48: /* 🭈 */ case 0x1fb48: /* 🭈 */
p1_x = p2_x = width; p3_x = 0; p1_x = p2_x = width; p3_x = 0;
p1_y = thirds3; p2_y = p3_y = height; p1_y = thirds1; p2_y = p3_y = height;
break; break;
case 0x1fb5e: /* 🭞 */ case 0x1fb5e: /* 🭞 */
p1_x = p2_x = width; p3_x = 0; p1_x = p2_x = width; p3_x = 0;
p1_y = thirds2; p2_y = p3_y = height; p1_y = thirds1; p2_y = p3_y = height;
break; break;
case 0x1fb49: /* 🭉 */ case 0x1fb49: /* 🭉 */
p1_x = p2_x = width; p3_x = halfs1; p1_x = p2_x = width; p3_x = halfs1;
p1_y = thirds1; p2_y = p3_y = height; p1_y = thirds0; p2_y = p3_y = height;
break; break;
case 0x1fb5f: /* 🭟 */ case 0x1fb5f: /* 🭟 */
@ -2206,7 +2204,7 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
case 0x1fb4a: /* 🭊 */ case 0x1fb4a: /* 🭊 */
p1_x = p2_x = width; p3_x = 0; p1_x = p2_x = width; p3_x = 0;
p1_y = thirds1; p2_y = p3_y = height; p1_y = thirds0; p2_y = p3_y = height;
break; break;
case 0x1fb60: /* 🭠 */ case 0x1fb60: /* 🭠 */
@ -2227,7 +2225,7 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
case 0x1fb41: /* 🭁 */ case 0x1fb41: /* 🭁 */
p1_x = p2_x = 0; p3_x = halfs0; p1_x = p2_x = 0; p3_x = halfs0;
p1_y = p3_y = 0; p2_y = thirds1; p1_y = p3_y = 0; p2_y = thirds0;
break; break;
case 0x1fb58: /* 🭘 */ case 0x1fb58: /* 🭘 */
@ -2237,27 +2235,27 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
case 0x1fb42: /* 🭂 */ case 0x1fb42: /* 🭂 */
p1_x = p2_x = 0; p3_x = width; p1_x = p2_x = 0; p3_x = width;
p1_y = p3_y = 0; p2_y = thirds1; p1_y = p3_y = 0; p2_y = thirds0;
break; break;
case 0x1fb59: /* 🭙 */ case 0x1fb59: /* 🭙 */
p1_x = p2_x = 0; p3_x = halfs0; p1_x = p2_x = 0; p3_x = halfs0;
p1_y = p3_y = 0; p2_y = thirds2; p1_y = p3_y = 0; p2_y = thirds1;
break; break;
case 0x1fb43: /* 🭃 */ case 0x1fb43: /* 🭃 */
p1_x = p2_x = 0; p3_x = halfs0; p1_x = p2_x = 0; p3_x = halfs0;
p1_y = p3_y = 0; p2_y = thirds3; p1_y = p3_y = 0; p2_y = thirds1;
break; break;
case 0x1fb5a: /* 🭚 */ case 0x1fb5a: /* 🭚 */
p1_x = p2_x = 0; p3_x = width; p1_x = p2_x = 0; p3_x = width;
p1_y = p3_y = 0; p2_y = thirds2; p1_y = p3_y = 0; p2_y = thirds1;
break; break;
case 0x1fb44: /* 🭄 */ case 0x1fb44: /* 🭄 */
p1_x = p2_x = 0; p3_x = width; p1_x = p2_x = 0; p3_x = width;
p1_y = p3_y = 0; p2_y = thirds3; p1_y = p3_y = 0; p2_y = thirds1;
break; break;
case 0x1fb5b: /* 🭛 */ case 0x1fb5b: /* 🭛 */
@ -2273,7 +2271,7 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
case 0x1fb4c: /* 🭌 */ case 0x1fb4c: /* 🭌 */
p1_x = p2_x = width; p3_x = halfs1; p1_x = p2_x = width; p3_x = halfs1;
p1_y = p3_y = 0; p2_y = thirds1; p1_y = p3_y = 0; p2_y = thirds0;
break; break;
case 0x1fb63: /* 🭣 */ case 0x1fb63: /* 🭣 */
@ -2283,27 +2281,27 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
case 0x1fb4d: /* 🭍 */ case 0x1fb4d: /* 🭍 */
p1_x = p2_x = width; p3_x = 0; p1_x = p2_x = width; p3_x = 0;
p1_y = p3_y = 0; p2_y = thirds1; p1_y = p3_y = 0; p2_y = thirds0;
break; break;
case 0x1fb64: /* 🭤 */ case 0x1fb64: /* 🭤 */
p1_x = p2_x = width; p3_x = halfs1; p1_x = p2_x = width; p3_x = halfs1;
p1_y = p3_y = 0; p2_y = thirds2; p1_y = p3_y = 0; p2_y = thirds1;
break; break;
case 0x1fb4e: /* 🭎 */ case 0x1fb4e: /* 🭎 */
p1_x = p2_x = width; p3_x = halfs1; p1_x = p2_x = width; p3_x = halfs1;
p1_y = p3_y = 0; p2_y = thirds3; p1_y = p3_y = 0; p2_y = thirds1;
break; break;
case 0x1fb65: /* 🭥 */ case 0x1fb65: /* 🭥 */
p1_x = p2_x = width; p3_x = 0; p1_x = p2_x = width; p3_x = 0;
p1_y = p3_y = 0; p2_y = thirds2; p1_y = p3_y = 0; p2_y = thirds1;
break; break;
case 0x1fb4f: /* 🭏 */ case 0x1fb4f: /* 🭏 */
p1_x = p2_x = width; p3_x = 0; p1_x = p2_x = width; p3_x = 0;
p1_y = p3_y = 0; p2_y = thirds3; p1_y = p3_y = 0; p2_y = thirds1;
break; break;
case 0x1fb66: /* 🭦 */ case 0x1fb66: /* 🭦 */
@ -2313,27 +2311,27 @@ draw_wedge_triangle(struct buf *buf, wchar_t wc)
break; break;
case 0x1fb46: /* 🭆 */ case 0x1fb46: /* 🭆 */
p1_x = 0; p1_y = thirds2; p1_x = 0; p1_y = thirds1;
p2_x = width; p2_y = thirds1; p2_x = width; p2_y = thirds0;
p3_x = width; p3_y = p1_y; p3_x = width; p3_y = p1_y;
break; break;
case 0x1fb51: /* 🭑 */ case 0x1fb51: /* 🭑 */
p1_x = 0; p1_y = thirds1; p1_x = 0; p1_y = thirds0;
p2_x = 0; p2_y = thirds2; p2_x = 0; p2_y = thirds1;
p3_x = width; p3_y = p2_y; p3_x = width; p3_y = p2_y;
break; break;
case 0x1fb5c: /* 🭜 */ case 0x1fb5c: /* 🭜 */
p1_x = 0; p1_y = thirds1; p1_x = 0; p1_y = thirds0;
p2_x = 0; p2_y = thirds2; p2_x = 0; p2_y = thirds1;
p3_x = width; p3_y = p1_y; p3_x = width; p3_y = p1_y;
break; break;
case 0x1fb67: /* 🭧 */ case 0x1fb67: /* 🭧 */
p1_x = 0; p1_y = thirds1; p1_x = 0; p1_y = thirds0;
p2_x = width; p2_y = p1_y; p2_x = width; p2_y = p1_y;
p3_x = width; p3_y = thirds2; p3_x = width; p3_y = thirds1;
break; break;
case 0x1fb6c: /* 🭬 */ case 0x1fb6c: /* 🭬 */
@ -2405,7 +2403,7 @@ draw_wedge_triangle_and_box(struct buf *buf, wchar_t wc)
case 0x1fb46: case 0x1fb46:
case 0x1fb51: case 0x1fb51:
box = (pixman_box32_t){ box = (pixman_box32_t){
.x1 = 0, .y1 = buf->y_thirds[2], .x1 = 0, .y1 = buf->y_thirds[1],
.x2 = width, .y2 = height, .x2 = width, .y2 = height,
}; };
break; break;
@ -2414,7 +2412,7 @@ draw_wedge_triangle_and_box(struct buf *buf, wchar_t wc)
case 0x1fb67: case 0x1fb67:
box = (pixman_box32_t){ box = (pixman_box32_t){
.x1 = 0, .y1 = 0, .x1 = 0, .y1 = 0,
.x2 = width, .y2 = buf->y_thirds[1], .x2 = width, .y2 = buf->y_thirds[0],
}; };
break; break;
} }
@ -2769,13 +2767,30 @@ box_drawing(const struct terminal *term, wchar_t wc)
buf.thickness[LIGHT] = _thickness(&buf, LIGHT); buf.thickness[LIGHT] = _thickness(&buf, LIGHT);
buf.thickness[HEAVY] = _thickness(&buf, HEAVY); buf.thickness[HEAVY] = _thickness(&buf, HEAVY);
buf.x_halfs[0] = round(width / 2.); /* End point first half */ /* Overlap when width is odd */
buf.x_halfs[1] = width / 2; /* Start point second half */ buf.x_halfs[0] = round(width / 2.); /* Endpoint first half */
buf.x_halfs[1] = width / 2; /* Startpoint second half */
buf.y_thirds[0] = round(height / 3.); /* End point first third */ int y0 = 0, y1 = 0;
buf.y_thirds[1] = height / 3; /* Start point second third */ switch (height % 3) {
buf.y_thirds[2] = round(2. * height / 3.); /* End point second third */ case 0:
buf.y_thirds[3] = 2 * height / 3; /* Start point last third */ y0 = height / 3;
y1 = 2 * height / 3;
break;
case 1:
y0 = height / 3;
y1 = 2 * height / 3 + 1;
break;
case 2:
y0 = height / 3 + 1;
y1 = y0 + height / 3;
break;
}
buf.y_thirds[0] = y0; /* Endpoint first third, start point second third */
buf.y_thirds[1] = y1; /* Endpoint second third, start point last third */
LOG_DBG("LIGHT=%d, HEAVY=%d", LOG_DBG("LIGHT=%d, HEAVY=%d",
_thickness(&buf, LIGHT), _thickness(&buf, HEAVY)); _thickness(&buf, LIGHT), _thickness(&buf, HEAVY));