--- np2/macosx/np2.cpp 2003/11/11 16:33:50 1.34 +++ np2/macosx/np2.cpp 2004/04/18 16:42:28 1.59 @@ -26,7 +26,6 @@ #include "s98.h" #include "diskdrv.h" #include "fddfile.h" -#include "statsave.h" #include "mousemng.h" #include "configure.h" #include "screenopt.h" @@ -39,21 +38,40 @@ #include "np2opening.h" #include "toolwin.h" #include "aboutdlg.h" +#include "keystat.h" +#include "kdispwin.h" -#include -#define USE_RESUME #define NP2OPENING // #define OPENING_WAIT 1500 - NP2OSCFG np2oscfg = {0, 2, 0, 0, 0, 0, 1, 0}; + NP2OSCFG np2oscfg = {"Neko Project IIx", //titles + -1, //winx + -1, //winy + 0, //NOWAIT + 0, //DRAW_SKIP + 0, //DISPCLK + 0, //F11KEY + 0, //F12KEY + 0, //MOUSE_SW + 0, //JOYPAD1 + {5, 0, 0x3e, 19200, "", "", "GM", ""}, //mpu + 0, //confirm + 0, //resume + 1, //toolwin + 0, //jastsnd + 0, //I286SAVE +#ifdef SUPPORT_KEYDISP + 1, //keydisp +#endif + }; WindowPtr hWndMain; BOOL np2running; static UINT framecnt = 0; static UINT waitcnt = 0; static UINT framemax = 1; - BYTE scrnmode; + BYTE scrnmode = 0; #define DRAG_THRESHOLD 5 @@ -93,18 +111,19 @@ pascal OSErr OpenAppleEventHandler(const DescType rtype; AEKeyword key; AEDescList dlist; + OSErr err = noErr; if(!AEGetParamDesc(event,keyDirectObject,typeAEList,&dlist)) { AECountItems( &dlist,&ct ); for( i=1;i<=ct;i++ ) { pp=&fsc; if (!AEGetNthPtr( &dlist,i,typeFSS,&key,&rtype,(Ptr)pp,(long)sizeof(FSSpec),&len)) { - setDropFile(fsc, i-1); + err = setDropFile(fsc, i-1); } } AEDisposeDesc( &dlist ); } - return( 0 ); + return(err); } @@ -122,27 +141,64 @@ static void InitToolBox(void) { static void MenuBarInit(void) { #if 1 Handle hMenu; - MenuHandle happlemenu; hMenu = GetNewMBar(IDM_MAINMENU); if (!hMenu) { ExitToShell(); } SetMenuBar(hMenu); - happlemenu = GetMenuHandle(IDM_APPLE); - if (happlemenu) { - AppendResMenu(happlemenu, 'DRVR'); +#if !defined(SUPPORT_SCSI) + hmenu = GetMenuHandle(IDM_HDD); + if (hmenu) { + DeleteMenuItem(hmenu, 7); + DeleteMenuItem(hmenu, 6); + DeleteMenuItem(hmenu, 5); + DeleteMenuItem(hmenu, 4); + DeleteMenuItem(hmenu, 3); } +#endif InsertMenu(GetMenu(IDM_SASI1), -1); InsertMenu(GetMenu(IDM_SASI2), -1); +#if defined(SUPPORT_SCSI) + InsertMenu(GetMenu(IDM_SCSI0), -1); + InsertMenu(GetMenu(IDM_SCSI1), -1); + InsertMenu(GetMenu(IDM_SCSI2), -1); + InsertMenu(GetMenu(IDM_SCSI3), -1); +#endif InsertMenu(GetMenu(IDM_KEYBOARD), -1); InsertMenu(GetMenu(IDM_SOUND), -1); InsertMenu(GetMenu(IDM_MEMORY), -1); ChangeMenuAttributes(GetMenuRef(IDM_EDIT), kMenuAttrAutoDisable, 0); DisableAllMenuItems(GetMenuHandle(IDM_EDIT)); - SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2OPEN, kMenuOptionModifier); - SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT, kMenuOptionModifier); - SetMenuItemModifiers(GetMenuRef(IDM_SASI2), IDM_SASI2OPEN, kMenuOptionModifier); + SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2OPEN, kMenuShiftModifier); + SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT, kMenuShiftModifier); + SetMenuItemModifiers(GetMenuRef(IDM_SASI2), IDM_SASI2OPEN, kMenuShiftModifier); +#ifndef SUPPORT_KEYDISP + DisableMenuItem(GetMenuRef(IDM_OTHER), IDM_KEYDISP); +#endif +#ifndef SUPPORT_SOFTKBD + DisableMenuItem(GetMenuRef(IDM_OTHER), IDM_SOFTKBD); +#endif + if (np2oscfg.I286SAVE) { + AppendMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), CFCopyLocalizedString(CFSTR("i286 save"),"i286"), kMenuItemAttrIconDisabled, NULL,NULL); + } + + if (!(np2cfg.fddequip & 1)) { + DisableAllMenuItems(GetMenuRef(IDM_FDD1)); + } + if (!(np2cfg.fddequip & 2)) { + DisableAllMenuItems(GetMenuRef(IDM_FDD2)); + } +#if 0 +//Later... + if (!(np2cfg.fddequip & 4)) { + DisableAllMenuItems(GetMenuRef(IDM_FDD3)); + } + if (!(np2cfg.fddequip & 8)) { + DisableAllMenuItems(GetMenuRef(IDM_FDD4)); + } +#endif + DrawMenuBar(); #else OSStatus err; @@ -169,13 +225,11 @@ static void changescreen(BYTE mode) { } 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 { @@ -183,7 +237,7 @@ static void changescreen(BYTE mode) { } } -static void HandleMenuChoice(long wParam) { +void HandleMenuChoice(long wParam) { UINT update; @@ -251,6 +305,40 @@ static void HandleMenuChoice(long wParam diskdrv_sethdd(1, NULL); break; +#if defined(SUPPORT_SCSI) + case IDM_SCSI0OPEN: + dialog_changehdd(0x20); + break; + + case IDM_SCSI0REMOVE: + diskdrv_sethdd(0x20, NULL); + break; + + case IDM_SCSI1OPEN: + dialog_changehdd(0x21); + break; + + case IDM_SCSI1REMOVE: + diskdrv_sethdd(0x21, NULL); + break; + + case IDM_SCSI2OPEN: + dialog_changehdd(0x22); + break; + + case IDM_SCSI2REMOVE: + diskdrv_sethdd(0x22, NULL); + break; + + case IDM_SCSI3OPEN: + dialog_changehdd(0x23); + break; + + case IDM_SCSI3REMOVE: + diskdrv_sethdd(0x23, NULL); + break; +#endif + case IDM_FULLSCREEN: toggleFullscreen(); break; @@ -317,7 +405,7 @@ static void HandleMenuChoice(long wParam break; case IDM_MOUSE: - mouse_running(MOUSE_XOR); + mousemng_toggle(MOUSEPROC_SYSTEM); menu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); break; @@ -339,66 +427,103 @@ static void HandleMenuChoice(long wParam case IDM_KEY: menu_setkey(0); keystat_resetjoykey(); + update |= SYS_UPDATECFG; break; case IDM_JOY1: menu_setkey(1); keystat_resetjoykey(); + update |= SYS_UPDATECFG; break; case IDM_JOY2: menu_setkey(2); keystat_resetjoykey(); + update |= SYS_UPDATECFG; break; case IDM_MOUSEKEY: menu_setkey(3); keystat_resetjoykey(); + update |= SYS_UPDATECFG; break; case IDM_XSHIFT: menu_setxshift(np2cfg.XSHIFT ^ 1); keystat_forcerelease(0x70); + update |= SYS_UPDATECFG; break; case IDM_XCTRL: menu_setxshift(np2cfg.XSHIFT ^ 2); keystat_forcerelease(0x74); + update |= SYS_UPDATECFG; break; case IDM_XGRPH: menu_setxshift(np2cfg.XSHIFT ^ 4); keystat_forcerelease(0x73); + update |= SYS_UPDATECFG; + break; + + case IDM_F11KANA: + menu_setf11key(0); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11STOP: + menu_setf11key(1); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11EQU: + menu_setf11key(2); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11NFER: + menu_setf11key(3); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11USER: + menu_setf11key(4); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; break; case IDM_F12MOUSE: - menu_setf12copy(0); + menu_setf12key(0); mackbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; case IDM_F12COPY: - menu_setf12copy(1); + menu_setf12key(1); mackbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; - case IDM_F12STOP: - menu_setf12copy(2); + case IDM_F12COMMA: + menu_setf12key(2); mackbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; - case IDM_F12EQU: - menu_setf12copy(3); + case IDM_F12XFER: + menu_setf12key(3); mackbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; - case IDM_F12COMMA: - menu_setf12copy(4); + case IDM_F12USER: + menu_setf12key(4); mackbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; case IDM_BEEPOFF: @@ -475,6 +600,11 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATECFG; break; + case IDM_JASTSOUND: + menu_setjastsound(np2oscfg.jastsnd ^ 1); + update |= SYS_UPDATEOSCFG; + break; + case IDM_SEEKSND: menu_setmotorflg(np2cfg.MOTOR ^ 1); update |= SYS_UPDATECFG; @@ -532,10 +662,33 @@ static void HandleMenuChoice(long wParam menu_setmsrapid(np2cfg.MOUSERAPID ^ 1); update |= SYS_UPDATECFG; break; + case IDM_RECORDING: menu_setrecording(false); break; +#if defined(SUPPORT_KEYDISP) + case IDM_KEYDISP: + menu_setkeydisp(np2oscfg.keydisp ^ 1); + if (np2oscfg.keydisp) { + kdispwin_create(); + } + else { + kdispwin_destroy(); + } + break; +#endif +#if defined(SUPPORT_SOFTKBD) + case IDM_SOFTKBD: + menu_setsoftwarekeyboard(np2oscfg.softkey ^ 1); + if (np2oscfg.softkey) { + skbdwin_create(); + } + else { + skbdwin_destroy(); + } + break; +#endif case IDM_I286SAVE: debugsub_status(); @@ -545,7 +698,7 @@ static void HandleMenuChoice(long wParam { ICInstance inst; long start, fin; - const char urlStr[] = "http://retropc.net/tk800/np2x/help.html"; + const char urlStr[] = "http://retropc.net/tk800/np2x/help/help.html"; ICStart(&inst, 'SMil'); start = 0; @@ -565,14 +718,15 @@ static void HandleMenuChoice(long wParam static void HandleMouseDown(EventRecord *pevent) { WindowPtr hWnd; - BYTE ret; if (FindWindow(pevent->where, &hWnd) == inMenuBar) { soundmng_stop(); + mousemng_disable(MOUSEPROC_MACUI); HandleMenuChoice(MenuSelect(pevent->where)); + mousemng_enable(MOUSEPROC_MACUI); } else { - ret=mouse_btn(MOUSE_LEFTDOWN); + mousemng_buttonevent(MOUSEMNG_LEFTDOWN); } } @@ -582,7 +736,9 @@ static void HandleMouseDown(EventRecord static void framereset(UINT waitcnt) { framecnt = 0; + kdispwin_draw((BYTE)waitcnt); toolwin_draw((BYTE)waitcnt); + skbdwin_process(); if (np2oscfg.DISPCLK & 3) { if (sysmng_workclockrenewal()) { sysmng_updatecaption(3); @@ -596,6 +752,7 @@ static void processwait(UINT waitcnt) { timing_setcount(0); framereset(waitcnt); } + soundmng_sync(); } static void getstatfilename(char *path, const char *ext, int size) { @@ -630,11 +787,11 @@ static void flagload(const char *ext) { ret = IDOK; getstatfilename(path, ext, sizeof(path)); r = statsave_check(path, buf, sizeof(buf)); - if (r & (~NP2FLAG_DISKCHG)) { + if (r & (~STATFLAG_DISKCHG)) { ResumeErrorDialogProc(); ret = IDCANCEL; } - else if (r & NP2FLAG_DISKCHG) { + else if (r & STATFLAG_DISKCHG) { ret = ResumeWarningDialogProc(buf); } if (ret == IDOK) { @@ -649,6 +806,7 @@ int main(int argc, char *argv[]) { EventRef theEvent; EventTargetRef theTarget; + Rect bounds; #ifdef OPENING_WAIT UINT32 tick; #endif @@ -658,16 +816,22 @@ int main(int argc, char *argv[]) { InitToolBox(); macossub_init(); - MenuBarInit(); - initload(); + MenuBarInit(); + TRACEINIT(); - toolwin_readini(); + keystat_initialize(); + kdispwin_initialize(); + skbdwin_readini(); + + toolwin_readini(); + kdispwin_readini(); if (!(setupMainWindow())) { return(0); } + skbdwin_initialize(); #ifdef NP2OPENING openingNP2(); @@ -682,19 +846,24 @@ int main(int argc, char *argv[]) { menu_setframe(np2oscfg.DRAW_SKIP); menu_setkey(0); menu_setxshift(0); - menu_setf12copy(np2oscfg.F12COPY); + menu_setf11key(np2oscfg.F11KEY); + menu_setf12key(np2oscfg.F12KEY); menu_setbeepvol(np2cfg.BEEP_VOL); menu_setsound(np2cfg.SOUND_SW); + menu_setjastsound(np2oscfg.jastsnd); menu_setmotorflg(np2cfg.MOTOR); menu_setextmem(np2cfg.EXTMEM); menu_setdispclk(np2oscfg.DISPCLK); menu_setbtnrapid(np2cfg.BTN_RAPID); menu_setbtnmode(np2cfg.BTN_MODE); - if (np2oscfg.I286SAVE) { - AppendMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), CFCopyLocalizedString(CFSTR("i286 save"),"i286"), kMenuItemAttrIconDisabled, NULL,NULL); - } +#if defined(SUPPORT_KEYDISP) + menu_setkeydisp(np2oscfg.keydisp); +#endif +#if defined(SUPPORT_SOFTKBD) + menu_setsoftwarekeyboard(np2oscfg.softkey); +#endif - scrnmode = 0; + scrnmng_initialize(); if (scrnmng_create(scrnmode) != SUCCESS) { TRACETERM(); macossub_term(); @@ -710,16 +879,20 @@ int main(int argc, char *argv[]) { S98_init(); hid_init(); +#ifndef SUPPORT_SWSEEKSND if (soundmng_initialize() == SUCCESS) { soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL); soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); } +#endif #if defined(NP2GCC) + mousemng_initialize(); if (np2oscfg.MOUSE_SW) { // ver0.30 - mouse_running(MOUSE_ON); + mousemng_enable(MOUSEPROC_SYSTEM); } #endif + #ifdef OPENING_WAIT while((GETTICK() - tick) < OPENING_WAIT); #endif @@ -730,12 +903,19 @@ int main(int argc, char *argv[]) { flagload(np2resume); } #endif - if (np2oscfg.toolwin) { - toolwin_open(); - } +#if defined(SUPPORT_KEYDISP) + if (np2oscfg.keydisp) { + kdispwin_create(); + } +#endif +#if defined(SUPPORT_SOFTKBD) + if (np2oscfg.softkey) { + skbdwin_create(); + } +#endif theTarget = GetEventDispatcherTarget(); - + np2running = TRUE; while(np2running) { if (ReceiveNextEvent(0, NULL,kEventDurationNoWait,true, &theEvent)== noErr) @@ -801,6 +981,7 @@ int main(int argc, char *argv[]) { } } } + np2running = FALSE; menu_setrecording(true); @@ -808,6 +989,13 @@ int main(int argc, char *argv[]) { toggleFullscreen(); } + GetWindowBounds(hWndMain, kWindowGlobalPortRgn, &bounds); + if ((np2oscfg.winx != bounds.left) || (np2oscfg.winy != bounds.top)) { + np2oscfg.winx = bounds.left; + np2oscfg.winy = bounds.top; + sysmng_update(SYS_UPDATEOSCFG); + } + pccore_cfgupdate(); #if defined(USE_RESUME) @@ -824,22 +1012,28 @@ int main(int argc, char *argv[]) { hid_clear(); #if defined(NP2GCC) - mouse_running(MOUSE_OFF); + mousemng_disable(MOUSEPROC_SYSTEM); #endif - +#ifndef SUPPORT_SWSEEKSND soundmng_deinitialize(); +#endif scrnmng_destroy(); + kdispwin_destroy(); + skbdwin_destroy(); if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) { initsave(); // np2.cfg create toolwin_writeini(); // np2.cfg append + kdispwin_writeini(); + skbdwin_writeini(); } + skbdwin_deinitialize(); TRACETERM(); macossub_term(); dosio_term(); - DisposeWindow(hWndMain); toolwin_close(); + DisposeWindow(hWndMain); (void)argc; (void)argv; @@ -867,8 +1061,6 @@ static pascal OSStatus np2appevent (Even HIPoint delta; EventMouseButton buttonKind; GetEventParameter (event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(EventMouseButton), NULL, &buttonKind); - - BYTE ret; #endif switch (eventClass) @@ -880,9 +1072,9 @@ static pascal OSStatus np2appevent (Even if (cmd.commandID == kHICommandAppHelp) { ICInstance inst; long start, fin; - const char urlStr[] = "http://retropc.net/tk800/np2x/help.html"; + const char urlStr[] = "http://retropc.net/tk800/np2x/help/help.html"; - ICStart(&inst, '????'); + ICStart(&inst, 'SMil'); start = 0; fin = strlen(urlStr); ICLaunchURL(inst, "\p", urlStr, strlen(urlStr), &start, &fin); @@ -902,13 +1094,14 @@ static pascal OSStatus np2appevent (Even switch (whatHappened) { case kEventMouseMoved: + case kEventMouseDragged: GetEventParameter (event, kEventParamMouseDelta, typeHIPoint, NULL, sizeof(HIPoint), NULL, &delta); - mouse_callback(delta); + mousemng_callback(delta); result = noErr; break; case kEventMouseDown: - if (buttonKind == kEventMouseButtonSecondary | modif & controlKey) { - ret=mouse_btn(MOUSE_RIGHTDOWN); + if (buttonKind == kEventMouseButtonSecondary || modif & cmdKey) { + mousemng_buttonevent(MOUSEMNG_RIGHTDOWN); } else { HandleMouseDown(&eve); @@ -916,16 +1109,16 @@ static pascal OSStatus np2appevent (Even result=noErr; break; case kEventMouseUp: - if (buttonKind == kEventMouseButtonSecondary | modif & controlKey) { - ret=mouse_btn(MOUSE_RIGHTUP); + if (buttonKind == kEventMouseButtonSecondary || modif & cmdKey) { + mousemng_buttonevent(MOUSEMNG_RIGHTUP); } else if (buttonKind == kEventMouseButtonTertiary) { - mouse_running(MOUSE_XOR); + mousemng_toggle(MOUSEPROC_SYSTEM); menu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); } else { - ret=mouse_btn(MOUSE_LEFTUP); + mousemng_buttonevent(MOUSEMNG_LEFTUP); } result=noErr; break; @@ -936,6 +1129,29 @@ static pascal OSStatus np2appevent (Even } #endif break; + case kEventClassKeyboard: + if (GetEventKind(event)==kEventRawKeyModifiersChanged) { + static UInt32 backup = 0; + UInt32 change = backup ^ modif; + backup = modif; + if (change & shiftKey) { + if (modif & shiftKey) keystat_senddata(0x70); + else keystat_senddata(0x70 | 0x80); + } + if (change & optionKey) { + if (modif & optionKey) keystat_senddata(0x73); + else keystat_senddata(0x73 | 0x80); + } + if (change & controlKey) { + if (modif & controlKey) keystat_senddata(0x74); + else keystat_senddata(0x74 | 0x80); + } + if (change & alphaLock) { + keystat_senddata(0x71); + } + result = noErr; + } + break; default: break; } @@ -957,7 +1173,6 @@ static pascal OSStatus np2windowevent(Ev eventClass = GetEventClass(event); whatHappened = GetEventKind(event); - static UInt32 backup = 0; switch (eventClass) { case kEventClassKeyboard: @@ -979,26 +1194,15 @@ static pascal OSStatus np2windowevent(Ev if (modif & cmdKey) { EventRecord eve; ConvertEventRefToEventRecord( event,&eve ); + mousemng_disable(MOUSEPROC_MACUI); HandleMenuChoice(MenuEvent(&eve)); + mousemng_enable(MOUSEPROC_MACUI); } else { mackbd_keydown(key); } result = noErr; break; - case kEventRawKeyModifiersChanged: - if (modif & shiftKey) keystat_senddata(0x70); - else keystat_senddata(0x70 | 0x80); - if (modif & optionKey) keystat_senddata(0x73); - else keystat_senddata(0x73 | 0x80); - if (modif & controlKey) keystat_senddata(0x74); - else keystat_senddata(0x74 | 0x80); - if ((modif & alphaLock) != (backup & alphaLock)) { - keystat_senddata(0x71); - backup = modif; - } - result = noErr; - break; default: break; } @@ -1043,8 +1247,10 @@ static const EventTypeSpec appEventList[ {kEventClassMouse, kEventMouseDown}, #if defined(NP2GCC) {kEventClassMouse, kEventMouseMoved}, + {kEventClassMouse, kEventMouseDragged}, {kEventClassMouse, kEventMouseUp}, #endif + {kEventClassKeyboard, kEventRawKeyModifiersChanged}, }; static const EventTypeSpec windEventList[] = { @@ -1057,7 +1263,6 @@ static const EventTypeSpec windEventList {kEventClassKeyboard, kEventRawKeyDown}, {kEventClassKeyboard, kEventRawKeyUp}, {kEventClassKeyboard, kEventRawKeyRepeat}, - {kEventClassKeyboard, kEventRawKeyModifiersChanged}, }; @@ -1072,6 +1277,8 @@ static void setUpCarbonEvent(void) { windEventList, 0, NULL); } +static short backupwidth=0, backupheight=0; + static bool setupMainWindow(void) { #if defined(NP2GCC) OSStatus err; @@ -1100,8 +1307,17 @@ static bool setupMainWindow(void) { } SizeWindow(hWndMain, 640, 400, TRUE); #endif - scrnmng_initialize(); + if (np2oscfg.winx != -1 && np2oscfg.winy != -1) { + MoveWindow(hWndMain, np2oscfg.winx, np2oscfg.winy, false); + } setUpCarbonEvent(); + if (backupwidth) scrnmng_setwidth(0, backupwidth); + if (backupheight) scrnmng_setheight(0, backupheight); + CFStringRef title = CFStringCreateWithCString(NULL, np2oscfg.titles, kCFStringEncodingUTF8); + if (title) { + SetWindowTitleWithCFString(hWndMain, title); + CFRelease(title); + } ShowWindow(hWndMain); return(true); } @@ -1109,18 +1325,33 @@ static bool setupMainWindow(void) { static void toggleFullscreen(void) { static Ptr bkfullscreen; static BYTE mouse = 0; + static bool toolwin = false; + MenuRef menu = GetMenuRef(IDM_SCREEN); + Rect bounds; + short w, h; soundmng_stop(); - if (!scrnmode & SCRNMODE_FULLSCREEN) { - RGBColor col = {0, 0, 0}; - short w=640, h=480; + if (!(scrnmode & SCRNMODE_FULLSCREEN)) { + HandleMenuChoice(IDM_ROLNORMAL); + GetWindowBounds(hWndMain, kWindowContentRgn, &bounds); + backupwidth = bounds.right - bounds.left; + backupheight = bounds.bottom - bounds.top; + w = backupwidth; + h = backupheight; + toolwin = np2oscfg.toolwin; + toolwin_close(); + np2oscfg.winx = bounds.left; + np2oscfg.winy = bounds.top; DisposeWindow(hWndMain); - BeginFullScreen(&bkfullscreen,0,&w,&h,&hWndMain,&col,(fullScreenAllowEvents | fullScreenDontChangeMenuBar)); + BeginFullScreen(&bkfullscreen, 0, &w, &h, &hWndMain, NULL, fullScreenAllowEvents); + DisableMenuItem(menu, IDM_ROLNORMAL); + DisableMenuItem(menu, IDM_ROLLEFT); + DisableMenuItem(menu, IDM_ROLRIGHT); HideMenuBar(); setUpCarbonEvent(); if (!np2oscfg.MOUSE_SW) { mouse = np2oscfg.MOUSE_SW; - mouse_running(MOUSE_ON); + mousemng_enable(MOUSEPROC_SYSTEM); menu_setmouse(1); } changescreen(scrnmode | SCRNMODE_FULLSCREEN); @@ -1131,15 +1362,17 @@ static void toggleFullscreen(void) { setupMainWindow(); changescreen(scrnmode & (~SCRNMODE_FULLSCREEN)); if (!mouse) { - mouse_running(MOUSE_OFF); + mousemng_disable(MOUSEPROC_SYSTEM); menu_setmouse(0); } + EnableMenuItem(menu, IDM_ROLNORMAL); + EnableMenuItem(menu, IDM_ROLLEFT); + EnableMenuItem(menu, IDM_ROLRIGHT); ShowMenuBar(); + if (toolwin) { + toolwin_open(); + } } CheckMenuItem(GetMenuHandle(IDM_SCREEN), LoWord(IDM_FULLSCREEN), scrnmode & SCRNMODE_FULLSCREEN); soundmng_play(); } - -void recieveCommand(long param) { - HandleMenuChoice(param); -}