X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2Fx86%2FVGAText%2Fvga.c;h=e926313002ec659039156fdcee35bb2a2bd28429;hb=98d45a155c3ce437d0eddb67b9eb2b203f87ec3b;hp=9fa9fd21019f941614e5c8f762858e30616ad1b2;hpb=7177e27ebe90ae180a0c645f319f39c89f07373b;p=tpg%2Facess2.git diff --git a/Modules/x86/VGAText/vga.c b/Modules/x86/VGAText/vga.c index 9fa9fd21..e9263130 100644 --- a/Modules/x86/VGAText/vga.c +++ b/Modules/x86/VGAText/vga.c @@ -246,18 +246,20 @@ void VGA_2D_Fill(void *Ent, Uint16 X, Uint16 Y, Uint16 W, Uint16 H, Uint32 Colou Y /= giVT_CharHeight; H /= giVT_CharHeight; - if( X > VGA_WIDTH || Y > VGA_HEIGHT ) return ; - if( X + W > VGA_WIDTH ) W = VGA_WIDTH - X; - if( Y + H > VGA_HEIGHT ) H = VGA_HEIGHT - Y; - ch.Ch = 0x20; ch.BGCol = (Colour & 0x0F0000) >> (16-8); ch.BGCol |= (Colour & 0x000F00) >> (8-4); ch.BGCol |= (Colour & 0x00000F); + word = VGA_int_GetWord(&ch); + + Log("Fill (%i,%i) %ix%i with 0x%x", X, Y, W, H, word); + + if( X > VGA_WIDTH || Y > VGA_HEIGHT ) return ; + if( X + W > VGA_WIDTH ) W = VGA_WIDTH - X; + if( Y + H > VGA_HEIGHT ) H = VGA_HEIGHT - Y; buf = gVGA_Framebuffer + Y*VGA_WIDTH + X; - word = VGA_int_GetWord(&ch); while( H -- ) { int i; @@ -281,6 +283,14 @@ void VGA_2D_Blit(void *Ent, Uint16 DstX, Uint16 DstY, Uint16 SrcX, Uint16 SrcY, // Log("(%i,%i) from (%i,%i) %ix%i", DstX, DstY, SrcX, SrcY, W, H); + if( SrcX > VGA_WIDTH || SrcY > VGA_HEIGHT ) return ; + if( SrcX + W > VGA_WIDTH ) W = VGA_WIDTH - SrcX; + if( SrcY + H > VGA_HEIGHT ) H = VGA_HEIGHT - SrcY; + if( DstX > VGA_WIDTH || DstY > VGA_HEIGHT ) return ; + if( DstX + W > VGA_WIDTH ) W = VGA_WIDTH - DstX; + if( DstY + H > VGA_HEIGHT ) H = VGA_HEIGHT - DstY; + + src = gVGA_Framebuffer + SrcY*VGA_WIDTH + SrcX; dst = gVGA_Framebuffer + DstY*VGA_WIDTH + DstX;