Fixed issue with out-of-screen painting

This commit is contained in:
Devine Lu Linvega 2023-02-28 21:54:52 -08:00
parent 85df5f2d36
commit 18de47cc1c
1 changed files with 7 additions and 8 deletions

View File

@ -28,13 +28,12 @@ static Uint32 palette_mono[] = {
static void static void
screen_write(UxnScreen *p, Layer *layer, Uint16 x, Uint16 y, Uint8 color) screen_write(UxnScreen *p, Layer *layer, Uint16 x, Uint16 y, Uint8 color)
{ {
Uint32 i; if(x < p->width && y < p->height) {
if(x > p->width || y > p->height) Uint32 i = x + y * p->width;
return; if(color != layer->pixels[i]) {
i = x + y * p->width; layer->pixels[i] = color;
if(color != layer->pixels[i]) { layer->changed = 1;
layer->pixels[i] = color; }
layer->changed = 1;
} }
} }
@ -189,7 +188,7 @@ screen_deo(Uint8 *ram, Uint8 *d, Uint8 port)
n = d[0x6] >> 4; n = d[0x6] >> 4;
dx = (d[0x6] & 0x01) << 3; dx = (d[0x6] & 0x01) << 3;
dy = (d[0x6] & 0x02) << 2; dy = (d[0x6] & 0x02) << 2;
if(addr > 0xfff0) if(addr > 0x10000 - ((n + 1) << (3 + twobpp)))
return; return;
for(i = 0; i <= n; i++) { for(i = 0; i <= n; i++) {
if(!(d[0xf] & 0xf)) if(!(d[0xf] & 0xf))