📄 main.cpp
字号:
use_3D_renderer = (str && strstr(str, "3D")) ? 1 : 0; } SetCursor(hcur);}void pause_file(){ if (!is_connected) return; TBBUTTONINFO tbbi; tbbi.cbSize = sizeof(tbbi); tbbi.dwMask = TBIF_TEXT; if (gf_term_get_option(term, GF_OPT_PLAY_STATE)==GF_STATE_PLAYING) { gf_term_set_option(term, GF_OPT_PLAY_STATE, GF_STATE_PAUSED); tbbi.pszText = _T("Resume"); } else { gf_term_set_option(term, GF_OPT_PLAY_STATE, GF_STATE_PLAYING); tbbi.pszText = _T("Pause"); } SendMessage(g_hwnd_menu1, TB_SETBUTTONINFO, IDM_FILE_PAUSE, (LPARAM)&tbbi); }void set_svg_progressive(){ use_svg_prog = !use_svg_prog; if (use_svg_prog) { gf_cfg_set_key(user.config, "SAXLoader", "Progressive", "yes"); gf_cfg_set_key(user.config, "SAXLoader", "MaxDuration", "30"); } else { gf_cfg_set_key(user.config, "SAXLoader", "MaxDuration", "0"); gf_cfg_set_key(user.config, "SAXLoader", "Progressive", "no"); }}BOOL HandleCommand(HWND hwnd, WPARAM wParam, LPARAM lParam){ switch (LOWORD(wParam)) { case IDM_FILE_OPEN: open_file(hwnd); break; case IDM_FILE_RELOAD: /*doesn't work with SVG files yet...*/ //gf_term_play_from_time(term, 0); gf_term_disconnect(term); gf_term_connect(term, the_url); break; case IDM_FILE_PAUSE: pause_file(); break; case IDM_VIEW_ABOUT: view_about(hwnd); break; case IDM_VIEW_FS: set_full_screen(); break; case IDM_VIEW_STATUS: show_status = !show_status; do_layout(1); break; case IDM_VIEW_CPU: view_cpu = !view_cpu; break; case IDM_VIEW_3DREND: use_3D_renderer = !use_3D_renderer; gf_cfg_set_key(user.config, "Rendering", "RendererName", use_3D_renderer ? "GPAC 3D Renderer" : "GPAC 2D Renderer"); reload_terminal(); break; case IDM_NAV_RESET: gf_term_set_option(term, GF_OPT_NAVIGATION_TYPE, 0); break; case IDM_NAV_NONE: gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_NONE); break; case IDM_NAV_SLIDE: gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_SLIDE); break; case IDM_NAV_WALK: gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_WALK); break; case IDM_NAV_FLY: gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_FLY); break; case IDM_NAV_EXAMINE: gf_term_set_option(term, GF_OPT_NAVIGATION, GF_NAVIGATE_EXAMINE); break; case IDM_NAV_HEADLIGHT: gf_term_set_option(term, GF_OPT_HEADLIGHT, !gf_term_get_option(term, GF_OPT_HEADLIGHT) ); break; case IDM_NAV_COL_NONE: gf_term_set_option(term, GF_OPT_COLLISION, GF_COLLISION_NONE); break; case IDM_NAV_COL_REG: gf_term_set_option(term, GF_OPT_COLLISION, GF_COLLISION_NORMAL); break; case IDM_NAV_COL_DISP: gf_term_set_option(term, GF_OPT_COLLISION, GF_COLLISION_DISPLACEMENT); break; case IDM_NAV_GRAVITY: gf_term_set_option(term, GF_OPT_GRAVITY, !gf_term_get_option(term, GF_OPT_GRAVITY)); break; case IDM_VIEW_AR_NONE: gf_term_set_option(term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_KEEP); break; case IDM_VIEW_AR_FILL: gf_term_set_option(term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_FILL_SCREEN); break; case IDM_VIEW_AR_4_3: gf_term_set_option(term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_4_3); break; case IDM_VIEW_AR_16_9: gf_term_set_option(term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_16_9); break; case IDM_VIEW_LOW_RATE: use_low_fps = !use_low_fps; gf_term_set_simulation_frame_rate(term, use_low_fps ? 15.0 : 30.0); break; case IDM_VIEW_DIRECT: { Bool drend = gf_term_get_option(term, GF_OPT_DIRECT_RENDER) ? 0 : 1; gf_term_set_option(term, GF_OPT_DIRECT_RENDER, drend); gf_cfg_set_key(user.config, "Render2D", "DirectRender", drend ? "yes" : "no"); } break; case IDM_MENU_SWITCH: menu_switched = !menu_switched; do_layout(0); break; case IDM_OPEN_FILE1: case IDM_OPEN_FILE2: case IDM_OPEN_FILE3: case IDM_OPEN_FILE4: case IDM_OPEN_FILE5: case IDM_OPEN_FILE6: case IDM_OPEN_FILE7: case IDM_OPEN_FILE8: case IDM_OPEN_FILE9: case IDM_OPEN_FILE10: load_recent_file(LOWORD(wParam) - IDM_OPEN_FILE1); break; case IDS_CAP_DISABLE_PLAYLIST: playlist_navigation_on = !playlist_navigation_on; break; case IDM_VIEW_SVG_LOAD: set_svg_progressive(); break; case IDM_ITEM_QUIT: DestroyWindow(hwnd); return FALSE; } return TRUE;}static BOOL OnMenuPopup(const HWND hWnd, const WPARAM wParam){ if (menu_switched) { CheckMenuItem((HMENU)wParam, IDM_VIEW_STATUS, MF_BYCOMMAND| (show_status ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_VIEW_3DREND, MF_BYCOMMAND| (use_3D_renderer ? MF_CHECKED : MF_UNCHECKED) ); EnableMenuItem((HMENU)wParam, IDM_VIEW_CPU, MF_BYCOMMAND| (show_status ? MF_ENABLED : MF_GRAYED) ); if (show_status) CheckMenuItem((HMENU)wParam, IDM_VIEW_CPU, MF_BYCOMMAND| (view_cpu ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_VIEW_LOW_RATE, MF_BYCOMMAND| (use_low_fps ? MF_CHECKED : MF_UNCHECKED) ); EnableMenuItem((HMENU)wParam, IDM_VIEW_DIRECT, MF_BYCOMMAND| (!use_3D_renderer ? MF_ENABLED : MF_GRAYED) ); CheckMenuItem((HMENU)wParam, IDM_VIEW_DIRECT, MF_BYCOMMAND| (!use_3D_renderer && gf_term_get_option(term, GF_OPT_DIRECT_RENDER) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_VIEW_SVG_LOAD, MF_BYCOMMAND| (use_svg_prog ? MF_CHECKED : MF_UNCHECKED) ); return TRUE; } u32 opt = gf_term_get_option(term, GF_OPT_ASPECT_RATIO); CheckMenuItem((HMENU)wParam, IDS_CAP_DISABLE_PLAYLIST, MF_BYCOMMAND| (!playlist_navigation_on ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_VIEW_AR_NONE, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_KEEP) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem((HMENU)wParam, IDM_VIEW_AR_FILL, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_FILL_SCREEN) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem((HMENU)wParam, IDM_VIEW_AR_4_3, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_4_3) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem((HMENU)wParam, IDM_VIEW_AR_16_9, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_16_9) ? MF_CHECKED : MF_UNCHECKED); EnableMenuItem((HMENU)wParam, IDM_FILE_RELOAD, MF_BYCOMMAND| (is_connected ? MF_ENABLED : MF_GRAYED) ); EnableMenuItem((HMENU)wParam, IDM_FILE_PAUSE, MF_BYCOMMAND| (is_connected ? MF_ENABLED : MF_GRAYED) ); u32 type; if (!is_connected) type = 0; else type = gf_term_get_option(term, GF_OPT_NAVIGATION_TYPE); navigation_on = type ? 1 : 0; EnableMenuItem((HMENU)wParam, IDM_NAV_NONE, MF_BYCOMMAND | (!type ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_SLIDE, MF_BYCOMMAND | (!type ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_RESET, MF_BYCOMMAND | (!type ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_WALK, MF_BYCOMMAND | ( (type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_FLY, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_EXAMINE, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_COL_NONE, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_COL_REG, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_COL_DISP, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_GRAVITY, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem((HMENU)wParam, IDM_NAV_HEADLIGHT, MF_BYCOMMAND | ( (type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); if (type) { u32 mode = gf_term_get_option(term, GF_OPT_NAVIGATION); navigation_on = (mode==GF_NAVIGATE_NONE) ? 0 : 1; CheckMenuItem((HMENU)wParam, IDM_NAV_NONE, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_NONE) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_NAV_SLIDE, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_SLIDE) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_NAV_WALK, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_WALK) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_NAV_FLY, MF_BYCOMMAND | ((mode==GF_NAVIGATE_FLY) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_NAV_EXAMINE, MF_BYCOMMAND | ((mode==GF_NAVIGATE_EXAMINE) ? MF_CHECKED : MF_UNCHECKED) ); if (type==GF_NAVIGATE_TYPE_3D) { CheckMenuItem((HMENU)wParam, IDM_NAV_HEADLIGHT, MF_BYCOMMAND | ( gf_term_get_option(term, GF_OPT_HEADLIGHT) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_NAV_GRAVITY, MF_BYCOMMAND | ( gf_term_get_option(term, GF_OPT_GRAVITY) ? MF_CHECKED : MF_UNCHECKED) ); type = gf_term_get_option(term, GF_OPT_COLLISION); CheckMenuItem((HMENU)wParam, IDM_NAV_COL_NONE, MF_BYCOMMAND | ( (type==GF_COLLISION_NONE) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_NAV_COL_REG, MF_BYCOMMAND | ( (type==GF_COLLISION_NORMAL) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem((HMENU)wParam, IDM_NAV_COL_DISP, MF_BYCOMMAND | ( (type==GF_COLLISION_DISPLACEMENT) ? MF_CHECKED : MF_UNCHECKED) ); } } return TRUE;}BOOL CALLBACK MainWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg) { case WM_CREATE: { SHMENUBARINFO mbi; memset(&mbi, 0, sizeof(SHMENUBARINFO)); mbi.cbSize = sizeof(SHMENUBARINFO); mbi.hwndParent = hwnd; mbi.hInstRes = g_hinst; mbi.nBmpId = 0; mbi.cBmpImages = 0; mbi.nToolBarId = IDM_MAIN_MENU1; SHCreateMenuBar(&mbi); g_hwnd_menu1 = mbi.hwndMB; mbi.nToolBarId = IDM_MAIN_MENU2; SHCreateMenuBar(&mbi); g_hwnd_menu2 = mbi.hwndMB; g_hwnd_status = CreateWindow(TEXT("STATIC"), TEXT("Status"), WS_CHILD|WS_VISIBLE|SS_LEFT, 0, 0, disp_w, caption_h-1, hwnd, NULL, g_hinst, NULL); do_layout(1); } break; case WM_COMMAND: if (HandleCommand(hwnd, wParam, lParam)) return DefWindowProc(hwnd, msg, wParam, lParam); break; case WM_TIMER: update_state_info(); break; case WM_HOTKEY: break; case WM_KEYDOWN: if (playlist_navigation_on && !navigation_on) { if (wParam==VK_LEFT) { switch_playlist(1); break; } else if (wParam==VK_RIGHT) { switch_playlist(0); break; } } /*fall through*/ case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_KEYUP: case WM_CHAR: case WM_MOUSEMOVE: case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK: case WM_LBUTTONUP: ::SendMessage(g_hwnd_disp, msg, wParam, lParam); return 0; case WM_INITMENUPOPUP: OnMenuPopup(hwnd, wParam); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_SETFOCUS: freeze_display(0); break; case WM_KILLFOCUS: freeze_display(1); break; case WM_ACTIVATE: if (WA_INACTIVE != LOWORD(wParam)) { freeze_display(0); SetFocus(hwnd); } else { freeze_display(1); } break; case WM_LOADTERM: if (!LoadTerminal()) { MessageBox(hwnd, L"Cannot load GPAC", L"Error", MB_OK); PostQuitMessage(0); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0;}BOOL InitInstance (int CmdShow){ WNDCLASS wc; wc.style = 0; wc.lpfnWndProc = (WNDPROC) MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = g_hinst; wc.hIcon = LoadIcon(g_hinst, MAKEINTRESOURCE(IDI_ICON)); wc.hCursor = 0; wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wc.lpszMenuName = 0; wc.lpszClassName = _T("Osmophone"); RegisterClass(&wc); g_hwnd = CreateWindow(_T("Osmophone"), _T("Osmophone"), WS_VISIBLE, 0, caption_h, disp_w, disp_h, NULL, NULL, g_hinst, NULL); if (!g_hwnd) return FALSE; ShowWindow(g_hwnd, CmdShow); ::SetTimer(g_hwnd, STATE_TIMER_ID, STATE_TIMER_DUR, NULL); refresh_recent_files(); set_status("Loading Terminal"); do_layout(1); PostMessage(g_hwnd, WM_LOADTERM, 0, 0); set_status("Ready"); return TRUE;}Bool initial_setup(const char *szExePath){ char szPath[GF_MAX_PATH]; TCHAR wzPath[GF_MAX_PATH]; strcpy(szPath, szExePath); strcat(szPath, "GPAC.cfg"); FILE *f = fopen(szPath, "wt"); if (!f) return 0; fclose(f); user.config = gf_cfg_new(szExePath, "GPAC.cfg"); gf_cfg_set_key(user.config, "General", "ModulesDirectory", szExePath); strcpy(szPath, szExePath); strcat(szPath, "cache"); CE_CharToWide(szPath, wzPath); CreateDirectory(wzPath, NULL); gf_cfg_set_key(user.config, "General", "CacheDirectory", szPath); /*base rendering options*/ gf_cfg_set_key(user.config, "Rendering", "RendererName", "GPAC 2D Renderer"); gf_cfg_set_key(user.config, "Rendering", "Raster2D", "GPAC 2D Raster"); /*enable UDP traffic autodetect*/ gf_cfg_set_key(user.config, "Network", "AutoReconfigUDP", "yes"); gf_cfg_set_key(user.config, "Network", "UDPTimeout", "10000"); gf_cfg_set_key(user.config, "Network", "BufferLength", "3000"); gf_cfg_set_key(user.config, "Audio", "ForceConfig", "yes"); gf_cfg_set_key(user.config, "Audio", "NumBuffers", "2"); gf_cfg_set_key(user.config, "Audio", "TotalDuration", "200"); gf_cfg_set_key(user.config, "Video", "DriverName", "GAPI Video Output"); /*FIXME - is this true on all WinCE systems??*/ gf_cfg_set_key(user.config, "FontEngine", "FontDirectory", "\\Windows"); sprintf((char *) szPath, "%sgpac.mp4", szExePath); gf_cfg_set_key(user.config, "General", "StartupFile", (const char *) szPath); /*save*/ gf_cfg_del(user.config); user.config = gf_cfg_new(szExePath, "GPAC.cfg"); if (!user.config) return 0; MessageBox(NULL, _T("Thank you for installing GPAC"), _T("Initial setup done"), MB_OK); return 1;}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd ) { MSG msg; TCHAR wzExePath[GF_MAX_PATH]; char szExePath[GF_MAX_PATH]; HWND hwndOld = NULL; const char *str; Bool initial_launch = 0; memset(&user, 0, sizeof(GF_User)); term = NULL; GetModuleFileName(NULL, wzExePath, GF_MAX_PATH); CE_WideToChar(wzExePath, szExePath); char *sep = strrchr(szExePath, '\\'); sep[1] = 0; g_hinst = hInstance; menu_h = GetSystemMetrics(SM_CYMENU) - 6; caption_h = GetSystemMetrics(SM_CYCAPTION) - 3; screen_w = GetSystemMetrics(SM_CXSCREEN); screen_h = GetSystemMetrics(SM_CYSCREEN); disp_w = screen_w; disp_h = screen_h - menu_h - caption_h; if (hwndOld = FindWindow(_T("Osmophone"), NULL)) { SetForegroundWindow(hwndOld); return 0; } user.config = gf_cfg_new(szExePath, "GPAC.cfg"); if (!user.config) { initial_setup(szExePath); initial_launch = 1; } if (!user.config) { MessageBox(NULL, _T("Couldn't locate GPAC config file"), _T("Fatal Error"), MB_OK); return 0; } str = gf_cfg_get_key(user.config, "General", "ModulesDirectory"); if (!str) { gf_cfg_del(user.config); MessageBox(NULL, _T("Couldn't locate GPAC plugins"), _T("Fatal Error"), MB_OK); return 0; } gf_sys_init(); user.modules = gf_modules_new(str, user.config); if (!gf_modules_get_count(user.modules)) { MessageBox(GetForegroundWindow(), _T("No modules found"), _T("GPAC Init Error"), MB_OK); gf_modules_del(user.modules); gf_cfg_del(user.config); memset(&user, 0, sizeof(GF_User)); gf_sys_close(); return 0; } /*first launch, register all files ext*/ if (initial_launch) { u32 i; for (i=0; i<gf_modules_get_count(user.modules); i++) { GF_InputService *ifce = (GF_InputService *) gf_modules_load_interface(user.modules, i, GF_NET_CLIENT_INTERFACE); if (!ifce) continue; if (ifce) { ifce->CanHandleURL(ifce, "test.test"); gf_modules_close_interface((GF_BaseInterface *)ifce); } } } str = gf_cfg_get_key(user.config, "General", "Loop"); loop = (str && !stricmp(str, "yes")) ? 1 : 0; str = gf_cfg_get_key(user.config, "Rendering", "RendererName"); use_3D_renderer = (str && strstr(str, "3D")) ? 1 : 0; str = gf_cfg_get_key(user.config, "SAXLoader", "Progressive"); use_svg_prog = (str && !strcmp(str, "yes")) ? 1 : 0; if (InitInstance(nShowCmd)) { SetForegroundWindow(g_hwnd); while (GetMessage(&msg, NULL, 0,0) == TRUE) { TranslateMessage (&msg); DispatchMessage (&msg); } } /*and destroy*/ if (term) gf_term_del(term); if (user.modules) gf_modules_del(user.modules); if (user.config) gf_cfg_del(user.config); if (backlight_off) set_backlight_state(0); gf_sys_close(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -