From f890d580b05663a528e8e57334171a4e58f30608 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Wed, 15 May 2019 02:35:11 +0200 Subject: [PATCH] add splash screen and setup remote debugger --- PanoPainter.rc | Bin 5332 -> 7162 bytes PanoPainter.sln | 2 + PanoPainter.vcxproj | 6 ++ PanoPainter.vcxproj.filters | 8 ++ data/splash.bmp | Bin 0 -> 409654 bytes resource.h | Bin 910 -> 1532 bytes src/log.cpp | 8 ++ src/main.cpp | 161 ++++++++++++++++++++++++++++-------- 8 files changed, 150 insertions(+), 35 deletions(-) create mode 100644 data/splash.bmp diff --git a/PanoPainter.rc b/PanoPainter.rc index 3136fd90e3c46087fa3d4cc12d454831a6a9c89e..39b6731d11c2fcc67a33eefb6cfc1feb69bb3f2b 100644 GIT binary patch delta 1267 zcma)5&ubG=5T5$0CSgm{pi+8hx*`~C(~Y)C!Be_PW3Wxa?xq?LLaMC>stIic4?^yG z5#B$b-aJY?diLxgM=#zyc=956^84OfWr+pLWA^QvnK$#jZ)QfBUxin%-+wtDPdc(F zImj9$F9pe~SmKHm)jH};Vs_Y1d^}aL#gQ!BvvAKEcS*}t*@J!$m)B$!)+Ko?9XXUE z*_8vF4zTY-sN0o{*lHnpK{?jN;fty76IL{+F^#5Y)M)yX`j&dDKA)W$l%$Kx`_hw# zVo6+Oe_7x4 zb-Xfk8;DRF;3qB5|C(I5)u1bj7wYdIZ5sgUkS4@<8|^lr_>lE5JmVP4I{ZCA9gpJ! ziZ5F_OB3)~af3s{$bohux8cy0`yjUmT6>`X2wERJJ;9lOB)<#2t^HTPK$HVVo{6L8 z&&^pb--y^A_D$7^r3SXXLuOsgL;x-WJb|Yw@)k9#i}3Q1wF4m%=JB!Gcxn~?^lL!J ztdty@gWnsP@iZ`Ux$tC#NO8E-%a{cWK%J;j^$zW3iMS7J0k2s_4CZlOa%oevNFm`JH6R||J)+i zmyhdKRx{GCDv`Wa-$E8wZtG^E-E`~fSOrZVWaXYb&{gQ*?@;=f6pq>>jOY$Vv2O-$ zmfgJ(*2Tknh?Wrw9LISN=L%-W)Gcaf$F0!kQUFv9UDv4H+-EZfSasN0`KSl#p`Ioe p)XwCOZV?z*fyj$-;^ek)w}}WRoACd}A>R{@s!uKrKP1zqe*^Rl!}b6G delta 263 zcmexmenoS_g2~?)MP!Q^iWrg^Vi?L8Qh}^uhD?ThhCBv6hIAl5Z{t*9F4X{r0ET#m zAO>e3>BJDq;K|^_-~wcaF}MOngMoa12EWNWxl}cgRR#d%{DJC1f%-zwRd0UHb(P5& xSvgLFfm(xs1_S}E@ndkGEXb?9*@*8AqdBr>ymp}(Fp)=evV*{l%?Bi`m;nxMHZuSK diff --git a/PanoPainter.sln b/PanoPainter.sln index 0bc5e76..53e579d 100644 --- a/PanoPainter.sln +++ b/PanoPainter.sln @@ -20,11 +20,13 @@ Global {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Debug|Any CPU.ActiveCfg = Debug|Win32 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Debug|x64.ActiveCfg = Debug|x64 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Debug|x64.Build.0 = Debug|x64 + {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Debug|x64.Deploy.0 = Debug|x64 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Debug|x86.ActiveCfg = Debug|Win32 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Debug|x86.Build.0 = Debug|Win32 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Release|Any CPU.ActiveCfg = Release|Win32 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Release|x64.ActiveCfg = Release|x64 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Release|x64.Build.0 = Release|x64 + {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Release|x64.Deploy.0 = Release|x64 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Release|x86.ActiveCfg = Release|Win32 {6D5028CE-4D76-4B6A-A7C2-DE5A3268D433}.Release|x86.Build.0 = Release|Win32 {3A716FB6-DE62-439F-83B6-3C40915D6678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/PanoPainter.vcxproj b/PanoPainter.vcxproj index e375345..077ce91 100644 --- a/PanoPainter.vcxproj +++ b/PanoPainter.vcxproj @@ -428,6 +428,7 @@ + @@ -510,6 +511,8 @@ Designer + + @@ -543,6 +546,9 @@ + + + diff --git a/PanoPainter.vcxproj.filters b/PanoPainter.vcxproj.filters index 60e0da6..df16511 100644 --- a/PanoPainter.vcxproj.filters +++ b/PanoPainter.vcxproj.filters @@ -578,6 +578,9 @@ Header Files + + Header Files + @@ -683,4 +686,9 @@ shaders + + + Resource Files + + \ No newline at end of file diff --git a/data/splash.bmp b/data/splash.bmp new file mode 100644 index 0000000000000000000000000000000000000000..575919bcfdba06aa0d6018115ef7396be0647247 GIT binary patch literal 409654 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 C_dN;# literal 0 HcmV?d00001 diff --git a/resource.h b/resource.h index 42e2961e51d92b99b47aba1934d62989991fdfc6..7c5d90a5ba207e4abf706c665d32b1ad3c49ff00 100644 GIT binary patch delta 310 zcmeBU|HD1ufqVc%07E=O7=tTA5JND7CxbtOACT|M;K<+wWCueh2I5eSuoHEK0phD89XL_)SVo_ zB!$B=Cx%dvH~N^WFBS- opoQ|7DpCAC@uMtAHM0SO@n%&zF1mngCh#0H>!yNB{r; delta 43 vcmeyv-N!!R!Q>B2ER&xxx^14pti?FFfk|v~9gE21H!Kq-n=wP!%UHtzd`J(~ diff --git a/src/log.cpp b/src/log.cpp index 420b341..e5a2ccd 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -96,6 +96,10 @@ void LogRemote::log(const char* format, ...) m_logfile.write(line.data(), line.size()); m_logfile.flush(); } +#if _WIN32 + auto line = "DBG: " + std::string(buffer, n) + "\n"; + OutputDebugStringA(line.c_str()); +#endif } void LogRemote::log(const wchar_t* format, ...) { @@ -127,6 +131,10 @@ void LogRemote::log(const wchar_t* format, ...) m_logfile.write(line.data(), line.size()); m_logfile.flush(); } +#if _WIN32 + auto line = L"DBG: " + std::wstring(buffer, n) + L"\n"; + OutputDebugStringW(line.c_str()); +#endif } LogRemote::~LogRemote() { diff --git a/src/main.cpp b/src/main.cpp index 9ed97c9..04fb99c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -578,6 +578,77 @@ void win32_save_window_state() p.rcNormalPosition.top, p.rcNormalPosition.right, p.rcNormalPosition.bottom })); } +LRESULT CALLBACK splash_proc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + switch (Msg) + { + case WM_INITDIALOG: + { + static char base_path[MAX_PATH]; + GetCurrentDirectoryA(MAX_PATH, base_path); + std::string path = std::string(base_path) + "\\data\\splash.bmp"; + auto hbitmap = (HBITMAP)LoadImageA(NULL, path.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); + SendMessage(GetDlgItem(hWndDlg, IDC_STATIC_IMAGE), STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hbitmap); + SetDlgItemText(hWndDlg, IDC_STATIC_VERSION, g_version_number_w); + + auto monitor = MonitorFromWindow(0, MONITOR_DEFAULTTOPRIMARY); + auto x = unsigned{}; + auto y = unsigned{}; + GetDpiForMonitor(monitor, MDT_EFFECTIVE_DPI, &x, &y); + float z = (float)x / 96.f; + + RECT r; + GetClientRect(hWndDlg, &r); + MoveWindow(GetDlgItem(hWndDlg, IDC_STATIC_IMAGE), 0, 0, 512 * z, 200 * z, TRUE); + SetWindowPos(hWndDlg, HWND_TOP, 0, 0, 512 * z, 200 * z, SWP_NOMOVE); + + HWND hWndVersion = GetDlgItem(hWndDlg, IDC_STATIC_VERSION); + RECT rv; + GetClientRect(hWndVersion, &rv); + MoveWindow(hWndVersion, 0, 200 * z - (rv.bottom - rv.top), r.right - r.left, rv.bottom - rv.top, TRUE); + + return TRUE; + } + case WM_USER + 1: + PostQuitMessage(0); + return TRUE; + } + + return DefWindowProc(hWndDlg, Msg, wParam, lParam);; +} + +HWND splash_dialog; +void splash_thread_loop() +{ + splash_dialog = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SPLASH), NULL, reinterpret_cast(splash_proc)); + + MSG msg; + while (GetMessage(&msg, 0, 0, 0) > 0) + { + if (IsDialogMessage(splash_dialog, &msg)) + { + DispatchMessage(&msg); + TranslateMessage(&msg); + } + } + + DestroyWindow(splash_dialog); +} + +BOOL UnadjustWindowRectEx(LPRECT prc, DWORD dwStyle, BOOL fMenu, DWORD dwExStyle) +{ + RECT rc; + SetRectEmpty(&rc); + BOOL fRc = AdjustWindowRectEx(&rc, dwStyle, fMenu, dwExStyle); + if (fRc) { + prc->left -= rc.left; + prc->top -= rc.top; + prc->right -= rc.right; + prc->bottom -= rc.bottom; + } + return fRc; +} + int main(int argc, char** argv) { WNDCLASS wc; @@ -587,17 +658,6 @@ int main(int argc, char** argv) App::I.initLog(); - init_vk_map(); -/* - if (!App::I.check_license()) - { - MessageBoxA(NULL, "Unable to verify this demo license, please make sure you are connected to Internet.", - "PanoPainter - License Error", MB_ICONERROR | MB_OK); - return -1; - } -*/ - - FILE* fp_check = fopen("data\\layout.xml", "rb"); if (!fp_check) { @@ -615,6 +675,9 @@ int main(int argc, char** argv) LOG("data files ok"); } + std::thread dialog_thread(splash_thread_loop); + + init_vk_map(); SetupExceptionHandler(); BT_SetTerminate(); @@ -647,6 +710,12 @@ int main(int argc, char** argv) GetDpiForMonitor(monitor, MDT_EFFECTIVE_DPI, &x, &y); App::I.zoom *= (float)x / 96.f; + int show_cmd = SW_NORMAL; + Settings::value("window-show-cmd", show_cmd); + DWORD wnd_style = WS_OVERLAPPEDWINDOW; + //if (show_cmd == SW_MAXIMIZE) + // wnd_style != WS_MAXIMIZE; + RECT clientRect = { 0, 0, (int)App::I.width * App::I.zoom, (int)App::I.height * App::I.zoom }; POINT clientPos = { CW_USEDEFAULT, CW_USEDEFAULT }; if (Settings::has("window-rect")) @@ -659,9 +728,9 @@ int main(int argc, char** argv) } else { - AdjustWindowRect(&clientRect, WS_OVERLAPPEDWINDOW, false); + AdjustWindowRect(&clientRect, wnd_style, false); } - hWnd = CreateWindow(wc.lpszClassName, L"PanoPainter", WS_OVERLAPPEDWINDOW, clientPos.x, clientPos.y, + hWnd = CreateWindow(wc.lpszClassName, L"PanoPainter", wnd_style, clientPos.x, clientPos.y, (float)(clientRect.right - clientRect.left), (float)(clientRect.bottom - clientRect.top), 0, 0, hInst, 0); @@ -723,7 +792,7 @@ int main(int argc, char** argv) wglDeleteContext(hRC); DestroyWindow(hWnd); - hWnd = CreateWindow(wc.lpszClassName, window_title, WS_OVERLAPPEDWINDOW, clientPos.x, clientPos.y, + hWnd = CreateWindow(wc.lpszClassName, window_title, wnd_style, clientPos.x, clientPos.y, (float)(clientRect.right - clientRect.left), (float)(clientRect.bottom - clientRect.top), 0, 0, hInst, 0); @@ -767,12 +836,6 @@ int main(int argc, char** argv) LOG("init app"); App::I.init(); - int show_cmd = SW_NORMAL; - Settings::value("window-show-cmd", show_cmd); - - LOG("show main window"); - ShowWindow(hWnd, show_cmd); - if (!sandboxed) { LOG("init WinTab"); @@ -798,6 +861,7 @@ int main(int argc, char** argv) const float target_tick_rate = 60; unsigned long t0 = GetTickCount(); unsigned long t1; + bool first_frame = true; int frames = 0; float one_sec = 0; float render_timer = 0; @@ -850,6 +914,18 @@ int main(int argc, char** argv) } } + if (first_frame) + { + first_frame = false; + WINDOWPLACEMENT wp; + GetWindowPlacement(hWnd, &wp); + wp.showCmd = show_cmd; + SetWindowPlacement(hWnd, &wp); +// GetClientRect(hWnd, &clientRect); +// App::I.width = clientRect.right - clientRect.left; +// App::I.height = clientRect.bottom - clientRect.top; + } + App::I.tick(dt); std::unique_lock lock(render_mutex); @@ -901,6 +977,14 @@ int main(int argc, char** argv) if (start_in_vr) App::I.vr_start(); + LOG("show main window"); + SetForegroundWindow(hWnd); + //ShowWindow(hWnd, show_cmd); + + SendMessage(splash_dialog, WM_USER + 1, 0, 0); + if (dialog_thread.joinable()) + dialog_thread.join(); + MSG msg; LOG("start main loop"); while (running == 1) @@ -941,7 +1025,7 @@ int main(int argc, char** argv) } // Clean up WacomTablet::I.terminate(); - DestroyWindow(hWnd); + UnregisterClass(className, hInst); LogRemote::I.stop(); } @@ -958,21 +1042,16 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) switch (msg) { - case WM_DESTROY: - if (running != -1) - { - running = 0; - render_cv.notify_all(); - if (renderer.joinable()) - renderer.join(); - if (hmd_renderer.joinable()) - hmd_renderer.join(); - App::I.terminate(); - } - break; case WM_USER_CLOSE: + running = 0; + render_cv.notify_all(); + if (renderer.joinable()) + renderer.join(); + if (hmd_renderer.joinable()) + hmd_renderer.join(); + App::I.terminate(); PostQuitMessage(0); - break; + return 0; case WM_PAINT: App::I.redraw = true; break; @@ -981,15 +1060,27 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) break; case WM_CLOSE: if (App::I.request_close()) + { + running = 0; + render_cv.notify_all(); + if (renderer.joinable()) + renderer.join(); + if (hmd_renderer.joinable()) + hmd_renderer.join(); + App::I.terminate(); PostQuitMessage(0); + return 0; + } else + { return true; + } break; case WM_SIZE: { auto w = (float)LOWORD(lp); auto h = (float)HIWORD(lp); - if (h != 0) + if (h != 0 && running == 1) { async_locker lock; App::I.resize(w, h);