* General Public License for more details.
*/
-#include "ao_draw.h"
-#include "ao_draw_int.h"
+#include <ao_draw.h>
+#include <ao_draw_int.h>
#define ao_mask(x,w) (ao_right(AO_ALLONES,(x) & AO_MASK) & \
ao_left(AO_ALLONES,(FB_UNIT - ((x)+(w))) & AO_MASK))
* 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);
}
void
-ao_line(const struct ao_bitmap *dst,
+ao_line(struct ao_bitmap *dst,
int16_t x1,
int16_t y1,
int16_t x2,
if (adx > ady) {
x1 = clip_1.major;
y1 = clip_1.minor;
+ x2 = clip_2.major;
+ y2 = clip_2.minor;
} else {
x1 = clip_1.minor;
y1 = clip_1.major;
+ x2 = clip_2.minor;
+ y2 = clip_2.major;
}
+
+ ao_damage(dst, ao_min16(x1, x2), ao_max16(x1, x2), ao_min16(y1, y2), ao_max16(y1, y2));
+
ao_bres(dst,
signdx,
signdy,