From 4e4e6031891d7db27845578d174cec995afce976 Mon Sep 17 00:00:00 2001 From: Royce Mitchell III Date: Mon, 11 Aug 2003 03:51:44 +0000 Subject: [PATCH] fixed several bugs, simplified some calculations. This appears to have broken framerect drawing ( zoomin on min/max buttons ), but I think that was expecting the wrong behavior. svn path=/trunk/; revision=5519 --- .../drivers/dd/vga/display/objects/paint.c | 52 ++++++++------- .../dd/vga/display/vgavideo/vgavideo.c | 63 +++++++------------ .../dd/vga/display/vgavideo/vgavideo.h | 3 + 3 files changed, 57 insertions(+), 61 deletions(-) diff --git a/reactos/drivers/dd/vga/display/objects/paint.c b/reactos/drivers/dd/vga/display/objects/paint.c index f50ab17402e..2011c9c7aed 100644 --- a/reactos/drivers/dd/vga/display/objects/paint.c +++ b/reactos/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,75 +46,77 @@ 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) + if ( w < 8 ) { for (i=x; i0) + if ( ileftpix > 0 ) { // Write left pixels WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // set the mask WRITE_PORT_UCHAR((PUCHAR)0x3cf,startmasks[ileftpix]); tmppre1 = pre1; - for (j=y; j0) + if ( imidpix > 0 ) { - midpre1=xconv[x]+y80[y]; + midpre1=xconv[x] + y80[y]; // Set mask to all pixels in byte WRITE_PORT_UCHAR((PUCHAR)0x3ce, 0x08); WRITE_PORT_UCHAR((PUCHAR)0x3cf, 0xff); - for (j=y; j0) + if ( ileftpix > 0 ) { // Write left pixels WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); // set the mask @@ -311,12 +303,12 @@ BOOL vgaHLine(INT x, INT y, INT len, UCHAR c) WRITE_REGISTER_UCHAR(vidmem + pre1, c); // Prepare new x for the middle - x=orgx+8; + x = orgx + 8; } - if(imidpix>0) + if ( imidpix > 0 ) { - midpre1=xconv[x]+y80[y]; + midpre1 = xconv[x] + y80[y]; // Set mask to all pixels in byte WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); @@ -326,21 +318,14 @@ BOOL vgaHLine(INT x, INT y, INT len, UCHAR c) if ( irightpix > 0 ) { - x=orgx+len-irightpix; -#if 0 - for(i=x; i0) + if(mod2(w)>0) { edgePixel = TRUE; x2 -= 1; @@ -587,7 +572,7 @@ void DIB_TransparentBltToVGA(int x, int y, int w, int h, void *b, int Source_lDe BYTE b1, b2; // Check if the width is odd - if(mod(w, 2)>0) + if(mod2(w)>0) { edgePixel = TRUE; x2 -= 1; @@ -949,7 +934,7 @@ void DFB_BltToDIB(int x, int y, int w, int h, void *b, int bw, void *bdib, int d for (i=w; i>0; i--) { // determine the bit shift for the DIB pixel - dib_shift = mod(w-i, 2); + dib_shift = mod2(w-i); if(dib_shift > 0) dib_shift = 4; dibTmp = dib; @@ -978,7 +963,7 @@ void DIB_BltToDFB(int x, int y, int w, int h, void *b, int bw, void *bdib, int d for (i=w; i>0; i--) { // determine the bit shift for the DIB pixel - dib_shift = mod(w-i, 2); + dib_shift = mod2(w-i); if(dib_shift > 0) { dib_shift = 0; dib_and = 0x0f; diff --git a/reactos/drivers/dd/vga/display/vgavideo/vgavideo.h b/reactos/drivers/dd/vga/display/vgavideo/vgavideo.h index 1bfbc4bfd01..77be5ab1457 100644 --- a/reactos/drivers/dd/vga/display/vgavideo/vgavideo.h +++ b/reactos/drivers/dd/vga/display/vgavideo/vgavideo.h @@ -66,3 +66,6 @@ BOOL VGADDIIntersectRect(PRECTL prcDst, PRECTL prcSrc1, PRECTL prcSrc2); #define ASSIGNMK4(x, y, mask) mask = 0x80 >> ((x) & 7); void get_masks(int x, int w); + +#define mod8(n) ((n)&7) +#define mod2(n) ((n)&1)