Line drawing fixes

svn path=/trunk/; revision=4405
This commit is contained in:
Jason Filby 2003-03-23 09:18:51 +00:00
parent 68c3b158fc
commit 44b3528f71

View file

@ -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;