When e3 is zero, don't adjust the minor position based on
the major as it doesn't move.
Signed-off-by: Keith Packard <keithp@keithp.com>
* isn't symmetrical when the line passes exactly between
* two pixels, we have to pick which one gets drawn
*/
* isn't symmetrical when the line passes exactly between
* two pixels, we have to pick which one gets drawn
*/
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 (!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);
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);