static void eventproc(EventRecord *event) { int keycode; keycode = (event->message & keyCodeMask) >> 8; switch(event->what) { case mouseDown: HandleMouseDown(event); break; case updateEvt: HandleUpdateEvent(event); break; case keyDown: case autoKey: if (!np2running) { break; } #if !TARGET_API_MAC_CARBON if ((keycode == 0x6f) && (np2oscfg.F12KEY == 0)) { HandleMenuChoice(IDM_MOUSE); break; } #endif if (event->modifiers & cmdKey) { #if !TARGET_API_MAC_CARBON if (mackbd_keydown(keycode, TRUE)) { break; } #endif soundmng_stop(); mousemng_disable(MOUSEPROC_MACUI); #if TARGET_API_MAC_CARBON HandleMenuChoice(MenuEvent(event)); #else HandleMenuChoice(MenuKey(event->message & charCodeMask)); #endif mousemng_enable(MOUSEPROC_MACUI); soundmng_play(); } else { mackbd_keydown(keycode, FALSE); } break; case keyUp: mackbd_keyup(keycode); break; case mouseUp: mousemng_buttonevent(MOUSEMNG_LEFTUP); mousemng_buttonevent(MOUSEMNG_RIGHTUP); break; case activateEvt: mackbd_activate((event->modifiers & activeFlag)?TRUE:FALSE); break; } }
static void HandleMouseDown(EventRecord *pevent) { WindowPtr hWnd; Rect rDrag; switch(FindWindow(pevent->where, &hWnd)) { case inMenuBar: if (np2running) { soundmng_stop(); mousemng_disable(MOUSEPROC_MACUI); HandleMenuChoice(MenuSelect(pevent->where)); mousemng_enable(MOUSEPROC_MACUI); soundmng_play(); } break; case inDrag: #if TARGET_API_MAC_CARBON { BitMap gscreenBits; GetQDGlobalsScreenBits(&gscreenBits); rDrag = gscreenBits.bounds; InsetRect(&rDrag, DRAG_THRESHOLD, DRAG_THRESHOLD); DragWindow(hWnd, pevent->where, &rDrag); } #else rDrag = qd.screenBits.bounds; InsetRect(&rDrag, DRAG_THRESHOLD, DRAG_THRESHOLD); DragWindow(hWnd, pevent->where, &rDrag); #endif break; case inContent: mousemng_buttonevent((pevent->modifiers & (1 << 12)) ?MOUSEMNG_RIGHTDOWN:MOUSEMNG_LEFTDOWN); break; case inGoAway: if (TrackGoAway(hWnd, pevent->where)) { } np2running = FALSE; break; } }
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; RECT rc; HDC hdc; UINT update; switch (msg) { case WM_CREATE: #ifndef __GNUC__ WINNLSEnableIME(hWnd, FALSE); #endif break; case WM_SYSCOMMAND: update = 0; switch(wParam) { case IDM_MEMORYDUMP: debugsub_memorydump(); break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } sysmng_update(update); break; case WM_COMMAND: np2cmd(hWnd, LOWORD(wParam)); break; case WM_ACTIVATE: if (LOWORD(wParam) != WA_INACTIVE) { scrnmng_update(); keystat_allrelease(); mousemng_enable(MOUSEPROC_BG); } else { mousemng_disable(MOUSEPROC_BG); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); if (np2opening) { HINSTANCE hinst; RECT rect; int width; int height; HBITMAP hbmp; BITMAP bmp; HDC hmdc; HBRUSH hbrush; #if defined(_WIN64) hinst = reinterpret_cast<HINSTANCE>(::GetWindowLongPtr(hWnd, GWLP_HINSTANCE)); #else hinst = reinterpret_cast<HINSTANCE>(::GetWindowLong(hWnd, GWL_HINSTANCE)); #endif GetClientRect(hWnd, &rect); width = rect.right - rect.left; height = rect.bottom - rect.top; hbmp = LoadBitmap(hinst, _T("NP2BMP")); GetObject(hbmp, sizeof(BITMAP), &bmp); hbrush = (HBRUSH)SelectObject(hdc, GetStockObject(BLACK_BRUSH)); PatBlt(hdc, 0, 0, width, height, PATCOPY); SelectObject(hdc, hbrush); hmdc = CreateCompatibleDC(hdc); SelectObject(hmdc, hbmp); BitBlt(hdc, (width - bmp.bmWidth) / 2, (height - bmp.bmHeight) / 2, bmp.bmWidth, bmp.bmHeight, hmdc, 0, 0, SRCCOPY); DeleteDC(hmdc); DeleteObject(hbmp); } else { // scrnmng_update(); scrndraw_redraw(); } EndPaint(hWnd, &ps); break; case WM_QUERYNEWPALETTE: scrnmng_querypalette(); break; case WM_MOVE: if ((!scrnmng_isfullscreen()) && (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE)))) { GetWindowRect(hWnd, &rc); np2oscfg.winx = rc.left; np2oscfg.winy = rc.top; sysmng_update(SYS_UPDATEOSCFG); } break; case WM_SIZE: if (wParam == SIZE_RESTORED) { scrnmng_restoresize(); } break; case WM_ENTERMENULOOP: winuienter(); if (scrnmng_isfullscreen()) { DrawMenuBar(hWnd); } break; case WM_EXITMENULOOP: winuileave(); break; case WM_ENTERSIZEMOVE: soundmng_disable(SNDPROC_MAIN); mousemng_disable(MOUSEPROC_WINUI); break; case WM_EXITSIZEMOVE: mousemng_enable(MOUSEPROC_WINUI); soundmng_enable(SNDPROC_MAIN); break; case WM_KEYDOWN: if (wParam == VK_F11) { return(DefWindowProc(hWnd, WM_SYSKEYDOWN, VK_F10, lParam)); } if ((wParam == VK_F12) && (!np2oscfg.F12COPY)) { mousemng_toggle(MOUSEPROC_SYSTEM); xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); } else { winkbd_keydown(wParam, lParam); } break; case WM_KEYUP: if (wParam == VK_F11) { return(DefWindowProc(hWnd, WM_SYSKEYUP, VK_F10, lParam)); } if ((wParam != VK_F12) || (np2oscfg.F12COPY)) { winkbd_keyup(wParam, lParam); } break; case WM_SYSKEYDOWN: winkbd_keydown(wParam, lParam); break; case WM_SYSKEYUP: winkbd_keyup(wParam, lParam); break; case WM_LBUTTONDOWN: if (!mousemng_buttonevent(MOUSEMNG_LEFTDOWN)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_LBUTTONUP: if (!mousemng_buttonevent(MOUSEMNG_LEFTUP)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_MBUTTONDOWN: // ver0.26 mousemng_toggle(MOUSEPROC_SYSTEM); xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); break; case WM_RBUTTONDOWN: if (!mousemng_buttonevent(MOUSEMNG_RIGHTDOWN)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_RBUTTONUP: if (!mousemng_buttonevent(MOUSEMNG_RIGHTUP)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_NP2CMD: switch(LOWORD(lParam)) { case NP2CMD_EXIT: np2quitmsg = 1; PostQuitMessage(0); break; case NP2CMD_EXIT2: np2quitmsg = 2; PostQuitMessage(0); break; case NP2CMD_RESET: pccore_cfgupdate(); pccore_reset(); break; } break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } return(0L); }
bool dcsys_task() { enum { CMD_MENU = 1, }; int cmd = 0; Event ev; static unsigned int tick = 0; unsigned int tm = Timer() - tick; if (tm < USEC_TO_TIMER(1000000/60)) { return __dc_avail; } tick += tm; int x, y; int cJoy = 0; static int pJoy; static unsigned int repeatTime; if (__dc_avail) { dc_mouseaxis1 = 0; dc_mouseaxis2 = 0; while (PollEvent(ev)) { switch (ev.type) { case EVENT_KEYDOWN: switch (ev.key.keycode) { case KBD_S1: case KBD_S2: cmd = CMD_MENU; break; default: dckbd_keydown(ev.key.keycode); } break; case EVENT_KEYUP: dckbd_keyup(ev.key.keycode); break; case EVENT_MOUSEMOTION: dc_mouseaxis1 += ev.motion.x; dc_mouseaxis2 += ev.motion.y; break; case EVENT_MOUSEBUTTONDOWN: switch (ev.button.button) { case EVENT_BUTTON_LEFT: mousemng_buttonevent(MOUSEMNG_LEFTDOWN); break; case EVENT_BUTTON_RIGHT: mousemng_buttonevent(MOUSEMNG_RIGHTDOWN); break; } break; case EVENT_MOUSEBUTTONUP: switch (ev.button.button) { case EVENT_BUTTON_LEFT: mousemng_buttonevent(MOUSEMNG_LEFTUP); break; case EVENT_BUTTON_RIGHT: mousemng_buttonevent(MOUSEMNG_RIGHTUP); break; } break; case EVENT_JOYAXISMOTION: x = 0; y = 0; if (ev.jaxis.axis == 0) { x = ev.jaxis.value; } if (ev.jaxis.axis == 1) { y = ev.jaxis.value; } dc_mouseaxis1 += x; dc_mouseaxis2 += y; break; case EVENT_JOYBUTTONDOWN: if (ev.jbutton.button == JOY_START) cmd = CMD_MENU; if (ev.jbutton.button == JOY_RTRIGGER) __skbd_avail = !__skbd_avail; if (__skbd_avail && ev.jbutton.button == JOY_A) softkbddc_down(); if (__skbd_avail && ev.jbutton.button == JOY_B) __use_bg = !__use_bg; if (__skbd_avail) { cJoy = ev.jbutton.button & 0xffff; } else { switch (ev.jbutton.button) { case JOY_UP: dckbd_keydown(JOY1_UP); break; case JOY_DOWN: dckbd_keydown(JOY1_DOWN); break; case JOY_LEFT: dckbd_keydown(JOY1_LEFT); break; case JOY_RIGHT: dckbd_keydown(JOY1_RIGHT); break; case JOY_A: dckbd_keydown(JOY1_A); break; case JOY_B: dckbd_keydown(JOY1_B); break; case JOY_X: mousemng_buttonevent(MOUSEMNG_LEFTDOWN); break; case JOY_Y: mousemng_buttonevent(MOUSEMNG_RIGHTDOWN); break; } } break; case EVENT_JOYBUTTONUP: softkbddc_up(); if (__skbd_avail) { pJoy = 0; repeatTime = 0; } else { switch (ev.jbutton.button) { case JOY_UP: dckbd_keyup(JOY1_UP); break; case JOY_DOWN: dckbd_keyup(JOY1_DOWN); break; case JOY_LEFT: dckbd_keyup(JOY1_LEFT); break; case JOY_RIGHT: dckbd_keyup(JOY1_RIGHT); break; case JOY_A: dckbd_keyup(JOY1_A); break; case JOY_B: dckbd_keyup(JOY1_B); break; case JOY_X: mousemng_buttonevent(MOUSEMNG_LEFTUP); break; case JOY_Y: mousemng_buttonevent(MOUSEMNG_RIGHTUP); break; } } break; case EVENT_QUIT: __dc_avail = false; break; } } } if (__skbd_avail) { dc_joyinput = 0; int button = 0; if (cJoy) { repeatTime = Timer() + USEC_TO_TIMER(1000000/60*30); pJoy = cJoy; button = cJoy; } else if (repeatTime < Timer()) { button = pJoy; repeatTime = Timer() + USEC_TO_TIMER(1000000/60*10); } softkbddc_send(button); } else getJoyButton(JOYSTICKID1, &dc_joyinput); if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) { initsave(); sysmng_initialize(); } switch (cmd) { case CMD_MENU: sysmenu_menuopen(); break; } scrnmng_update(); softkbddc_draw(); ta_commit_frame(); return __dc_avail; }