diff --git a/src/conio/bitmap_con.c b/src/conio/bitmap_con.c index 3dcc807e9976a602ccf1db91f11c53284323fe01..651866f201591899ddcdadf23423602a8db794c5 100644 --- a/src/conio/bitmap_con.c +++ b/src/conio/bitmap_con.c @@ -1470,12 +1470,21 @@ int bitmap_setpixels(uint32_t sx, uint32_t sy, uint32_t ex, uint32_t ey, uint32_ pos = pixels->width*(y-sy+y_off)+x_off; if (mask == NULL) { for (x = sx; x <= ex; x++) { - screena.rect->data[PIXEL_OFFSET(screena, x, y)] = pixels->pixels[pos]; + if (screena.rect->data[PIXEL_OFFSET(screena, x, y)] != pixels->pixels[pos]) { + screena.rect->data[PIXEL_OFFSET(screena, x, y)] = pixels->pixels[pos]; + screena.update_pixels = 1; + } if (pixels->pixelsb) { - screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] = pixels->pixelsb[pos]; + if (screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] != pixels->pixelsb[pos]) { + screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] = pixels->pixelsb[pos]; + screenb.update_pixels = 1; + } } else { - screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] = pixels->pixels[pos]; + if (screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] != pixels->pixels[pos]) { + screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] = pixels->pixels[pos]; + screenb.update_pixels = 1; + } } pos++; } @@ -1487,12 +1496,21 @@ int bitmap_setpixels(uint32_t sx, uint32_t sy, uint32_t ex, uint32_t ey, uint32_ mask_bit = mpos % 8; mask_bit = 0x80 >> mask_bit; if (mask->bits[mask_byte] & mask_bit) { - screena.rect->data[PIXEL_OFFSET(screena, x, y)] = pixels->pixels[pos]; + if (screena.rect->data[PIXEL_OFFSET(screena, x, y)] != pixels->pixels[pos]) { + screena.rect->data[PIXEL_OFFSET(screena, x, y)] = pixels->pixels[pos]; + screena.update_pixels = 1; + } if (pixels->pixelsb) { - screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] = pixels->pixelsb[pos]; + if (screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] != pixels->pixelsb[pos]) { + screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] = pixels->pixelsb[pos]; + screenb.update_pixels = 1; + } } else { - screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] = pixels->pixels[pos]; + if (screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] != pixels->pixels[pos]) { + screenb.rect->data[PIXEL_OFFSET(screenb, x, y)] = pixels->pixels[pos]; + screenb.update_pixels = 1; + } } } pos++; @@ -1500,8 +1518,6 @@ int bitmap_setpixels(uint32_t sx, uint32_t sy, uint32_t ex, uint32_t ey, uint32_ } } } - screena.update_pixels = 1; - screenb.update_pixels = 1; pthread_mutex_unlock(&screenb.screenlock); pthread_mutex_unlock(&screena.screenlock); pthread_mutex_unlock(&blinker_lock); @@ -1626,8 +1642,7 @@ void bitmap_replace_font(uint8_t id, char *name, void *data, size_t size) free(name); free(data); } - screena.update_pixels = 1; - screenb.update_pixels = 1; + request_redraw(); pthread_mutex_unlock(&screenb.screenlock); pthread_mutex_unlock(&screena.screenlock); pthread_mutex_unlock(&blinker_lock);