X-Git-Url: http://git.jankratochvil.net/?p=reactos.git;a=blobdiff_plain;f=drivers%2Fdd%2Fvga%2Fdisplay%2Fobjects%2Fpaint.c;h=be2afe216ba574d6ad029595c66a99495d600fcb;hp=f50ab17402ebdbcaeff042becbb710867e706c08;hb=HEAD;hpb=7c0db166f81fbe8c8b913d7f26048e337d383605 diff --git a/drivers/dd/vga/display/objects/paint.c b/drivers/dd/vga/display/objects/paint.c index f50ab17..be2afe2 100644 --- a/drivers/dd/vga/display/objects/paint.c +++ b/drivers/dd/vga/display/objects/paint.c @@ -17,17 +17,23 @@ BOOL VGADDIFillSolid(SURFOBJ *Surface, RECTL Dimensions, ULONG iColor) DPRINT("VGADDIFillSolid: x:%d, y:%d, w:%d, h:%d\n", x, y, w, h); // Swap dimensions so that x, y are at topmost left - if(Dimensions.right < Dimensions.left) { + if ( Dimensions.right < Dimensions.left ) + { x = Dimensions.right; x2 = Dimensions.left; - } else { + } + else + { x2 = Dimensions.right; x = Dimensions.left; } - if(Dimensions.bottom < Dimensions.top) { + if ( Dimensions.bottom < Dimensions.top ) + { y = Dimensions.bottom; y2 = Dimensions.top; - } else { + } + else + { y2 = Dimensions.bottom; y = Dimensions.top; } @@ -40,76 +46,84 @@ BOOL VGADDIFillSolid(SURFOBJ *Surface, RECTL Dimensions, ULONG iColor) offset = xconv[x]+y80[y]; // Make a note of original x - orgx=x; + orgx = x; - // If width is less than 8, draw using vertical lines - if(w<8) - { - for (i=x; i w ) + { + int mask = startmasks[ileftpix] & endmasks[irightpix]; - pre1=xconv[x-(8-ileftpix)]+y80[y]; - orgpre1=pre1; + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); // set the mask + WRITE_PORT_UCHAR((PUCHAR)GRA_D,mask); - if(ileftpix>0) + tmppre1 = pre1; + for ( j = y; j < y+h; j++ ) { - // Write left pixels - WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // set the mask - WRITE_PORT_UCHAR((PUCHAR)0x3cf,startmasks[ileftpix]); + a = READ_REGISTER_UCHAR ( vidmem+tmppre1 ); + WRITE_REGISTER_UCHAR ( vidmem+tmppre1, iColor ); + tmppre1 += 80; + } + return TRUE; + } - tmppre1 = pre1; - for (j=y; j 0 ) + { + // Write left pixels + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); // set the mask + WRITE_PORT_UCHAR((PUCHAR)GRA_D,startmasks[ileftpix]); - // Prepare new x for the middle - x=orgx+8; + tmppre1 = pre1; + for ( j = y; j < y+h; j++ ) + { + a = READ_REGISTER_UCHAR(vidmem + tmppre1); + WRITE_REGISTER_UCHAR(vidmem + tmppre1, iColor); + tmppre1 += 80; } - if(imidpix>0) - { - midpre1=xconv[x]+y80[y]; + // Prepare new x for the middle + x = orgx + 8; + } - // Set mask to all pixels in byte - WRITE_PORT_UCHAR((PUCHAR)0x3ce, 0x08); + if ( imidpix > 0 ) + { + midpre1=xconv[x] + y80[y]; - WRITE_PORT_UCHAR((PUCHAR)0x3cf, 0xff); + // Set mask to all pixels in byte + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); - for (j=y; j