void dlgabout() { char work[32]; const char str_auth[] = "Yui/Punyu/Studio Milmake"; float x,y; tx_resetwork(); icon.create_texture(); milstr_ncpy(work, str_xmil, NELEMENTS(work)); milstr_ncat(work, str_space, NELEMENTS(work)); milstr_ncat(work, xmilversion, NELEMENTS(work)); float base_width = MAX_MENU_SIZE; float base_height = (ui_font_height() + 5) * 3 + (32 + 5) + 6; float offx = ui_offx() + (ui_width() - base_width) / 2; float offy = ui_offy() + (ui_height() - base_height) / 2; tx_resetfont(); scrnmng_update(); draw_transquad(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, UI_TR, UI_TR, UI_TR, UI_TR); draw_transquad(offx, offy, offx + base_width, offy + base_height, UI_BS, UI_BS, UI_BS, UI_BS); x = offx + (base_width - strlen(mstr_about) * ui_font_width()) / 2; y = offy; ui_font_draw(x, y, 255, 255, 255, mstr_about); y += ui_font_height() + 5; draw_transquad(offx, y, offx + base_width, y + 1, MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255)); y += 6; x = offx + (base_width - strlen(work) * ui_font_width()) / 2; ui_font_draw(x, y, 255, 255, 255, work); y += ui_font_height() + 5; x = offx + (base_width - 32) / 2; icon.drawIcon(x, y); y += 32 + 5; x = offx + (base_width - strlen(str_auth) * ui_font_width()) / 2; ui_font_draw(x, y, 255, 255, 255, str_auth); x = ui_offx(); y = ui_height() - ui_font_height(); ui_font_draw(x, y, 255, 255, 255, "B:Back"); ta_commit_frame(); for (;;) { uisys_task(); if(ui_keypressed(JOY_B)) 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; }
int snd_menu(Sound *menu, int num_items) { float x,y; float base_width = MAX_MENU_SIZE; float base_height = ((menu[num_items-1].y + ui_font_height()) - menu[0].y); int menu_pos; char work[32]; int max_menu = 0; base_height += ui_font_height() * 2; for (int i = 0; i < num_items; ++i) { switch (menu[i].type) { case DLGTYPE_RADIO: case DLGTYPE_CHECK: case DLGTYPE_SLIDER: ++max_menu; break; } } int result = -1; int id = 0; int sel = 0; #if 0 int max_val = 0; int min_val = 0; int val_index = 0; #endif float offx = ui_offx() + (ui_width() - base_width) / 2; float offy = ui_offy() + (ui_height() - base_height) / 2; int fade = 128; for (;;) { uisys_task(); if (ui_keyrepeat(JOY_UP)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: break; default: if (--sel < 0) sel = max_menu - 1; } } else if (ui_keyrepeat(JOY_DOWN)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: break; default: if (++sel > (max_menu - 1)) sel = 0; } } #if 0 else if (ui_keyrepeat(JOY_RIGHT) || ui_keyrepeat(JOY_RTRIGGER)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: if (++val_index > max_val) val_index = max_val; break; default: if (++menu_index > 1) { menu_index = 1; } else { return 0; } } } else if (ui_keyrepeat(JOY_LEFT) || ui_keyrepeat(JOY_LTRIGGER)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: if (--val_index < min_val) val_index = min_val; break; default: if (--menu_index < 0) { menu_index = 0; } else { return 0; } } } #endif if (ui_keypressed(JOY_A)) { switch (id) { case DID_JOYPAD1: menudlg_setval(id, !menudlg_getval(id)); break; case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: dlg_btn(id); break; } } if (ui_keypressed(JOY_B)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: result = -1; break; default: if (result < 0) return -1; } } if ((fade += 255/60) > 255) fade = 128; tx_resetfont(); scrnmng_update(); draw_transquad(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, UI_TR, UI_TR, UI_TR, UI_TR); draw_transquad(offx, offy, offx + base_width, offy + base_height, UI_BS, UI_BS, UI_BS, UI_BS); OEMSPRINTF(work, "%s ", mstr_snd); x = offx + (base_width - strlen(work) * ui_font_width()) / 2; y = offy; ui_font_draw(x, y, 255, 255, 255, work); y += ui_font_height(); x = offx; draw_transquad(offx, y, offx + base_width, y + 1, MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255)); y += 6; menu_pos = 0; for (int i = 0; i < num_items; ++i) { int r = menu[i].r; int g = menu[i].g; int b = menu[i].b; switch (menu[i].type) { case DLGTYPE_RADIO: case DLGTYPE_CHECK: if (menu_pos == sel) { draw_transquad(offx, y + menu[i].y, offx + base_width, y + menu[i].y + ui_font_height() + 5, MAKECOL32(255, 0, 0, fade), MAKECOL32(255, 0, 0, fade), MAKECOL32(255, 0, 0, fade), MAKECOL32(255, 0, 0, fade)); id = menu[i].id; } switch (menu[i].id) { default: if (menudlg_getval(menu[i].id)) draw_pointer(x + menu[i].x - ui_font_width(), y + menu[i].y, 1); } ui_font_draw(x + menu[i].x, y + menu[i].y, r, g, b, (const char *)menu[i].arg); ++menu_pos; break; } } for (int i = 0; i < num_items; ++i) { switch (menu[i].type) { case DLGTYPE_FRAME: case DLGTYPE_LTEXT: case DLGTYPE_RTEXT: ui_font_draw(x + menu[i].x, y + menu[i].y, menu[i].r, menu[i].g, menu[i].b, (const char *)menu[i].arg); break; } } x = ui_offx(); y = ui_height() - ui_font_height(); switch (result) { default: ui_font_draw(x, y, 255, 255, 255, "A:Select B:Back"); } ta_commit_frame(); } }
void display_progress(double i, double size) { struct polygon_list mypoly; struct packed_colour_vertex_list myvertex; char str[16]; float sx, sy; const unsigned int bar_w = 320; const unsigned int bar_h = 8; float x, y; tx_resetfont(); scrnmng_update(); draw_transquad(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, UI_TR, UI_TR, UI_TR, UI_TR); x = ui_offx() + 2 * ui_font_width(); y = ui_offy() + (ui_height() - ui_font_height()+bar_h)/2; ui_font_draw(x, y - ui_font_height(), 255, 255, 255, "Loading, do not remove VMU!"); sx = ui_offx() + (ui_width()-bar_w)/2; sy = y; draw_transquad(sx, sy, sx + bar_w, sy + bar_h, MAKECOL32(64, 64, 64, 128), MAKECOL32(64, 64, 64, 128), MAKECOL32(64, 64, 64, 128), MAKECOL32(64, 64, 64, 128)); mypoly.cmd = TA_CMD_POLYGON|TA_CMD_POLYGON_TYPE_TRANSPARENT|TA_CMD_POLYGON_SUBLIST| TA_CMD_POLYGON_STRIPLENGTH_2|TA_CMD_POLYGON_GOURAUD_SHADING; mypoly.mode1 = TA_POLYMODE1_Z_ALWAYS|TA_POLYMODE1_NO_Z_UPDATE; mypoly.mode2 = TA_POLYMODE2_BLEND_SRC_ALPHA|TA_POLYMODE2_BLEND_DST_INVALPHA| TA_POLYMODE2_ENABLE_ALPHA|TA_POLYMODE2_FOG_DISABLED|TA_POLYMODE2_TEXTURE_MODULATE_ALPHA; mypoly.texture = 0; mypoly.alpha = mypoly.red = mypoly.green = mypoly.blue = 0; ta_commit_list(&mypoly); myvertex.cmd = TA_CMD_VERTEX; myvertex.x = sx; myvertex.y = sy; myvertex.z = 0.5; myvertex.colour = 0xff00e0e0; myvertex.ocolour = 0; ta_commit_list(&myvertex); myvertex.x = sx + bar_w * (1.0/size) * i; ta_commit_list(&myvertex); myvertex.x = sx; myvertex.y = sy + bar_h; ta_commit_list(&myvertex); myvertex.cmd |= TA_CMD_VERTEX_EOS; myvertex.x = sx + bar_w * (1.0/size) * i; ta_commit_list(&myvertex); sprintf(str, "%3.0f", (i/size) * 100); x = sx + (bar_w - 3 * ui_font_width()) / 2; y = sy + bar_h + 2; ui_font_draw(x, y, 255, 255, 255, str); x += 3 * ui_font_width(); ui_font_draw(x, y, 255, 255, 255, "%"); ta_commit_frame(); }