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