diff options
Diffstat (limited to 'platform/windows/display_server_windows.h')
-rw-r--r-- | platform/windows/display_server_windows.h | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index 7b259def14..54e1c9681d 100644 --- a/platform/windows/display_server_windows.h +++ b/platform/windows/display_server_windows.h @@ -350,6 +350,12 @@ typedef struct { ICONDIRENTRY idEntries[1]; // An entry for each image (idCount of 'em) } ICONDIR, *LPICONDIR; +typedef enum _SHC_PROCESS_DPI_AWARENESS { + SHC_PROCESS_DPI_UNAWARE = 0, + SHC_PROCESS_SYSTEM_DPI_AWARE = 1, + SHC_PROCESS_PER_MONITOR_DPI_AWARE = 2, +} SHC_PROCESS_DPI_AWARENESS; + class DisplayServerWindows : public DisplayServer { // No need to register with GDCLASS, it's platform-specific and nothing is added. @@ -388,6 +394,14 @@ class DisplayServerWindows : public DisplayServer { String tablet_driver; Vector<String> tablet_drivers; + enum DriverID { + DRIVER_ID_COMPAT_OPENGL3 = 1 << 0, + DRIVER_ID_COMPAT_ANGLE_D3D11 = 1 << 1, + DRIVER_ID_RD_VULKAN = 1 << 2, + DRIVER_ID_RD_D3D12 = 1 << 3, + }; + static BitField<DriverID> tested_drivers; + enum TimerID { TIMER_ID_MOVE_REDRAW = 1, TIMER_ID_WINDOW_ACTIVATION = 2, @@ -441,6 +455,7 @@ class DisplayServerWindows : public DisplayServer { Vector<Vector2> mpath; + bool create_completed = false; bool pre_fs_valid = false; RECT pre_fs_rect; bool maximized = false; @@ -522,7 +537,7 @@ class DisplayServerWindows : public DisplayServer { RBMap<WindowID, WindowData> windows; WindowID last_focused_window = INVALID_WINDOW_ID; - + WindowID last_mouse_button_down_window = INVALID_WINDOW_ID; HCURSOR hCursor; WNDPROC user_proc = nullptr; @@ -535,6 +550,41 @@ class DisplayServerWindows : public DisplayServer { IndicatorID indicator_id_counter = 0; HashMap<IndicatorID, IndicatorData> indicators; + struct FileDialogData { + HWND hwnd_owner = 0; + Rect2i wrect; + String appid; + String title; + String current_directory; + String root; + String filename; + bool show_hidden = false; + DisplayServer::FileDialogMode mode = FileDialogMode::FILE_DIALOG_MODE_OPEN_ANY; + Vector<String> filters; + TypedArray<Dictionary> options; + WindowID window_id = DisplayServer::INVALID_WINDOW_ID; + Callable callback; + bool options_in_cb = false; + Thread listener_thread; + SafeFlag close_requested; + SafeFlag finished; + }; + Mutex file_dialog_mutex; + List<FileDialogData *> file_dialogs; + HashMap<HWND, FileDialogData *> file_dialog_wnd; + struct FileDialogCallback { + Callable callback; + Variant status; + Variant files; + Variant index; + Variant options; + bool opt_in_cb = false; + }; + List<FileDialogCallback> pending_cbs; + void process_file_dialog_callbacks(); + + static void _thread_fd_monitor(void *p_ud); + HashMap<int64_t, MouseButton> pointer_prev_button; HashMap<int64_t, MouseButton> pointer_button; HashMap<int64_t, LONG> pointer_down_time; @@ -596,6 +646,7 @@ class DisplayServerWindows : public DisplayServer { String _get_klid(HKL p_hkl) const; public: + LRESULT WndProcFileDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT MouseProc(int code, WPARAM wParam, LPARAM lParam); |