mirror of
https://github.com/isometimes/rpi4-osdev
synced 2024-11-24 11:10:40 +00:00
63 lines
1.2 KiB
C
63 lines
1.2 KiB
C
#include "../include/wgt.h"
|
|
|
|
void wwipe (short x, short y, short x2, short y2, block image)
|
|
{
|
|
short t, distance;
|
|
short wx, wy, dx, dy, bdx, bdy, incx, incy;
|
|
unsigned int col;
|
|
short swidth;
|
|
|
|
swidth = wgetblockwidth (image);
|
|
|
|
/* Do the line formula */
|
|
dx = x2 - x;
|
|
dy = y2 - y;
|
|
t = 0; wx = 0; wy = 0;
|
|
if (dy < 0) incy = - 1; else incy = 1;
|
|
if (dx < 0) incx = - 1; else incx = 1;
|
|
bdx = abs (dx);
|
|
bdy = abs (dy);
|
|
if (bdx > bdy) distance = bdx;
|
|
else distance = bdy;
|
|
if (distance == bdx)
|
|
{
|
|
while (t <= distance)
|
|
{
|
|
if ((x >= tx) & (y >= ty) & (y <= by) & (x <= bx))
|
|
/* inside clipping? */
|
|
{
|
|
col = image[y * swidth + x + 2];
|
|
/* get the colour */
|
|
abuf[y * WGT_SYS.xres + x] = col;
|
|
/* put the pixel */
|
|
}
|
|
wy += bdy;
|
|
x += incx;
|
|
t++;
|
|
if (wy >= distance)
|
|
{
|
|
wy -= distance;
|
|
y += incy;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
while (t <= distance)
|
|
{
|
|
if ((x >= tx) & (y >= ty) & (y <= by) & (x <= bx))
|
|
{
|
|
col = image[y * swidth + x + 2];
|
|
abuf[y*WGT_SYS.xres + x] = col;
|
|
}
|
|
wx += bdx;
|
|
if (wx >= distance)
|
|
{
|
|
wx -= distance;
|
|
x += incx;
|
|
}
|
|
y += incy;
|
|
t++;
|
|
}
|
|
}
|
|
}
|