Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/engines/common


Modified Files:
        evas_line_main.c 


Log Message:
\r\n -> \n

===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/engines/common/evas_line_main.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- evas_line_main.c    16 May 2006 08:52:05 -0000      1.15
+++ evas_line_main.c    8 Jun 2006 08:11:19 -0000       1.16
@@ -1,634 +1,634 @@
-#include "evas_common.h"

-

-

-static void

-_evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y);

-

-static void

-_evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, 
int x1, int y1);

-

-static void

-_evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int 
x1, int y1);

-

-static void

-_evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int 
x1, int y1);

-

-

-#define IN_RANGE(x, y, w, h) \

-( ((unsigned)(x) < (w)) && ((unsigned)(y) < (h)) )

-

-#define IN_RECT(x, y, rx, ry, rw, rh) \

-( ((unsigned)((x) - (rx)) < (rw)) && ((unsigned)((y) - (ry)) < (rh)) )

-

-#define EXCHANGE_POINTS(x0, y0, x1, y1) \

-{ \

-       int _tmp = y0; \

-  \

-       y0 = y1;   \

-       y1 = _tmp; \

-  \

-       _tmp = x0; \

-       x0 = x1;   \

-       x1 = _tmp; \

-}

-

-

-void

-evas_common_line_init(void)

-{

-}

-

-void

-evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, 
int x1, int y1)

-{

-   int  x, y, w, h;

-   int  clx, cly, clw, clh;

-   int  cuse, cx, cy, cw, ch;

-

-   if ((x0 == x1) && (y0 == y1))

-     {

-       _evas_draw_point(dst, dc, x0, y0);

-       return;

-     }

-

-   clx = cly = 0;

-   clw = dst->image->w;

-   clh = dst->image->h;

-

-   /* save out clip info */

-   cuse = dc->clip.use;

-   cx = dc->clip.x;

-   cy = dc->clip.y;

-   cw = dc->clip.w;

-   ch = dc->clip.h;

-

-   if (cuse)

-     {

-       RECTS_CLIP_TO_RECT(clx, cly, clw, clh, cx, cy, cw, ch);

-       if ((clw < 1) || (clh < 1))

-          return;

-     }

-

-   x = MIN(x0, x1);

-   y = MIN(y0, y1);

-   w = MAX(x0, x1) - x + 1;

-   h = MAX(y0, y1) - y + 1;

-

-   RECTS_CLIP_TO_RECT(clx, cly, clw, clh, x, y, w, h);

-   if ((clw < 1) || (clh < 1))

-       return;

-

-   dc->clip.use = 1;

-   dc->clip.x = clx;

-   dc->clip.y = cly;

-   dc->clip.w = clw;

-   dc->clip.h = clh;

-

-   if (dc->anti_alias)

-       _evas_draw_line_aa(dst, dc, x0, y0, x1, y1);

-   else

-       _evas_draw_line(dst, dc, x0, y0, x1, y1);

-

-   /* restore clip info */

-   dc->clip.use = cuse;

-   dc->clip.x = cx;

-   dc->clip.y = cy;

-   dc->clip.w = cw;

-   dc->clip.h = ch;

-   evas_common_cpu_end_opt();

-}

-

-

-static void

-_evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y)

-{

-   RGBA_Gfx_Pt_Func pfunc;

-

-   if (!IN_RANGE(x, y, dst->image->w, dst->image->h))

-       return;

-   if ((dc->clip.use) && (!IN_RECT(x, y, dc->clip.x, dc->clip.y, dc->clip.w, 
dc->clip.h)))

-       return;

-   pfunc = evas_common_gfx_func_composite_color_pt_get(dc->col.col, dst, 
dc->render_op);

-   if (pfunc)

-       pfunc(0, 255, dc->col.col, dst->image->data + (dst->image->w * y) + x);

-}

-

-/*

-   these functions use the dc->clip data as bounding

-   data. they assume that such data has already been cut

-   back to lie in the dst image rect and the object's

-   (line) bounding rect.

-*/

-static void

-_evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, 
int x1, int y1)

-{

-   int     dx, dy, len, lx, ty, rx, by;

-   int     clx, cly, clw, clh;

-   int     dstw;

-   DATA32  *p, color;

-   RGBA_Gfx_Pt_Func pfunc;

-   RGBA_Gfx_Func    sfunc;

-

-   dstw = dst->image->w;

-   color = dc->col.col;

-

-   if (y0 > y1)

-      EXCHANGE_POINTS(x0, y0, x1, y1)

-   if (x0 > x1)

-      EXCHANGE_POINTS(x0, y0, x1, y1)

-

-   dx = x1 - x0;

-   dy = y1 - y0;

-

-   clx = dc->clip.x;

-   cly = dc->clip.y;

-   clw = dc->clip.w;

-   clh = dc->clip.h;

-

-   lx = clx;

-   rx = clx + clw - 1;

-   ty = cly;

-   by = cly + clh - 1;

-

-   if (dy == 0)

-     {

-       if ((y0 >= ty) && (y0 <= by))

-         {

-            if (dx < 0)

-              {

-                 int  tmp = x1;

-                 

-                 x1 = x0;

-                 x0 = tmp;

-              }

-            

-            if (x0 < lx) x0 = lx;

-            if (x1 > rx) x1 = rx;

-            

-            len = x1 - x0 + 1;

-            p = dst->image->data + (dstw * y0) + x0;

-            sfunc = evas_common_gfx_func_composite_color_span_get(color, dst, 
len, dc->render_op);

-            if (sfunc)

-              sfunc(NULL, NULL, color, p, len);

-         }

-       return;

-     }

-

-   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, 
dc->render_op);

-   if (!pfunc) return;

-

-   if (dx == 0)

-     {

-       if ((x0 >= lx) && (x0 <= rx))

-         {

-            if (y0 < ty) y0 = ty;

-            if (y1 > by) y1 = by;

-            

-            len = y1 - y0 + 1;

-            p = dst->image->data + (dstw * y0) + x0;

-            while (len--)

-              {

-                 pfunc(0, 255, color, p);

-                 p += dstw;

-              }

-         }

-       return;

-     }

-

-   if ((dy == dx) || (dy == -dx))

-     {

-       int   p0_in, p1_in;

-

-       p0_in = (IN_RECT(x0, y0, clx, cly, clw, clh) ? 1 : 0);  

-       p1_in = (IN_RECT(x1, y1, clx, cly, clw, clh) ? 1 : 0);

-

-       if (dx > 0)

-         {

-           if (!p0_in)

-             {

-               x0 = x0 + (ty - y0);

-               y0 = ty;

-               if (x0 > rx) return;

-               if (x0 < lx)

-                 {

-                   y0 = y0 + (lx - x0);

-                   x0 = lx;

-                   if ((y0 < ty) || (y0 > by)) return;

-                 }

-             }

-           if (!p1_in)

-             {

-               x1 = x0 + (by - y0);

-               y1 = by;

-               if (x1 < lx) return;

-               if (x1 > rx)

-                 {

-                   y1 = y0 + (rx - x0);

-                   x1 = rx;

-                   if ((y1 < ty) || (y1 > by)) return;

-                 }

-             }

-         }

-       else

-         {

-           if (!p0_in)

-             {

-               x0 = x0 - (ty - y0);

-               y0 = ty;

-               if (x0 < lx) return;

-               if (x0 > rx)

-                 {

-                   y0 = y0 - (rx - x0);

-                   x0 = rx;

-                   if ((y0 < ty) || (y0 > by)) return;

-                 }

-             }

-           if (!p1_in)

-             {

-               x1 = x0 - (by - y0);

-               y1 = by;

-               if (x1 > rx) return;

-               if (x1 < lx)

-                 {

-                   y1 = y0 - (lx - x0);

-                   x1 = lx;

-                   if ((y1 < ty) || (y1 > by)) return;

-                 }

-             }

-         }

-       if (y1 > y0)

-         {

-            p = dst->image->data + (dstw * y0) + x0;

-            len = y1 - y0 + 1;

-            if (dx > 0)  dstw++;

-            else  dstw--;

-         }

-       else

-         {

-            len = y0 - y1 + 1;

-            p = dst->image->data + (dstw * y1) + x1;

-            if (dx > 0)  dstw--;

-            else  dstw++;

-         }

-

-       while (len--)

-         {

-           pfunc(0, 255, color, p);

-           p += dstw;

-         }

-     }

-}

-

-

-#define SETUP_LINE_SHALLOW             \

-       if (x0 > x1)                                                    \

-         {                                                                     
\

-          EXCHANGE_POINTS(x0, y0, x1, y1)                              \

-          dx = -dx;                                                    \

-          dy = -dy;                                                    \

-         }                                                                     
\

-                                                                               
\

-       px = x0;                                                                
\

-       py = y0;                                                                
\

-                                                                               
\

-       p0_in = (IN_RANGE(x0 , y0 , clw, clh) ? 1 : 0);         \

-       p1_in = (IN_RANGE(x1 , y1 , clw, clh) ? 1 : 0);         \

-                                                                               
\

-       dely = 1;                                                               
\

-       dh = dstw;                                                              
\

-       if (dy < 0)                                                             
\

-         {                                                                     
\

-          dely = -1;                                                   \

-          dh = -dstw;                                                  \

-         }                                                                     
\

-                                                                               
\

-       dyy = ((dy) << 16) / (dx);                                              
\

-                                                                               
\

-       if (!p0_in)                                                             
\

-         {                                                                     
\

-          dxx = ((dx) << 16) / (dy);                                   \

-          if (px < 0)                                                  \

-            {                                                          \

-               x = -px;  px = 0;                                               
\

-               yy = x * dyy;                                           \

-               y = yy >> 16;                                           \

-               if (!a_a)                                                       
\

-                   y += (yy - (y << 16)) >> 15;                        \

-               py += y;                                                        
\

-               if ((dely > 0) && (py >= clh))                  \

-                  return;                                                      
\

-               else if ((dely < 0) && (py < -1))                       \

-                  return;                                                      
\

-            }                                                          \

-                                                                               
\

-          y = 0;                                                               
\

-          if ((dely > 0) && (py < -1))                         \

-               y = (-1 - py);                                          \

-          else if ((dely < 0) && (py >= clh))                  \

-               y = (clh - 1 - py);                                     \

-                                                                               
\

-          xx = y * dxx;                                                        
\

-          x = xx >> 16;                                                        
\

-          if (!a_a)                                                    \

-              x += (xx - (x << 16)) >> 15;                     \

-          px += x;                                                             
\

-          if (px >= clw) return;                                       \

-                                                                               
\

-          yy = x * dyy;                                                        
\

-          y = yy >> 16;                                                        
\

-          if (!a_a)                                                    \

-              y += (yy - (y << 16)) >> 15;                     \

-          py += y;                                                             
\

-          if ((dely > 0) && (py >= clh))                               \

-                return;                                                        
\

-          else if ((dely < 0) && (py < -1))                    \

-                return;                                                        
\

-         }                                                                     
\

-                                                                               
\

-       p = data + (dstw * py) + px;                                    \

-                                                                               
\

-       x = px - x0;                                                    \

-       yy = x * dyy;                                                   \

-       prev_y = (yy >> 16);                                            \

-                                                                               
\

-       rx = MIN(x1 + 1, clw);                                          \

-       by = clh - 1;

-

-

-#define SETUP_LINE_STEEP               \

-   if (y0 > y1)                                                                
\

-     {                                                                 \

-       EXCHANGE_POINTS(x0, y0, x1, y1)                         \

-       dx = -dx;                                                               
\

-       dy = -dy;                                                               
\

-     }                                                                 \

-                                                                               
\

-   px = x0;                                                                    
\

-   py = y0;                                                                    
\

-                                                                               
\

-   p0_in = (IN_RANGE(x0 , y0 , clw, clh) ? 1 : 0);             \

-   p1_in = (IN_RANGE(x1 , y1 , clw, clh) ? 1 : 0);             \

-                                                                               
\

-   delx = 1;                                                           \

-   if (dx < 0)                                                         \

-       delx = -1;                                                              
\

-                                                                               
\

-   dxx = ((dx) << 16) / (dy);                                          \

-                                                                               
\

-   if (!p0_in)                                                         \

-     {                                                                 \

-       dyy = ((dy) << 16) / (dx);                                              
\

-                                                                               
\

-       if (py < 0)                                                             
\

-         {                                                                     
\

-          y = -py;  py = 0;                                            \

-          xx = y * dxx;                                                        
\

-          x = xx >> 16;                                                        
\

-          if (!a_a)                                                    \

-              x += (xx - (x << 16)) >> 15;                     \

-          px += x;                                                             
\

-          if ((delx > 0) && (px >= clw))                               \

-               return;                                                 \

-          else if ((delx < 0) && (px < -1))                    \

-               return;                                                 \

-         }                                                                     
\

-                                                                               
\

-       x = 0;                                                          \

-       if ((delx > 0) && (px < -1))                                    \

-          x = (-1 - px);                                                       
\

-       else if ((delx < 0) && (px >= clw))                             \

-          x = (clw - 1 - px);                                          \

-                                                                               
\

-       yy = x * dyy;                                                   \

-       y = yy >> 16;                                                   \

-       if (!a_a)                                                               
\

-           y += (yy - (y << 16)) >> 15;                                \

-       py += y;                                                                
\

-       if (py >= clh) return;                                          \

-                                                                               
\

-       xx = y * dxx;                                                   \

-       x = xx >> 16;                                                   \

-        if (!a_a)                                                              
\

-           x += (xx - (x << 16)) >> 15;                                \

-       px += x;                                                                
\

-       if ((delx > 0) && (px >= clw))                          \

-          return;                                                              
\

-       else if ((delx < 0) && (px < -1))                               \

-          return;                                                              
\

-     }                                                                 \

-                                                                               
\

-   p = data + (dstw * py) + px;                                        \

-                                                                               
\

-   y = py - y0;                                                                
\

-   xx = y * dxx;                                                               
\

-   prev_x = (xx >> 16);                                                        
\

-                                                                               
\

-   by = MIN(y1 + 1, clh);                                              \

-   rx = clw - 1;

-

-

-

-static void

-_evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int 
x1, int y1)

-{

-   int     px, py, x, y, prev_x, prev_y;

-   int     dx, dy, rx, by, p0_in, p1_in, dh, a_a = 0;

-   int     delx, dely, xx, yy, dxx, dyy;

-   int     clx, cly, clw, clh;

-   int     dstw;

-   DATA32  *p, *data, color;

-   RGBA_Gfx_Pt_Func pfunc;

-

-   dx = x1 - x0;

-   dy = y1 - y0;

-

-   if ( (dx == 0) || (dy == 0) || (dx == dy) || (dx == -dy) )

-     {

-       _evas_draw_simple_line(dst, dc, x0, y0, x1, y1);

-       return;

-     }

-

-   color = dc->col.col;

-   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, 
dc->render_op);

-   if (!pfunc) return;

-

-   clx = dc->clip.x;

-   cly = dc->clip.y;

-   clw = dc->clip.w;

-   clh = dc->clip.h;

-

-   data = dst->image->data;

-   dstw = dst->image->w;

-

-   data += (dstw * cly) + clx;

-   x0 -= clx;

-   y0 -= cly;

-   x1 -= clx;

-   y1 -= cly;

-

-   /* shallow: x-parametric */

-   if ((dy < dx) || (dy < -dx))

-     {

-       SETUP_LINE_SHALLOW

-

-       while (px < rx)

-         {

-           y = (yy >> 16);

-           y += ((yy - (y << 16)) >> 15);

-           if (prev_y != y)

-             {

-               prev_y = y;

-               p += dh;

-               py += dely;

-             }

-           if (!p1_in)

-             {

-               if ((py < 0) && (dely < 0)) return;

-               if ((py > by) && (dely > 0)) return;

-             }

-           if (IN_RANGE(px, py, clw, clh))

-               pfunc(0, 255, color, p);

-           yy += dyy;

-           px++;

-           p++;

-         }

-       return;

-     }

-

-   /* steep: y-parametric */

-

-   SETUP_LINE_STEEP

-

-   while (py < by)

-     {

-       x = (xx >> 16);

-       x += ((xx - (x << 16)) >> 15);

-       if (prev_x != x)

-         {

-           prev_x = x;

-           px += delx;

-           p += delx;

-         }

-       if (!p1_in)

-         {

-           if ((px < 0) && (delx < 0)) return;

-           if ((px > rx) && (delx > 0)) return;

-         }

-       if (IN_RANGE(px, py, clw, clh))

-           pfunc(0, 255, color, p);

-       xx += dxx;

-       py++;

-       p += dstw;

-     }

-}

-

-

-static void

-_evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int 
x1, int y1)

-{

-   int     px, py, x, y, prev_x, prev_y;

-   int     dx, dy, rx, by, p0_in, p1_in, dh, a_a = 1;

-   int     delx, dely, xx, yy, dxx, dyy;

-   int     clx, cly, clw, clh;

-   int     dstw;

-   DATA32  *p, *data, color;

-   RGBA_Gfx_Pt_Func pfunc;

-

-   if (y0 > y1)

-      EXCHANGE_POINTS(x0, y0, x1, y1)

-   dx = x1 - x0;

-   dy = y1 - y0;

-

-   if ( (dx == 0) || (dy == 0) || (dx == dy) || (dx == -dy) )

-     {

-       _evas_draw_simple_line(dst, dc, x0, y0, x1, y1);

-       return;

-     }

-

-   color = dc->col.col;

-   pfunc = evas_common_gfx_func_composite_mask_color_pt_get(color, dst, 
dc->render_op);

-   if (!pfunc) return;

-

-   clx = dc->clip.x;

-   cly = dc->clip.y;

-   clw = dc->clip.w;

-   clh = dc->clip.h;

-

-   data = dst->image->data;

-   dstw = dst->image->w;

-

-   data += (dstw * cly) + clx;

-   x0 -= clx;

-   y0 -= cly;

-   x1 -= clx;

-   y1 -= cly;

-

-   /* shallow: x-parametric */

-   if ((dy < dx) || (dy < -dx))

-     {

-       SETUP_LINE_SHALLOW

-

-       while (px < rx)

-         {

-           DATA8   aa;

-

-           y = (yy >> 16);

-           if (prev_y != y)

-             {

-               prev_y = y;

-               p += dh;

-               py += dely;

-             }

-           if (!p1_in)

-             {

-               if ((py < -1) && (dely < 0)) return;

-               if ((py > by) && (dely > 0)) return;

-             }

-           if ((unsigned)(px) < clw)

-             {

-               aa = ((yy - (y << 16)) >> 8);

-               if ((unsigned)(py) < clh)

-                  pfunc(0, 255 - aa, color, p);

-               if ((unsigned)(py + 1) < clh)

-                  pfunc(0, aa, color, p + dstw);

-             }

-           yy += dyy;

-           px++;

-           p++;

-         }

-       return;

-     }

-

-   /* steep: y-parametric */

-

-   SETUP_LINE_STEEP

-

-   while (py < by)

-     {

-       DATA8   aa;

-

-       x = (xx >> 16);

-       if (prev_x != x)

-         {

-           prev_x = x;

-           px += delx;

-           p += delx;

-         }

-       if (!p1_in)

-         {

-           if ((px < -1) && (delx < 0)) return;

-           if ((px > rx) && (delx > 0)) return;

-         }

-       if ((unsigned)(py) < clh)

-         {

-           aa = ((xx - (x << 16)) >> 8);

-           if ((unsigned)(px) < clw)

-               pfunc(0, 255 - aa, color, p);

-           if ((unsigned)(px + 1) < clw)

-               pfunc(0, aa, color, p + 1);

-         }

-       xx += dxx;

-       py++;

-       p += dstw;

-     }

-}

+#include "evas_common.h"
+
+
+static void
+_evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y);
+
+static void
+_evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, 
int x1, int y1);
+
+static void
+_evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int 
x1, int y1);
+
+static void
+_evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int 
x1, int y1);
+
+
+#define IN_RANGE(x, y, w, h) \
+( ((unsigned)(x) < (w)) && ((unsigned)(y) < (h)) )
+
+#define IN_RECT(x, y, rx, ry, rw, rh) \
+( ((unsigned)((x) - (rx)) < (rw)) && ((unsigned)((y) - (ry)) < (rh)) )
+
+#define EXCHANGE_POINTS(x0, y0, x1, y1) \
+{ \
+       int _tmp = y0; \
+  \
+       y0 = y1;   \
+       y1 = _tmp; \
+  \
+       _tmp = x0; \
+       x0 = x1;   \
+       x1 = _tmp; \
+}
+
+
+void
+evas_common_line_init(void)
+{
+}
+
+void
+evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, 
int x1, int y1)
+{
+   int  x, y, w, h;
+   int  clx, cly, clw, clh;
+   int  cuse, cx, cy, cw, ch;
+
+   if ((x0 == x1) && (y0 == y1))
+     {
+       _evas_draw_point(dst, dc, x0, y0);
+       return;
+     }
+
+   clx = cly = 0;
+   clw = dst->image->w;
+   clh = dst->image->h;
+
+   /* save out clip info */
+   cuse = dc->clip.use;
+   cx = dc->clip.x;
+   cy = dc->clip.y;
+   cw = dc->clip.w;
+   ch = dc->clip.h;
+
+   if (cuse)
+     {
+       RECTS_CLIP_TO_RECT(clx, cly, clw, clh, cx, cy, cw, ch);
+       if ((clw < 1) || (clh < 1))
+          return;
+     }
+
+   x = MIN(x0, x1);
+   y = MIN(y0, y1);
+   w = MAX(x0, x1) - x + 1;
+   h = MAX(y0, y1) - y + 1;
+
+   RECTS_CLIP_TO_RECT(clx, cly, clw, clh, x, y, w, h);
+   if ((clw < 1) || (clh < 1))
+       return;
+
+   dc->clip.use = 1;
+   dc->clip.x = clx;
+   dc->clip.y = cly;
+   dc->clip.w = clw;
+   dc->clip.h = clh;
+
+   if (dc->anti_alias)
+       _evas_draw_line_aa(dst, dc, x0, y0, x1, y1);
+   else
+       _evas_draw_line(dst, dc, x0, y0, x1, y1);
+
+   /* restore clip info */
+   dc->clip.use = cuse;
+   dc->clip.x = cx;
+   dc->clip.y = cy;
+   dc->clip.w = cw;
+   dc->clip.h = ch;
+   evas_common_cpu_end_opt();
+}
+
+
+static void
+_evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y)
+{
+   RGBA_Gfx_Pt_Func pfunc;
+
+   if (!IN_RANGE(x, y, dst->image->w, dst->image->h))
+       return;
+   if ((dc->clip.use) && (!IN_RECT(x, y, dc->clip.x, dc->clip.y, dc->clip.w, 
dc->clip.h)))
+       return;
+   pfunc = evas_common_gfx_func_composite_color_pt_get(dc->col.col, dst, 
dc->render_op);
+   if (pfunc)
+       pfunc(0, 255, dc->col.col, dst->image->data + (dst->image->w * y) + x);
+}
+
+/*
+   these functions use the dc->clip data as bounding
+   data. they assume that such data has already been cut
+   back to lie in the dst image rect and the object's
+   (line) bounding rect.
+*/
+static void
+_evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, 
int x1, int y1)
+{
+   int     dx, dy, len, lx, ty, rx, by;
+   int     clx, cly, clw, clh;
+   int     dstw;
+   DATA32  *p, color;
+   RGBA_Gfx_Pt_Func pfunc;
+   RGBA_Gfx_Func    sfunc;
+
+   dstw = dst->image->w;
+   color = dc->col.col;
+
+   if (y0 > y1)
+      EXCHANGE_POINTS(x0, y0, x1, y1)
+   if (x0 > x1)
+      EXCHANGE_POINTS(x0, y0, x1, y1)
+
+   dx = x1 - x0;
+   dy = y1 - y0;
+
+   clx = dc->clip.x;
+   cly = dc->clip.y;
+   clw = dc->clip.w;
+   clh = dc->clip.h;
+
+   lx = clx;
+   rx = clx + clw - 1;
+   ty = cly;
+   by = cly + clh - 1;
+
+   if (dy == 0)
+     {
+       if ((y0 >= ty) && (y0 <= by))
+         {
+            if (dx < 0)
+              {
+                 int  tmp = x1;
+                 
+                 x1 = x0;
+                 x0 = tmp;
+              }
+            
+            if (x0 < lx) x0 = lx;
+            if (x1 > rx) x1 = rx;
+            
+            len = x1 - x0 + 1;
+            p = dst->image->data + (dstw * y0) + x0;
+            sfunc = evas_common_gfx_func_composite_color_span_get(color, dst, 
len, dc->render_op);
+            if (sfunc)
+              sfunc(NULL, NULL, color, p, len);
+         }
+       return;
+     }
+
+   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, 
dc->render_op);
+   if (!pfunc) return;
+
+   if (dx == 0)
+     {
+       if ((x0 >= lx) && (x0 <= rx))
+         {
+            if (y0 < ty) y0 = ty;
+            if (y1 > by) y1 = by;
+            
+            len = y1 - y0 + 1;
+            p = dst->image->data + (dstw * y0) + x0;
+            while (len--)
+              {
+                 pfunc(0, 255, color, p);
+                 p += dstw;
+              }
+         }
+       return;
+     }
+
+   if ((dy == dx) || (dy == -dx))
+     {
+       int   p0_in, p1_in;
+
+       p0_in = (IN_RECT(x0, y0, clx, cly, clw, clh) ? 1 : 0);  
+       p1_in = (IN_RECT(x1, y1, clx, cly, clw, clh) ? 1 : 0);
+
+       if (dx > 0)
+         {
+           if (!p0_in)
+             {
+               x0 = x0 + (ty - y0);
+               y0 = ty;
+               if (x0 > rx) return;
+               if (x0 < lx)
+                 {
+                   y0 = y0 + (lx - x0);
+                   x0 = lx;
+                   if ((y0 < ty) || (y0 > by)) return;
+                 }
+             }
+           if (!p1_in)
+             {
+               x1 = x0 + (by - y0);
+               y1 = by;
+               if (x1 < lx) return;
+               if (x1 > rx)
+                 {
+                   y1 = y0 + (rx - x0);
+                   x1 = rx;
+                   if ((y1 < ty) || (y1 > by)) return;
+                 }
+             }
+         }
+       else
+         {
+           if (!p0_in)
+             {
+               x0 = x0 - (ty - y0);
+               y0 = ty;
+               if (x0 < lx) return;
+               if (x0 > rx)
+                 {
+                   y0 = y0 - (rx - x0);
+                   x0 = rx;
+                   if ((y0 < ty) || (y0 > by)) return;
+                 }
+             }
+           if (!p1_in)
+             {
+               x1 = x0 - (by - y0);
+               y1 = by;
+               if (x1 > rx) return;
+               if (x1 < lx)
+                 {
+                   y1 = y0 - (lx - x0);
+                   x1 = lx;
+                   if ((y1 < ty) || (y1 > by)) return;
+                 }
+             }
+         }
+       if (y1 > y0)
+         {
+            p = dst->image->data + (dstw * y0) + x0;
+            len = y1 - y0 + 1;
+            if (dx > 0)  dstw++;
+            else  dstw--;
+         }
+       else
+         {
+            len = y0 - y1 + 1;
+            p = dst->image->data + (dstw * y1) + x1;
+            if (dx > 0)  dstw--;
+            else  dstw++;
+         }
+
+       while (len--)
+         {
+           pfunc(0, 255, color, p);
+           p += dstw;
+         }
+     }
+}
+
+
+#define SETUP_LINE_SHALLOW             \
+       if (x0 > x1)                                                    \
+         {                                                                     
\
+          EXCHANGE_POINTS(x0, y0, x1, y1)                              \
+          dx = -dx;                                                    \
+          dy = -dy;                                                    \
+         }                                                                     
\
+                                                                               
\
+       px = x0;                                                                
\
+       py = y0;                                                                
\
+                                                                               
\
+       p0_in = (IN_RANGE(x0 , y0 , clw, clh) ? 1 : 0);         \
+       p1_in = (IN_RANGE(x1 , y1 , clw, clh) ? 1 : 0);         \
+                                                                               
\
+       dely = 1;                                                               
\
+       dh = dstw;                                                              
\
+       if (dy < 0)                                                             
\
+         {                                                                     
\
+          dely = -1;                                                   \
+          dh = -dstw;                                                  \
+         }                                                                     
\
+                                                                               
\
+       dyy = ((dy) << 16) / (dx);                                              
\
+                                                                               
\
+       if (!p0_in)                                                             
\
+         {                                                                     
\
+          dxx = ((dx) << 16) / (dy);                                   \
+          if (px < 0)                                                  \
+            {                                                          \
+               x = -px;  px = 0;                                               
\
+               yy = x * dyy;                                           \
+               y = yy >> 16;                                           \
+               if (!a_a)                                                       
\
+                   y += (yy - (y << 16)) >> 15;                        \
+               py += y;                                                        
\
+               if ((dely > 0) && (py >= clh))                  \
+                  return;                                                      
\
+               else if ((dely < 0) && (py < -1))                       \
+                  return;                                                      
\
+            }                                                          \
+                                                                               
\
+          y = 0;                                                               
\
+          if ((dely > 0) && (py < -1))                         \
+               y = (-1 - py);                                          \
+          else if ((dely < 0) && (py >= clh))                  \
+               y = (clh - 1 - py);                                     \
+                                                                               
\
+          xx = y * dxx;                                                        
\
+          x = xx >> 16;                                                        
\
+          if (!a_a)                                                    \
+              x += (xx - (x << 16)) >> 15;                     \
+          px += x;                                                             
\
+          if (px >= clw) return;                                       \
+                                                                               
\
+          yy = x * dyy;                                                        
\
+          y = yy >> 16;                                                        
\
+          if (!a_a)                                                    \
+              y += (yy - (y << 16)) >> 15;                     \
+          py += y;                                                             
\
+          if ((dely > 0) && (py >= clh))                               \
+                return;                                                        
\
+          else if ((dely < 0) && (py < -1))                    \
+                return;                                                        
\
+         }                                                                     
\
+                                                                               
\
+       p = data + (dstw * py) + px;                                    \
+                                                                               
\
+       x = px - x0;                                                    \
+       yy = x * dyy;                                                   \
+       prev_y = (yy >> 16);                                            \
+                                                                               
\
+       rx = MIN(x1 + 1, clw);                                          \
+       by = clh - 1;
+
+
+#define SETUP_LINE_STEEP               \
+   if (y0 > y1)                                                                
\
+     {                                                                 \
+       EXCHANGE_POINTS(x0, y0, x1, y1)                         \
+       dx = -dx;                                                               
\
+       dy = -dy;                                                               
\
+     }                                                                 \
+                                                                               
\
+   px = x0;                                                                    
\
+   py = y0;                                                                    
\
+                                                                               
\
+   p0_in = (IN_RANGE(x0 , y0 , clw, clh) ? 1 : 0);             \
+   p1_in = (IN_RANGE(x1 , y1 , clw, clh) ? 1 : 0);             \
+                                                                               
\
+   delx = 1;                                                           \
+   if (dx < 0)                                                         \
+       delx = -1;                                                              
\
+                                                                               
\
+   dxx = ((dx) << 16) / (dy);                                          \
+                                                                               
\
+   if (!p0_in)                                                         \
+     {                                                                 \
+       dyy = ((dy) << 16) / (dx);                                              
\
+                                                                               
\
+       if (py < 0)                                                             
\
+         {                                                                     
\
+          y = -py;  py = 0;                                            \
+          xx = y * dxx;                                                        
\
+          x = xx >> 16;                                                        
\
+          if (!a_a)                                                    \
+              x += (xx - (x << 16)) >> 15;                     \
+          px += x;                                                             
\
+          if ((delx > 0) && (px >= clw))                               \
+               return;                                                 \
+          else if ((delx < 0) && (px < -1))                    \
+               return;                                                 \
+         }                                                                     
\
+                                                                               
\
+       x = 0;                                                          \
+       if ((delx > 0) && (px < -1))                                    \
+          x = (-1 - px);                                                       
\
+       else if ((delx < 0) && (px >= clw))                             \
+          x = (clw - 1 - px);                                          \
+                                                                               
\
+       yy = x * dyy;                                                   \
+       y = yy >> 16;                                                   \
+       if (!a_a)                                                               
\
+           y += (yy - (y << 16)) >> 15;                                \
+       py += y;                                                                
\
+       if (py >= clh) return;                                          \
+                                                                               
\
+       xx = y * dxx;                                                   \
+       x = xx >> 16;                                                   \
+        if (!a_a)                                                              
\
+           x += (xx - (x << 16)) >> 15;                                \
+       px += x;                                                                
\
+       if ((delx > 0) && (px >= clw))                          \
+          return;                                                              
\
+       else if ((delx < 0) && (px < -1))                               \
+          return;                                                              
\
+     }                                                                 \
+                                                                               
\
+   p = data + (dstw * py) + px;                                        \
+                                                                               
\
+   y = py - y0;                                                                
\
+   xx = y * dxx;                                                               
\
+   prev_x = (xx >> 16);                                                        
\
+                                                                               
\
+   by = MIN(y1 + 1, clh);                                              \
+   rx = clw - 1;
+
+
+
+static void
+_evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int 
x1, int y1)
+{
+   int     px, py, x, y, prev_x, prev_y;
+   int     dx, dy, rx, by, p0_in, p1_in, dh, a_a = 0;
+   int     delx, dely, xx, yy, dxx, dyy;
+   int     clx, cly, clw, clh;
+   int     dstw;
+   DATA32  *p, *data, color;
+   RGBA_Gfx_Pt_Func pfunc;
+
+   dx = x1 - x0;
+   dy = y1 - y0;
+
+   if ( (dx == 0) || (dy == 0) || (dx == dy) || (dx == -dy) )
+     {
+       _evas_draw_simple_line(dst, dc, x0, y0, x1, y1);
+       return;
+     }
+
+   color = dc->col.col;
+   pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, 
dc->render_op);
+   if (!pfunc) return;
+
+   clx = dc->clip.x;
+   cly = dc->clip.y;
+   clw = dc->clip.w;
+   clh = dc->clip.h;
+
+   data = dst->image->data;
+   dstw = dst->image->w;
+
+   data += (dstw * cly) + clx;
+   x0 -= clx;
+   y0 -= cly;
+   x1 -= clx;
+   y1 -= cly;
+
+   /* shallow: x-parametric */
+   if ((dy < dx) || (dy < -dx))
+     {
+       SETUP_LINE_SHALLOW
+
+       while (px < rx)
+         {
+           y = (yy >> 16);
+           y += ((yy - (y << 16)) >> 15);
+           if (prev_y != y)
+             {
+               prev_y = y;
+               p += dh;
+               py += dely;
+             }
+           if (!p1_in)
+             {
+               if ((py < 0) && (dely < 0)) return;
+               if ((py > by) && (dely > 0)) return;
+             }
+           if (IN_RANGE(px, py, clw, clh))
+               pfunc(0, 255, color, p);
+           yy += dyy;
+           px++;
+           p++;
+         }
+       return;
+     }
+
+   /* steep: y-parametric */
+
+   SETUP_LINE_STEEP
+
+   while (py < by)
+     {
+       x = (xx >> 16);
+       x += ((xx - (x << 16)) >> 15);
+       if (prev_x != x)
+         {
+           prev_x = x;
+           px += delx;
+           p += delx;
+         }
+       if (!p1_in)
+         {
+           if ((px < 0) && (delx < 0)) return;
+           if ((px > rx) && (delx > 0)) return;
+         }
+       if (IN_RANGE(px, py, clw, clh))
+           pfunc(0, 255, color, p);
+       xx += dxx;
+       py++;
+       p += dstw;
+     }
+}
+
+
+static void
+_evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int 
x1, int y1)
+{
+   int     px, py, x, y, prev_x, prev_y;
+   int     dx, dy, rx, by, p0_in, p1_in, dh, a_a = 1;
+   int     delx, dely, xx, yy, dxx, dyy;
+   int     clx, cly, clw, clh;
+   int     dstw;
+   DATA32  *p, *data, color;
+   RGBA_Gfx_Pt_Func pfunc;
+
+   if (y0 > y1)
+      EXCHANGE_POINTS(x0, y0, x1, y1)
+   dx = x1 - x0;
+   dy = y1 - y0;
+
+   if ( (dx == 0) || (dy == 0) || (dx == dy) || (dx == -dy) )
+     {
+       _evas_draw_simple_line(dst, dc, x0, y0, x1, y1);
+       return;
+     }
+
+   color = dc->col.col;
+   pfunc = evas_common_gfx_func_composite_mask_color_pt_get(color, dst, 
dc->render_op);
+   if (!pfunc) return;
+
+   clx = dc->clip.x;
+   cly = dc->clip.y;
+   clw = dc->clip.w;
+   clh = dc->clip.h;
+
+   data = dst->image->data;
+   dstw = dst->image->w;
+
+   data += (dstw * cly) + clx;
+   x0 -= clx;
+   y0 -= cly;
+   x1 -= clx;
+   y1 -= cly;
+
+   /* shallow: x-parametric */
+   if ((dy < dx) || (dy < -dx))
+     {
+       SETUP_LINE_SHALLOW
+
+       while (px < rx)
+         {
+           DATA8   aa;
+
+           y = (yy >> 16);
+           if (prev_y != y)
+             {
+               prev_y = y;
+               p += dh;
+               py += dely;
+             }
+           if (!p1_in)
+             {
+               if ((py < -1) && (dely < 0)) return;
+               if ((py > by) && (dely > 0)) return;
+             }
+           if ((unsigned)(px) < clw)
+             {
+               aa = ((yy - (y << 16)) >> 8);
+               if ((unsigned)(py) < clh)
+                  pfunc(0, 255 - aa, color, p);
+               if ((unsigned)(py + 1) < clh)
+                  pfunc(0, aa, color, p + dstw);
+             }
+           yy += dyy;
+           px++;
+           p++;
+         }
+       return;
+     }
+
+   /* steep: y-parametric */
+
+   SETUP_LINE_STEEP
+
+   while (py < by)
+     {
+       DATA8   aa;
+
+       x = (xx >> 16);
+       if (prev_x != x)
+         {
+           prev_x = x;
+           px += delx;
+           p += delx;
+         }
+       if (!p1_in)
+         {
+           if ((px < -1) && (delx < 0)) return;
+           if ((px > rx) && (delx > 0)) return;
+         }
+       if ((unsigned)(py) < clh)
+         {
+           aa = ((xx - (x << 16)) >> 8);
+           if ((unsigned)(px) < clw)
+               pfunc(0, 255 - aa, color, p);
+           if ((unsigned)(px + 1) < clw)
+               pfunc(0, aa, color, p + 1);
+         }
+       xx += dxx;
+       py++;
+       p += dstw;
+     }
+}




_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to