From 6394680d1e9ff8596068a73eb43e4adc45722455 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 8 Mar 2023 15:50:57 -0800 Subject: [PATCH] altos/draw: Skip line adjustment for vertical/horizontal When e3 is zero, don't adjust the minor position based on the major as it doesn't move. Signed-off-by: Keith Packard --- src/draw/ao_line.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/draw/ao_line.c b/src/draw/ao_line.c index 14e1a3c1..38314542 100644 --- a/src/draw/ao_line.c +++ b/src/draw/ao_line.c @@ -209,26 +209,25 @@ ao_clip_line(struct ao_cc *c, struct ao_cbox *b) * isn't symmetrical when the line passes exactly between * two pixels, we have to pick which one gets drawn */ - int32_t adj_min; - if (c->e3) { + int32_t adj_min; + if (!c->first) adj_min = div_ceil(c->e + adjust_major * c->e1, -c->e3); else adj_min = div_floor_plus_one(c->e + adjust_major * c->e1, -c->e3); - } - if (adj_min < adjust_minor) { - if (c->e1) { - if (c->first) - adjust_major = div_ceil(c->e - adjust_minor * c->e3, c->e1); - else - adjust_major = div_floor_plus_one(c->e - adjust_minor * c->e3, c->e1); + if (adj_min < adjust_minor) { + if (c->e1) { + if (c->first) + adjust_major = div_ceil(c->e - adjust_minor * c->e3, c->e1); + else + adjust_major = div_floor_plus_one(c->e - adjust_minor * c->e3, c->e1); + } + } else { + adjust_minor = adj_min; } - } else { - adjust_minor = adj_min; } - c->e = (int16_t) (c->e + adjust_major * c->e1 + adjust_minor * c->e3); c->major = (int16_t) (c->major + c->sign_major * adjust_major); -- 2.30.2