mirror of
https://github.com/kanjitalk755/macemu.git
synced 2024-11-28 08:49:32 +00:00
double-buffer cursor mask
this prevents clicks being wrongfully ignored during mask recalculation
This commit is contained in:
parent
0aaefd89f3
commit
f81ca7897a
@ -78,9 +78,11 @@ int16 InstallRootlessProc() {
|
||||
|
||||
static struct {
|
||||
uint8_t *pixels;
|
||||
uint8_t *cursorMask;
|
||||
int w,h;
|
||||
} display_mask = {
|
||||
.pixels = NULL,
|
||||
.cursorMask = NULL,
|
||||
.w = 0,
|
||||
.h = 0
|
||||
};
|
||||
@ -268,7 +270,7 @@ bool cursor_point_opaque() {
|
||||
}
|
||||
int32 my = ReadMacInt16(0x0828);
|
||||
int32 mx = ReadMacInt16(0x082a);
|
||||
return display_mask.pixels[mx + my * display_mask.w];
|
||||
return display_mask.cursorMask[mx + my * display_mask.w];
|
||||
}
|
||||
|
||||
static SDL_Rect MaskCursor() {
|
||||
@ -342,6 +344,7 @@ void update_display_mask(SDL_Window *window, int w, int h) {
|
||||
// new mask
|
||||
free(display_mask.pixels);
|
||||
display_mask.pixels = (uint8_t*)calloc(1, w*h*2);
|
||||
display_mask.cursorMask = &display_mask.pixels[display_mask.w * display_mask.h];
|
||||
display_mask.w = w;
|
||||
display_mask.h = h;
|
||||
}
|
||||
@ -393,6 +396,9 @@ void update_display_mask(SDL_Window *window, int w, int h) {
|
||||
// Menu Bar
|
||||
mask_rects.push_back(MaskMenuBar());
|
||||
|
||||
// Copy over cursor mask
|
||||
memcpy(display_mask.cursorMask, display_mask.pixels, display_mask.w * display_mask.h);
|
||||
|
||||
// Cursor
|
||||
if (cursor_point_opaque()) {
|
||||
SDL_ShowCursor(SDL_DISABLE);
|
||||
|
Loading…
Reference in New Issue
Block a user