altos/draw: Add transforms to polygon code
[fw/altos] / src / draw / ao_line.c
index ed1fc21c89b38c592f841543316816a6a34823e9..c6b49ee0d6cb1fd71ffe83f3b1369cedeeb15896 100644 (file)
@@ -12,7 +12,6 @@
  * General Public License for more details.
  */
 
-#include "ao.h"
 #include "ao_draw.h"
 #include "ao_draw_int.h"
 
@@ -80,12 +79,12 @@ ao_bres(const struct ao_bitmap      *dst_bitmap,
        if (signdx < 0)
                mask0 = ao_right(1, AO_UNIT - 1);
 
-       if (signdy < 0)
-               stride = -stride;
-
        dst = dst + y1 * stride + (x1 >> AO_SHIFT);
        mask = ao_right(1, x1 & AO_MASK);
 
+       if (signdy < 0)
+               stride = -stride;
+
        while (len--) {
                /* clip each point */
 
@@ -143,12 +142,12 @@ struct ao_cbox {
 /* -b <= a, so we need to make a bigger */
 static int16_t
 div_ceil(int32_t a, int16_t b) {
-       return (a + b + b - 1) / b - 1;
+       return (int16_t) ((a + b + b - 1) / b - 1);
 }
 
 static int16_t
 div_floor_plus_one(int32_t a, int16_t b) {
-       return (a + b) / b;
+       return (int16_t) ((a + b) / b);
 }
 
 static int8_t
@@ -159,28 +158,28 @@ ao_clip_line(struct ao_cc *c, struct ao_cbox *b)
        /* Clip major axis */
        if (c->major < b->maj1) {
                if (c->sign_major <= 0)
-                       return FALSE;
+                       return false;
                adjust_major = b->maj1 - c->major;
        } else if (c->major >= b->maj2) {
                if (c->sign_major >= 0)
-                       return FALSE;
+                       return false;
                adjust_major = c->major - (b->maj2-1);
        }
 
        /* Clip minor axis */
        if (c->minor < b->min1) {
                if (c->sign_minor <= 0)
-                       return FALSE;
+                       return false;
                adjust_minor = b->min1 - c->minor;
        } else if (c->minor >= b->min2) {
                if (c->sign_minor >= 0)
-                       return FALSE;
+                       return false;
                adjust_minor = c->minor - (b->min2-1);
        }
 
        /* If unclipped, we're done */
        if (adjust_major == 0 && adjust_minor == 0)
-               return TRUE;
+               return true;
 
        /* See how much minor adjustment would happen during
         * a major clip. This is a bit tricky because line drawing
@@ -203,12 +202,12 @@ ao_clip_line(struct ao_cc *c, struct ao_cbox *b)
                adjust_minor = adj_min;
        }
 
-       c->e += adjust_major * c->e1 + adjust_minor * c->e3;
+       c->e = (int16_t) (c->e + adjust_major * c->e1 + adjust_minor * c->e3);
 
-       c->major += c->sign_major * adjust_major;
-       c->minor += c->sign_minor * adjust_minor;
+       c->major = (int16_t) (c->major + c->sign_major * adjust_major);
+       c->minor = (int16_t) (c->minor + c->sign_minor * adjust_minor);
 
-       return TRUE;
+       return true;
 }
 
 void
@@ -240,7 +239,7 @@ ao_line(const struct ao_bitmap      *dst,
        if (adx > ady) {
                axis = X_AXIS;
                e1 = ady << 1;
-               e2 = e1 - (adx << 1);
+               e2 = e1 - (int16_t) (adx << 1);
                e = e1 - adx;
 
                clip_1.major = x1;
@@ -257,7 +256,7 @@ ao_line(const struct ao_bitmap      *dst,
        } else {
                axis = Y_AXIS;
                e1 = adx << 1;
-               e2 = e1 - (ady << 1);
+               e2 = e1 - (int16_t) (ady << 1);
                e = e1 - ady;
 
                clip_1.major = y1;
@@ -276,8 +275,8 @@ ao_line(const struct ao_bitmap      *dst,
        e3 = e2 - e1;
        e = e - e1;
 
-       clip_1.first = TRUE;
-       clip_2.first = FALSE;
+       clip_1.first = true;
+       clip_2.first = false;
        clip_2.e = clip_1.e = e;
        clip_2.e1 = clip_1.e1 = e1;
        clip_2.e3 = clip_1.e3 = e3;
@@ -290,7 +289,7 @@ ao_line(const struct ao_bitmap      *dst,
        if (!ao_clip_line(&clip_2, &cbox))
                return;
 
-       len = clip_1.sign_major * (clip_2.major - clip_1.major) + clip_2.first;
+       len = (int16_t) (clip_1.sign_major * (clip_2.major - clip_1.major) + clip_2.first);
 
        if (len <= 0)
                return;