1 #include "drawmethods.h"
3 #define DRAWMETHOD_PLUS(_out,_backbuf,_col) \
6 unsigned char *bra = (unsigned char*)&(_backbuf);\
7 unsigned char *dra = (unsigned char*)&(_out);\
8 unsigned char *cra = (unsigned char*)&(_col);\
12 if (tra>255) tra=255;\
18 #define DRAWMETHOD DRAWMETHOD_PLUS(*p,*p,col)
21 draw_line (Pixel * data, int x1, int y1, int x2, int y2, int col, int screenx,
24 int x, y, dx, dy, yy, xx;
27 if ((y1 < 0) || (y2 < 0) || (x1 < 0) || (x2 < 0) || (y1 >= screeny)
28 || (y2 >= screeny) || (x1 >= screenx) || (x2 >= screenx))
32 if ((y1 < 0) && (y2 < 0))
36 x1 += (y1 * (x1 - x2)) / (y2 - y1);
40 x2 += (y2 * (x1 - x2)) / (y2 - y1);
45 if ((y1 >= screeny) && (y2 >= screeny))
48 x1 -= ((screeny - y1) * (x1 - x2)) / (y2 - y1);
52 x2 -= ((screeny - y2) * (x1 - x2)) / (y2 - y1);
56 if ((x1 < 0) && (x2 < 0))
59 y1 += (x1 * (y1 - y2)) / (x2 - x1);
63 y2 += (x2 * (y1 - y2)) / (x2 - x1);
67 if ((x1 >= screenx) && (x2 >= screenx))
70 y1 -= ((screenx - x1) * (y1 - y2)) / (x2 - x1);
74 y2 -= ((screenx - x2) * (y1 - y2)) / (x2 - x1);
97 p = &(data[(screenx * y1) + x1]);
98 for (y = y1; y <= y2; y++) {
103 p = &(data[(screenx * y2) + x1]);
104 for (y = y2; y <= y1; y++) {
111 /* horizontal line */
114 p = &(data[(screenx * y1) + x1]);
115 for (x = x1; x <= x2; x++) {
121 p = &(data[(screenx * y1) + x2]);
122 for (x = x2; x <= x1; x++) {
136 dx = ((dx << 16) / dy);
138 for (y = y1; y <= y2; y++) {
140 p = &(data[(screenx * y) + xx]);
142 if (xx < (screenx - 1)) {
152 dy = ((dy << 16) / dx);
154 for (x = x1; x <= x2; x++) {
156 p = &(data[(screenx * yy) + x]);
158 if (yy < (screeny - 1)) {
173 dx = ((dx << 16) / -dy);
175 for (y = y1; y >= y2; y--) {
177 p = &(data[(screenx * y) + xx]);
179 if (xx < (screenx - 1)) {
189 dy = ((dy << 16) / dx);
191 for (x = x1; x <= x2; x++) {
193 p = &(data[(screenx * yy) + x]);
195 if (yy < (screeny - 1)) {