1 /* $Header: /home/yav/xpx/RCS/paint.c,v 1.4 1995/11/25 19:19:16 yav Exp $
2  * Paint routine for xpx
3  * written by yav (UHD98984@pcvan.or.jp)
4  *
5  */
6 
7 #include <X11/Xlib.h>
8 #include "xpx.h"
9 #include "headers.h"
10 #include "work.h"
11 #define PUBLIC_PAINT_C
12 #include "extern.h"
13 
14 char rcsid_paint[] = "$Id: paint.c,v 1.4 1995/11/25 19:19:16 yav Exp $";
15 int painted_pixel;
16 
17 /*
18  *   XXX---
19  *     ^   <
20  */
paint_left(x,y)21 int paint_left(x, y)
22      int x;
23      int y;
24 {
25   unsigned char *p;
26 
27   p = imgdata+y*imgmaxw+x;
28   while (x >= 0) {
29     if (*p != painted_pixel)
30       break;
31     --p;
32     --x;
33   }
34   return x;
35 }
36 
37 /*
38  *   ---XXX
39  *  >   ^
40  */
paint_right(x,y)41 int paint_right(x, y)
42      int x;
43      int y;
44 {
45   unsigned char *p;
46 
47   p = imgdata+y*imgmaxw+x;
48   while (x < imgfilew) {
49     if (*p != painted_pixel)
50       break;
51     ++p;
52     ++x;
53   }
54   return x;
55 }
56 
57 /*
58  *   XXX---
59  *  >   ^
60  */
paint_next(x,y)61 int paint_next(x, y)
62      int x;
63      int y;
64 {
65   unsigned char *p;
66 
67   p = imgdata+y*imgmaxw+x;
68   while (x < imgfilew) {
69     if (*p == painted_pixel)
70       break;
71     p++;
72     ++x;
73   }
74   return x;
75 }
76 
paint(x,y)77 void paint(x, y)
78      int x;
79      int y;
80 {
81   int left, right;
82 
83   left = paint_left(x, y) + 1;
84   right = paint_right(x, y) - 1;
85   if (left > right)
86     return;
87   fill_area2(left, y, right+1-left, 1, current_col);
88 #ifdef XPX_PAINT_VISUAL
89   area_update(left, y, right+1-left, 1);
90 #endif
91   ++y;
92   if (y < imgfileh) {
93     /* paint under line */
94     for (x = left; x <= right; x = paint_next(x, y))
95       paint(x, y);
96   }
97   y -= 2;
98   if (y >= 0) {
99     /* paint upper line */
100     for (x = left; x <= right; x = paint_next(x, y))
101       paint(x, y);
102   }
103 }
104 
105 /* End of file */
106