mirror of
https://github.com/reactos/reactos.git
synced 2025-04-18 03:34:11 +00:00
Line drawing fixes
svn path=/trunk/; revision=4405
This commit is contained in:
parent
68c3b158fc
commit
44b3528f71
1 changed files with 44 additions and 28 deletions
|
@ -266,49 +266,65 @@ BOOL vgaHLine(INT x, INT y, INT len, UCHAR c)
|
||||||
{
|
{
|
||||||
for (i=x; i<x+len; i++)
|
for (i=x; i<x+len; i++)
|
||||||
vgaPutPixel(i, y, c);
|
vgaPutPixel(i, y, c);
|
||||||
} else {
|
|
||||||
|
|
||||||
// Calculate the left mask pixels, middle bytes and right mask pixel
|
return TRUE;
|
||||||
ileftpix = 8-mod(x, 8);
|
}
|
||||||
irightpix = mod(x+len-1, 8);
|
|
||||||
imidpix = (len-ileftpix-irightpix) / 8;
|
|
||||||
|
|
||||||
pre1=xconv[x-(8-ileftpix)]+y80[y];
|
// Calculate the left mask pixels, middle bytes and right mask pixel
|
||||||
orgpre1=pre1;
|
ileftpix = 8-mod(x, 8);
|
||||||
|
irightpix = mod(x+len, 8);
|
||||||
|
imidpix = (len-ileftpix-irightpix) / 8;
|
||||||
|
|
||||||
// Left
|
if(ileftpix == 8)
|
||||||
if(ileftpix>0)
|
{
|
||||||
{
|
ileftpix = 0;
|
||||||
// Write left pixels
|
imidpix++;
|
||||||
WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // set the mask
|
}
|
||||||
WRITE_PORT_UCHAR((PUCHAR)0x3cf,startmasks[ileftpix]);
|
|
||||||
|
|
||||||
a = READ_REGISTER_UCHAR(vidmem + pre1);
|
pre1=xconv[x-(8-ileftpix)]+y80[y];
|
||||||
WRITE_REGISTER_UCHAR(vidmem + pre1, c);
|
orgpre1=pre1;
|
||||||
|
|
||||||
// Prepare new x for the middle
|
// Left
|
||||||
x=orgx+8;
|
if(ileftpix>0)
|
||||||
}
|
{
|
||||||
|
// Write left pixels
|
||||||
|
WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // set the mask
|
||||||
|
WRITE_PORT_UCHAR((PUCHAR)0x3cf,startmasks[ileftpix]);
|
||||||
|
|
||||||
if(imidpix>0)
|
a = READ_REGISTER_UCHAR(vidmem + pre1);
|
||||||
{
|
WRITE_REGISTER_UCHAR(vidmem + pre1, c);
|
||||||
midpre1=xconv[x]+y80[y];
|
|
||||||
|
|
||||||
// Set mask to all pixels in byte
|
// Prepare new x for the middle
|
||||||
WRITE_PORT_UCHAR((PUCHAR)0x3ce, 0x08);
|
x=orgx+8;
|
||||||
WRITE_PORT_UCHAR((PUCHAR)0x3cf, 0xff);
|
}
|
||||||
memset(vidmem+midpre1, c, imidpix); // write middle pixels, no need to read in latch because of the width
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if(imidpix>0)
|
||||||
|
{
|
||||||
|
midpre1=xconv[x]+y80[y];
|
||||||
|
|
||||||
|
// Set mask to all pixels in byte
|
||||||
|
WRITE_PORT_UCHAR((PUCHAR)0x3ce, 0x08);
|
||||||
|
WRITE_PORT_UCHAR((PUCHAR)0x3cf, 0xff);
|
||||||
|
memset(vidmem+midpre1, c, imidpix); // write middle pixels, no need to read in latch because of the width
|
||||||
|
}
|
||||||
|
|
||||||
|
if(irightpix>0)
|
||||||
|
{
|
||||||
x=orgx+len-irightpix;
|
x=orgx+len-irightpix;
|
||||||
pre1=xconv[x]+y80[y];
|
|
||||||
|
for(i=x; i<x+irightpix; i++)
|
||||||
|
{
|
||||||
|
vgaPutPixel(i, y, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pre1=xconv[x]+y80[y];
|
||||||
|
|
||||||
// Write right pixels
|
// Write right pixels
|
||||||
WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // set the mask bits
|
WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // set the mask bits
|
||||||
WRITE_PORT_UCHAR((PUCHAR)0x3cf, endmasks[irightpix]);
|
WRITE_PORT_UCHAR((PUCHAR)0x3cf, endmasks[irightpix]);
|
||||||
|
|
||||||
a = READ_REGISTER_UCHAR(vidmem + pre1);
|
a = READ_REGISTER_UCHAR(vidmem + pre1);
|
||||||
WRITE_REGISTER_UCHAR(vidmem + pre1, c);
|
WRITE_REGISTER_UCHAR(vidmem + pre1, c); */
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in a new issue