1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-13 23:27:12 +00:00

Corrects interaction of BITMAPBIT with buffered display bitmap

Two problems fixed:
  * only in the case of a software cursor is it necessary to check if
  the bit being altered is within the region of the display covered by
  the cursor, and if it is, the cursor must be hidden before operating
  on the screen bitmap
  * SDL as well as X requires modifications to the screen bitmap be
  flushed to the actual display.
This commit is contained in:
Nick Briggs 2024-12-14 13:22:44 -08:00
parent ecdab720f2
commit 55d8504060

View File

@ -43,7 +43,9 @@ LispPTR N_OP_misc7(LispPTR arg1, LispPTR arg2, LispPTR arg3, LispPTR arg4, LispP
int offset;
DLword bmdata;
DLword bmmask;
#ifdef REALCURSOR
int displayflg;
#endif
DBPRINT(("MISC7 op with alpha byte %d.\n", alpha));
@ -58,7 +60,11 @@ LispPTR N_OP_misc7(LispPTR arg1, LispPTR arg2, LispPTR arg3, LispPTR arg4, LispP
DBPRINT(("MISC7 args OK.\n"));
#ifdef REALCURSOR
displayflg = n_new_cursorin(base, x, (heightminus1 - y), 1, 1);
if (displayflg)
HideCursor();
#endif
/* Bitmaps use a positive integer coordinate system with the lower left
corner pixel at coordinate (0, 0). Storage is allocated in 16-bit words
@ -79,12 +85,12 @@ LispPTR N_OP_misc7(LispPTR arg1, LispPTR arg2, LispPTR arg3, LispPTR arg4, LispP
}
#ifdef XWINDOW
#if defined(XWINDOW) || defined(SDL)
if (in_display_segment(base)) {
/* NB: base + offset doesn't need WORDPTR() wrapper */
flush_display_ptrregion(base + offset, 0, 16, 1);
}
#endif /* XWINDOW */
#endif /* XWINDOW || SDL */
ScreenLocked = NIL;
DBPRINT(("FBITMAPBIT old bit = 0x%x.\n", oldbit));