cebix / macemu

Basilisk II and SheepShaver Macintosh emulators
1.4k stars 291 forks source link

Color-palette problem workaround for macOS? #146

Closed emendelson closed 6 years ago

emendelson commented 6 years ago

I don't pretend to know what I'm talking about, but I hope this may be useful for someone who understands the issues.

Under OS X/macOS (at least all versions that I can remember), SheepShaver's color palette goes wrong when SheepShaver is minimized and then restored. This problem can be fixed with this change in video_sdl.cpp (commenting out the whole line that has ////// in front of it):

// Application activate/deactivate case SDL_ACTIVEEVENT: // Force a complete window refresh when activating, to avoid redraw artifacts otherwise. ////// if (event.active.gain && (event.active.state & SDL_APPACTIVE)) force_complete_window_refresh(); break;

or this version, which merely removes the second test in that line:

// Application activate/deactivate case SDL_ACTIVEEVENT: // Force a complete window refresh when activating, to avoid redraw artifacts otherwise. if (event.active.gain) // changed by removing second condition force_complete_window_refresh(); break;

Because I have no idea of what the bad effects of this change might be, I'm only offering this brute-force fix as something that may point the way to an intelligent fix instead.

asvitkine commented 6 years ago

Thanks for the report! I was able to repro the issue.

The second version of the fix makes sense to me. I've landed it as here:

https://github.com/cebix/macemu/commit/c9717bf3316a3e4e6fe60fbe4b4c06812db2be0b

On Fri, Dec 1, 2017 at 3:11 PM, emendelson notifications@github.com wrote:

I don't pretend to know what I'm talking about, but I hope this may be useful for someone who understands the issues.

Under OS X/macOS (at least all versions that I can remember), SheepShaver's color palette goes wrong when SheepShaver is minimized and then restored. This problem can be fixed with this change in video_sdl.cpp (commenting out the whole line that has ////// in front of it):

// Application activate/deactivate case SDL_ACTIVEEVENT: // Force a complete window refresh when activating, to avoid redraw artifacts otherwise. ////// if (event.active.gain && (event.active.state & SDL_APPACTIVE)) force_complete_window_refresh(); break;

or this version, which merely removes the second test in that line:

// Application activate/deactivate case SDL_ACTIVEEVENT: // Force a complete window refresh when activating, to avoid redraw artifacts otherwise. if (event.active.gain) // changed by removing second condition force_complete_window_refresh(); break;

Because I have no idea of what the bad effects of this change might be, I'm only offering this as something that may point the way to an intelligent fix rather than this brute-force fix.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/cebix/macemu/issues/146, or mute the thread https://github.com/notifications/unsubscribe-auth/AABE8KUfHtAPrdMfSWnT9oNvBFpSB1bLks5s8F1fgaJpZM4Qy2m5 .