--- np2/macosx/np2.cpp 2003/10/24 19:19:58 1.16 +++ np2/macosx/np2.cpp 2003/10/25 16:52:58 1.21 @@ -3,6 +3,7 @@ #include "strres.h" #include "np2.h" #include "dosio.h" +#include "commng.h" #include "scrnmng.h" #include "soundmng.h" #include "sysmng.h" @@ -36,7 +37,7 @@ #ifdef NP2OPENING #include -#define OPENING_WAIT 1500 +// #define OPENING_WAIT 1500 #endif @@ -73,6 +74,8 @@ static const char np2resume[] = "sav"; #endif static void setUpCarbonEvent(void); +static bool setupMainWindow(void); +static void toggleFullscreen(void); #ifdef TARGET_API_MAC_CARBON static pascal OSErr handleQuitApp(const AppleEvent *event, AppleEvent *reply, @@ -135,8 +138,35 @@ static void MenuBarInit(void) { } static void changescreen(BYTE mode) { - +#if 0 (void)mode; +#endif + + BYTE change; + BYTE renewal; + + change = scrnmode ^ mode; + renewal = (change & SCRNMODE_FULLSCREEN); + if (mode & SCRNMODE_FULLSCREEN) { + renewal |= (change & SCRNMODE_HIGHCOLOR); + } + else { + renewal |= (change & SCRNMODE_ROTATEMASK); + } + if (renewal) { + soundmng_stop(); + mouse_running(MOUSE_STOP); + scrnmng_destroy(); + if (scrnmng_create(mode) == SUCCESS) { + scrnmode = mode; + } + scrndraw_redraw(); + mouse_running(MOUSE_CONT); + soundmng_play(); + } + else { + scrnmode = mode; + } } static void HandleMenuChoice(long wParam) { @@ -169,6 +199,11 @@ static void HandleMenuChoice(long wParam newhdddisk(); break; #endif + + case IDM_FONT: + dialog_font(); + break; + case IDM_EXIT: np2running = FALSE; break; @@ -205,6 +240,10 @@ static void HandleMenuChoice(long wParam diskdrv_sethdd(1, NULL); break; + case IDM_FULLSCREEN: + toggleFullscreen(); + break; + case IDM_ROLNORMAL: menu_setrotate(0); changescreen(scrnmode & (~SCRNMODE_ROTATEMASK)); @@ -271,6 +310,7 @@ static void HandleMenuChoice(long wParam mouse_running(MOUSE_XOR); menu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); + toggleMenubar(); break; #endif @@ -562,8 +602,8 @@ static void eventproc(EventRecord *event static void processwait(UINT waitcnt) { if (timing_getcount() >= waitcnt) { - timing_setcount(0); framecnt = 0; + timing_setcount(0); if (np2oscfg.DISPCLK & 3) { if (sysmng_workclockrenewal()) { sysmng_updatecaption(3); @@ -651,8 +691,8 @@ static void openingNP2(void) { int main(int argc, char *argv[]) { - Rect wRect; #if 0 + Rect wRect; EventRecord event; #endif EventRef theEvent; @@ -672,6 +712,7 @@ int main(int argc, char *argv[]) { TRACEINIT(); +#if 0 SetRect(&wRect, 100, 100, 100, 100); hWndMain = NewWindow(0, &wRect, "\pNeko Project II", FALSE, noGrowDocProc, (WindowPtr)-1, TRUE, 0); @@ -685,6 +726,11 @@ int main(int argc, char *argv[]) { SizeWindow(hWndMain, 640, 400, TRUE); setUpCarbonEvent(); ShowWindow(hWndMain); +#endif + if (!(setupMainWindow())) { + return(0); + } + #ifdef NP2OPENING openingNP2(); #endif @@ -716,6 +762,7 @@ int main(int argc, char *argv[]) { return(0); } + commng_initialize(); sysmng_initialize(); mackbd_initialize(); pccore_init(); @@ -811,7 +858,7 @@ int main(int argc, char *argv[]) { else { timing_setcount(cnt - framecnt); } - framecnt = 0; + processwait(0); } } else { @@ -823,6 +870,10 @@ int main(int argc, char *argv[]) { } np2running = FALSE; + if (scrnmode & SCRNMODE_FULLSCREEN) { + toggleFullscreen(); + } + pccore_cfgupdate(); #if defined(USE_RESUME) @@ -957,6 +1008,9 @@ static pascal OSStatus np2windowevent(Ev np2running = FALSE; result = noErr; } + else if (whatHappened == kEventWindowShowing) { + scrndraw_redraw(); + } break; case kEventClassKeyboard: UInt32 key; @@ -975,9 +1029,9 @@ static pascal OSStatus np2windowevent(Ev break; case kEventRawKeyDown: if (modif & cmdKey) { - char para; - GetEventParameter (event, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, ¶); - HandleMenuChoice(MenuKey(para)); + EventRecord eve; + ConvertEventRefToEventRecord( event,&eve ); + HandleMenuChoice(MenuEvent(&eve)); } else { mackbd_f12down(key); @@ -1020,6 +1074,7 @@ static const EventTypeSpec appEventList[ static const EventTypeSpec windEventList[] = { {kEventClassWindow, kEventWindowClose}, + {kEventClassWindow, kEventWindowShowing}, {kEventClassKeyboard, kEventRawKeyDown}, {kEventClassKeyboard, kEventRawKeyUp}, {kEventClassKeyboard, kEventRawKeyRepeat}, @@ -1031,10 +1086,77 @@ static void setUpCarbonEvent(void) { InstallStandardEventHandler(GetWindowEventTarget(hWndMain)); InstallApplicationEventHandler(NewEventHandlerUPP(np2appevent), - sizeof(appEventList)/sizeof(EventTypeSpec), + GetEventTypeCount(appEventList), appEventList, 0, NULL); InstallWindowEventHandler(hWndMain, NewEventHandlerUPP(np2windowevent), - sizeof(windEventList)/sizeof(EventTypeSpec), + GetEventTypeCount(windEventList), windEventList, 0, NULL); } +bool setupMainWindow(void) { +#if defined(NP2GCC) && 0 +#else + Rect wRect; + + SetRect(&wRect, 100, 100, 100, 100); + hWndMain = NewWindow(0, &wRect, "\pNeko Project II", FALSE, + noGrowDocProc, (WindowPtr)-1, TRUE, 0); + if (!hWndMain) { + TRACETERM(); + macossub_term(); + dosio_term(); + return(false); + } + SizeWindow(hWndMain, 640, 400, TRUE); +#endif + scrnmng_initialize(); + setUpCarbonEvent(); + ShowWindow(hWndMain); + return(true); +} + +static void toggleFullscreen(void) { + static Ptr bkfullscreen; + static BYTE mouse = 0; + + soundmng_stop(); + if (!scrnmode & SCRNMODE_FULLSCREEN) { + RGBColor col = {0, 0, 0}; + short w=640, h=480; + DisposeWindow(hWndMain); + BeginFullScreen(&bkfullscreen,0,&w,&h,&hWndMain,&col,(fullScreenAllowEvents | fullScreenDontChangeMenuBar)); + HideMenuBar(); + setUpCarbonEvent(); + if (!np2oscfg.MOUSE_SW) { + mouse = np2oscfg.MOUSE_SW; + mouse_running(MOUSE_ON); + menu_setmouse(1); + } + changescreen(scrnmode | SCRNMODE_FULLSCREEN); + } + else { + scrnmng_destroy(); + EndFullScreen(bkfullscreen, 0); + setupMainWindow(); + changescreen(scrnmode & (~SCRNMODE_FULLSCREEN)); + if (!mouse) { + mouse_running(MOUSE_OFF); + menu_setmouse(0); + } + ShowMenuBar(); + } + CheckMenuItem(GetMenuHandle(IDM_SCREEN), LoWord(IDM_FULLSCREEN), scrnmode & SCRNMODE_FULLSCREEN); + soundmng_play(); +} + +void toggleMenubar(void) { + if (scrnmode & SCRNMODE_FULLSCREEN) { + if (!np2oscfg.MOUSE_SW) { + ShowMenuBar(); + } + else { + HideMenuBar(); + } + } +} +