Path: blob/master/platform/windows/display_server_windows.h
20779 views
/**************************************************************************/1/* display_server_windows.h */2/**************************************************************************/3/* This file is part of: */4/* GODOT ENGINE */5/* https://godotengine.org */6/**************************************************************************/7/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */8/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */9/* */10/* Permission is hereby granted, free of charge, to any person obtaining */11/* a copy of this software and associated documentation files (the */12/* "Software"), to deal in the Software without restriction, including */13/* without limitation the rights to use, copy, modify, merge, publish, */14/* distribute, sublicense, and/or sell copies of the Software, and to */15/* permit persons to whom the Software is furnished to do so, subject to */16/* the following conditions: */17/* */18/* The above copyright notice and this permission notice shall be */19/* included in all copies or substantial portions of the Software. */20/* */21/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */22/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */23/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */24/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */25/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */26/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */27/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */28/**************************************************************************/2930#pragma once3132#include "crash_handler_windows.h"33#include "key_mapping_windows.h"34#include "tts_windows.h"3536#include "core/config/project_settings.h"37#include "core/input/input_event.h"38#include "core/io/image.h"39#include "core/os/os.h"40#include "core/templates/rb_map.h"41#include "drivers/wasapi/audio_driver_wasapi.h"42#include "drivers/winmidi/midi_driver_winmidi.h"43#include "servers/audio/audio_server.h"44#include "servers/display/display_server.h"45#include "servers/rendering/renderer_compositor.h"46#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"47#include "servers/rendering/rendering_server.h"4849#ifdef XAUDIO2_ENABLED50#include "drivers/xaudio2/audio_driver_xaudio2.h"51#endif5253#if defined(RD_ENABLED)54#include "servers/rendering/rendering_device.h"55#endif5657#if defined(GLES3_ENABLED)58#include "gl_manager_windows_angle.h"59#include "gl_manager_windows_native.h"60#endif // GLES3_ENABLED6162#include "native_menu_windows.h"6364#include <io.h>65#include <cstdio>6667#define WIN32_LEAN_AND_MEAN68#include <windows.h>69#include <windowsx.h>7071// WinTab API72#define WT_PACKET 0x7FF073#define WT_PROXIMITY 0x7FF574#define WT_INFOCHANGE 0x7FF675#define WT_CSRCHANGE 0x7FF77677#define WTI_DEFSYSCTX 478#define WTI_DEVICES 10079#define DVC_NPRESSURE 1580#define DVC_TPRESSURE 1681#define DVC_ORIENTATION 1782#define DVC_ROTATION 188384#define CXO_MESSAGES 0x000485#define PK_STATUS 0x000286#define PK_NORMAL_PRESSURE 0x040087#define PK_TANGENT_PRESSURE 0x080088#define PK_ORIENTATION 0x10008990#define TPS_INVERT 0x0010 /* 1.1 */9192typedef struct tagLOGCONTEXTW {93WCHAR lcName[40];94UINT lcOptions;95UINT lcStatus;96UINT lcLocks;97UINT lcMsgBase;98UINT lcDevice;99UINT lcPktRate;100DWORD lcPktData;101DWORD lcPktMode;102DWORD lcMoveMask;103DWORD lcBtnDnMask;104DWORD lcBtnUpMask;105LONG lcInOrgX;106LONG lcInOrgY;107LONG lcInOrgZ;108LONG lcInExtX;109LONG lcInExtY;110LONG lcInExtZ;111LONG lcOutOrgX;112LONG lcOutOrgY;113LONG lcOutOrgZ;114LONG lcOutExtX;115LONG lcOutExtY;116LONG lcOutExtZ;117DWORD lcSensX;118DWORD lcSensY;119DWORD lcSensZ;120BOOL lcSysMode;121int lcSysOrgX;122int lcSysOrgY;123int lcSysExtX;124int lcSysExtY;125DWORD lcSysSensX;126DWORD lcSysSensY;127} LOGCONTEXTW;128129typedef struct tagAXIS {130LONG axMin;131LONG axMax;132UINT axUnits;133DWORD axResolution;134} AXIS;135136typedef struct tagORIENTATION {137int orAzimuth;138int orAltitude;139int orTwist;140} ORIENTATION;141142typedef struct tagPACKET {143int pkStatus;144int pkNormalPressure;145int pkTangentPressure;146ORIENTATION pkOrientation;147} PACKET;148149typedef HANDLE(WINAPI *WTOpenPtr)(HWND p_window, LOGCONTEXTW *p_ctx, BOOL p_enable);150typedef BOOL(WINAPI *WTClosePtr)(HANDLE p_ctx);151typedef UINT(WINAPI *WTInfoPtr)(UINT p_category, UINT p_index, LPVOID p_output);152typedef BOOL(WINAPI *WTPacketPtr)(HANDLE p_ctx, UINT p_param, LPVOID p_packets);153typedef BOOL(WINAPI *WTEnablePtr)(HANDLE p_ctx, BOOL p_enable);154155enum PreferredAppMode {156APPMODE_DEFAULT = 0,157APPMODE_ALLOWDARK = 1,158APPMODE_FORCEDARK = 2,159APPMODE_FORCELIGHT = 3,160APPMODE_MAX = 4161};162163typedef const char *(CDECL *WineGetVersionPtr)(void);164typedef bool(WINAPI *ShouldAppsUseDarkModePtr)();165typedef DWORD(WINAPI *GetImmersiveColorFromColorSetExPtr)(UINT dwImmersiveColorSet, UINT dwImmersiveColorType, bool bIgnoreHighContrast, UINT dwHighContrastCacheMode);166typedef int(WINAPI *GetImmersiveColorTypeFromNamePtr)(const WCHAR *name);167typedef int(WINAPI *GetImmersiveUserColorSetPreferencePtr)(bool bForceCheckRegistry, bool bSkipCheckOnFail);168typedef HRESULT(WINAPI *RtlGetVersionPtr)(OSVERSIONINFOEXW *lpVersionInformation);169typedef bool(WINAPI *AllowDarkModeForAppPtr)(bool darkMode);170typedef PreferredAppMode(WINAPI *SetPreferredAppModePtr)(PreferredAppMode appMode);171typedef void(WINAPI *RefreshImmersiveColorPolicyStatePtr)();172typedef void(WINAPI *FlushMenuThemesPtr)();173174typedef struct {175BYTE bWidth; // Width, in pixels, of the image176BYTE bHeight; // Height, in pixels, of the image177BYTE bColorCount; // Number of colors in image (0 if >=8bpp)178BYTE bReserved; // Reserved ( must be 0)179WORD wPlanes; // Color Planes180WORD wBitCount; // Bits per pixel181DWORD dwBytesInRes; // How many bytes in this resource?182DWORD dwImageOffset; // Where in the file is this image?183} ICONDIRENTRY, *LPICONDIRENTRY;184185typedef struct {186WORD idReserved; // Reserved (must be 0)187WORD idType; // Resource Type (1 for icons)188WORD idCount; // How many images?189ICONDIRENTRY idEntries[1]; // An entry for each image (idCount of 'em)190} ICONDIR, *LPICONDIR;191192class DropTargetWindows;193194#ifndef WDA_EXCLUDEFROMCAPTURE195#define WDA_EXCLUDEFROMCAPTURE 0x00000011196#endif197198class JoypadSDL;199200class DisplayServerWindows : public DisplayServer {201GDSOFTCLASS(DisplayServerWindows, DisplayServer);202203friend class DropTargetWindows;204205_THREAD_SAFE_CLASS_206207// UXTheme API208static bool dark_title_available;209static bool use_legacy_dark_mode_before_20H1;210static bool ux_theme_available;211static ShouldAppsUseDarkModePtr ShouldAppsUseDarkMode;212static GetImmersiveColorFromColorSetExPtr GetImmersiveColorFromColorSetEx;213static GetImmersiveColorTypeFromNamePtr GetImmersiveColorTypeFromName;214static GetImmersiveUserColorSetPreferencePtr GetImmersiveUserColorSetPreference;215216// WinTab API217static bool wintab_available;218static WTOpenPtr wintab_WTOpen;219static WTClosePtr wintab_WTClose;220static WTInfoPtr wintab_WTInfo;221static WTPacketPtr wintab_WTPacket;222static WTEnablePtr wintab_WTEnable;223224void _update_tablet_ctx(const String &p_old_driver, const String &p_new_driver);225String tablet_driver;226Vector<String> tablet_drivers;227bool winink_disabled = false;228229enum DriverID {230DRIVER_ID_COMPAT_OPENGL3 = 1 << 0,231DRIVER_ID_COMPAT_ANGLE_D3D11 = 1 << 1,232DRIVER_ID_RD_VULKAN = 1 << 2,233DRIVER_ID_RD_D3D12 = 1 << 3,234};235static BitField<DriverID> tested_drivers;236237enum TimerID {238TIMER_ID_MOVE_REDRAW = 1,239TIMER_ID_WINDOW_ACTIVATION = 2,240};241242OSVERSIONINFOEXW os_ver;243244enum {245KEY_EVENT_BUFFER_SIZE = 512246};247248struct KeyEvent {249WindowID window_id;250bool alt, shift, control, meta, altgr;251UINT uMsg;252WPARAM wParam;253LPARAM lParam;254};255256WindowID window_mouseover_id = INVALID_WINDOW_ID;257258KeyEvent key_event_buffer[KEY_EVENT_BUFFER_SIZE];259int key_event_pos;260261bool old_invalid;262int old_x, old_y;263Point2i center;264265#if defined(GLES3_ENABLED)266GLManagerANGLE_Windows *gl_manager_angle = nullptr;267GLManagerNative_Windows *gl_manager_native = nullptr;268#endif269270#if defined(RD_ENABLED)271RenderingContextDriver *rendering_context = nullptr;272RenderingDevice *rendering_device = nullptr;273#endif274275RBMap<int, Vector2> touch_state;276277Vector<BYTE> icon_buffer_big;278HICON icon_big = nullptr;279Vector<BYTE> icon_buffer_small;280HICON icon_small = nullptr;281282int pressrc;283HINSTANCE hInstance; // Holds The Instance Of The Application284String rendering_driver;285bool app_focused = false;286bool keep_screen_on = false;287bool get_object_received = false;288HANDLE power_request;289290TTS_Windows *tts = nullptr;291NativeMenuWindows *native_menu = nullptr;292293struct WindowData {294HWND hWnd;295WindowID id;296297Vector<Vector2> mpath;298299bool create_completed = false;300bool pre_fs_valid = false;301RECT pre_fs_rect;302bool maximized = false;303bool maximized_fs = false;304bool minimized = false;305bool fullscreen = false;306bool multiwindow_fs = false;307bool borderless = false;308bool resizable = true;309bool no_min_btn = false;310bool no_max_btn = false;311bool window_focused = false;312int activate_state = 0;313bool was_maximized_pre_fs = false;314bool was_fullscreen_pre_min = false;315bool first_activation_done = false;316bool was_maximized = false;317bool always_on_top = false;318bool no_focus = false;319bool exclusive = false;320bool rendering_context_window_created = false;321bool gl_native_window_created = false;322bool gl_angle_window_created = false;323bool mpass = false;324bool sharp_corners = false;325bool hide_from_capture = false;326327// Used to transfer data between events using timer.328WPARAM saved_wparam;329LPARAM saved_lparam;330331// Timers.332uint32_t move_timer_id = 0U;333uint32_t activate_timer_id = 0U;334335HANDLE wtctx;336LOGCONTEXTW wtlc;337int min_pressure;338int max_pressure;339bool tilt_supported;340bool pen_inverted = false;341bool block_mm = false;342343int last_pressure_update;344float last_pressure;345Vector2 last_tilt;346bool last_pen_inverted = false;347348Size2 min_size;349Size2 max_size;350int width = 0, height = 0;351int width_with_decorations = 0, height_with_decorations = 0;352353Size2 window_rect;354Point2 last_pos;355356ObjectID instance_id;357358// IME359HIMC im_himc;360Vector2 im_position;361bool ime_active = false;362bool ime_in_progress = false;363bool ime_suppress_next_keyup = false;364365bool layered_window = false;366367Callable rect_changed_callback;368Callable event_callback;369Callable input_event_callback;370Callable input_text_callback;371Callable drop_files_callback;372373// OLE API374DropTargetWindows *drop_target = nullptr;375376WindowID transient_parent = INVALID_WINDOW_ID;377HashSet<WindowID> transient_children;378379bool is_popup = false;380Rect2i parent_safe_rect;381382bool initialized = false;383384HWND parent_hwnd = 0;385386bool no_redirection_bitmap = false;387};388389#ifdef SDL_ENABLED390JoypadSDL *joypad_sdl = nullptr;391#endif392HHOOK mouse_monitor = nullptr;393List<WindowID> popup_list;394uint64_t time_since_popup = 0;395396Error _create_window(WindowID p_window_id, WindowMode p_mode, uint32_t p_flags, const Rect2i &p_rect, bool p_exclusive, WindowID p_transient_parent, HWND p_parent_hwnd, bool p_no_redirection_bitmap);397void _destroy_window(WindowID p_window_id); // Destroys only what was needed to be created for the main window. Does not destroy transient parent dependencies or GL/rendering context windows.398399#ifdef RD_ENABLED400Error _create_rendering_context_window(WindowID p_window_id, const String &p_rendering_driver);401void _destroy_rendering_context_window(WindowID p_window_id);402#endif403404#ifdef GLES3_ENABLED405Error _create_gl_window(WindowID p_window_id);406#endif407408WindowID window_id_counter = MAIN_WINDOW_ID;409RBMap<WindowID, WindowData> windows;410411WindowID last_focused_window = INVALID_WINDOW_ID;412WindowID last_mouse_button_down_window = INVALID_WINDOW_ID;413HCURSOR hCursor;414415WNDPROC user_proc = nullptr;416417struct IndicatorData {418RID menu_rid;419Callable callback;420Vector<BYTE> icon_buffer;421HICON icon = nullptr;422};423424IndicatorID indicator_id_counter = 0;425HashMap<IndicatorID, IndicatorData> indicators;426427struct FileDialogData {428HWND hwnd_owner = 0;429Rect2i wrect;430String appid;431String title;432String current_directory;433String root;434String filename;435bool show_hidden = false;436DisplayServer::FileDialogMode mode = FileDialogMode::FILE_DIALOG_MODE_OPEN_ANY;437Vector<String> filters;438TypedArray<Dictionary> options;439WindowID window_id = DisplayServer::INVALID_WINDOW_ID;440Callable callback;441bool options_in_cb = false;442Thread listener_thread;443SafeFlag close_requested;444SafeFlag finished;445};446Mutex file_dialog_mutex;447List<FileDialogData *> file_dialogs;448HashMap<HWND, FileDialogData *> file_dialog_wnd;449struct FileDialogCallback {450Callable callback;451Variant status;452Variant files;453Variant index;454Variant options;455bool opt_in_cb = false;456};457List<FileDialogCallback> pending_cbs;458void process_file_dialog_callbacks();459460static void _thread_fd_monitor(void *p_ud);461462HashMap<int64_t, MouseButton> pointer_prev_button;463HashMap<int64_t, MouseButton> pointer_button;464HashMap<int64_t, LONG> pointer_down_time;465HashMap<int64_t, Vector2> pointer_last_pos;466467void _send_window_event(const WindowData &wd, WindowEvent p_event);468void _get_window_style(bool p_main_window, bool p_initialized, bool p_fullscreen, bool p_multiwindow_fs, bool p_borderless, bool p_resizable, bool p_no_min_btn, bool p_no_max_btn, bool p_minimized, bool p_maximized, bool p_maximized_fs, bool p_no_activate_focus, bool p_embed_child, bool p_no_redirection_bitmap, DWORD &r_style, DWORD &r_style_ex);469470MouseMode mouse_mode;471MouseMode mouse_mode_base = MOUSE_MODE_VISIBLE;472MouseMode mouse_mode_override = MOUSE_MODE_VISIBLE;473bool mouse_mode_override_enabled = false;474void _mouse_update_mode();475int restore_mouse_trails = 0;476477bool use_raw_input = false;478bool drop_events = false;479bool in_dispatch_input_event = false;480481WNDCLASSEXW wc;482HBRUSH window_bkg_brush = nullptr;483uint32_t window_bkg_brush_color = 0;484485HCURSOR cursors[CURSOR_MAX] = { nullptr };486CursorShape cursor_shape = CursorShape::CURSOR_ARROW;487RBMap<CursorShape, Vector<Variant>> cursors_cache;488489Callable system_theme_changed;490491void _drag_event(WindowID p_window, float p_x, float p_y, int idx);492void _touch_event(WindowID p_window, bool p_pressed, float p_x, float p_y, int idx);493494bool _is_always_on_top_recursive(WindowID p_window) const;495496void _update_window_style(WindowID p_window, bool p_repaint = true);497void _update_window_mouse_passthrough(WindowID p_window);498499void _update_real_mouse_position(WindowID p_window);500501void _set_mouse_mode_impl(MouseMode p_mode);502WindowID _get_focused_window_or_popup() const;503void _register_raw_input_devices(WindowID p_target_window);504bool _has_moving_window() const;505506void _process_activate_event(WindowID p_window_id);507void _process_key_events();508509static void _dispatch_input_events(const Ref<InputEvent> &p_event);510void _dispatch_input_event(const Ref<InputEvent> &p_event);511512LRESULT _handle_early_window_message(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);513Point2i _get_screens_origin() const;514515Vector2i _get_screen_expand_offset(int p_screen) const;516517enum class WinKeyModifierMask {518ALT_GR = (1 << 1),519SHIFT = (1 << 2),520ALT = (1 << 3),521META = (1 << 4),522CTRL = (1 << 5),523};524BitField<WinKeyModifierMask> _get_mods() const;525526Error _file_dialog_with_options_show(const String &p_title, const String &p_current_directory, const String &p_root, const String &p_filename, bool p_show_hidden, FileDialogMode p_mode, const Vector<String> &p_filters, const TypedArray<Dictionary> &p_options, const Callable &p_callback, bool p_options_in_cb, WindowID p_window_id);527528String _get_keyboard_layout_display_name(const String &p_klid) const;529String _get_klid(HKL p_hkl) const;530531struct EmbeddedProcessData {532HWND window_handle = 0;533HWND parent_window_handle = 0;534bool is_visible = false;535};536HashMap<OS::ProcessID, EmbeddedProcessData *> embedded_processes;537538HWND _find_window_from_process_id(OS::ProcessID p_pid, HWND p_current_hwnd);539540void initialize_tts() const;541542public:543LRESULT WndProcFileDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);544LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);545LRESULT MouseProc(int code, WPARAM wParam, LPARAM lParam);546547void popup_open(WindowID p_window);548void popup_close(WindowID p_window);549550virtual bool has_feature(Feature p_feature) const override;551virtual String get_name() const override;552553virtual bool tts_is_speaking() const override;554virtual bool tts_is_paused() const override;555virtual TypedArray<Dictionary> tts_get_voices() const override;556557virtual void tts_speak(const String &p_text, const String &p_voice, int p_volume = 50, float p_pitch = 1.f, float p_rate = 1.f, int64_t p_utterance_id = 0, bool p_interrupt = false) override;558virtual void tts_pause() override;559virtual void tts_resume() override;560virtual void tts_stop() override;561562virtual bool is_dark_mode_supported() const override;563virtual bool is_dark_mode() const override;564virtual Color get_accent_color() const override;565virtual Color get_base_color() const override;566virtual void set_system_theme_change_callback(const Callable &p_callable) override;567568virtual Error file_dialog_show(const String &p_title, const String &p_current_directory, const String &p_filename, bool p_show_hidden, FileDialogMode p_mode, const Vector<String> &p_filters, const Callable &p_callback, WindowID p_window_id) override;569virtual Error file_dialog_with_options_show(const String &p_title, const String &p_current_directory, const String &p_root, const String &p_filename, bool p_show_hidden, FileDialogMode p_mode, const Vector<String> &p_filters, const TypedArray<Dictionary> &p_options, const Callable &p_callback, WindowID p_window_id) override;570571virtual void beep() const override;572573virtual void mouse_set_mode(MouseMode p_mode) override;574virtual MouseMode mouse_get_mode() const override;575virtual void mouse_set_mode_override(MouseMode p_mode) override;576virtual MouseMode mouse_get_mode_override() const override;577virtual void mouse_set_mode_override_enabled(bool p_override_enabled) override;578virtual bool mouse_is_mode_override_enabled() const override;579580virtual void warp_mouse(const Point2i &p_position) override;581virtual Point2i mouse_get_position() const override;582virtual BitField<MouseButtonMask> mouse_get_button_state() const override;583584virtual void clipboard_set(const String &p_text) override;585virtual String clipboard_get() const override;586virtual Ref<Image> clipboard_get_image() const override;587virtual bool clipboard_has() const override;588virtual bool clipboard_has_image() const override;589590virtual int get_screen_count() const override;591virtual int get_primary_screen() const override;592virtual int get_keyboard_focus_screen() const override;593virtual Point2i screen_get_position(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;594virtual Size2i screen_get_size(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;595virtual Rect2i screen_get_usable_rect(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;596virtual int screen_get_dpi(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;597virtual float screen_get_refresh_rate(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;598virtual Color screen_get_pixel(const Point2i &p_position) const override;599virtual Ref<Image> screen_get_image(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;600virtual Ref<Image> screen_get_image_rect(const Rect2i &p_rect) const override;601602virtual void screen_set_keep_on(bool p_enable) override; //disable screensaver603virtual bool screen_is_kept_on() const override;604605virtual Vector<DisplayServer::WindowID> get_window_list() const override;606607virtual WindowID create_sub_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect = Rect2i(), bool p_exclusive = false, WindowID p_transient_parent = INVALID_WINDOW_ID) override;608virtual void show_window(WindowID p_window) override;609virtual void delete_sub_window(WindowID p_window) override;610611virtual WindowID window_get_active_popup() const override;612virtual void window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) override;613virtual Rect2i window_get_popup_safe_rect(WindowID p_window) const override;614615virtual int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const override;616617virtual WindowID get_window_at_screen_position(const Point2i &p_position) const override;618619virtual void window_attach_instance_id(ObjectID p_instance, WindowID p_window = MAIN_WINDOW_ID) override;620virtual ObjectID window_get_attached_instance_id(WindowID p_window = MAIN_WINDOW_ID) const override;621virtual void gl_window_make_current(DisplayServer::WindowID p_window_id) override;622623virtual void window_set_rect_changed_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override;624625virtual void window_set_window_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override;626virtual void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override;627virtual void window_set_input_text_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override;628629virtual void window_set_drop_files_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override;630631virtual void window_set_title(const String &p_title, WindowID p_window = MAIN_WINDOW_ID) override;632virtual Size2i window_get_title_size(const String &p_title, WindowID p_window = MAIN_WINDOW_ID) const override;633virtual void window_set_mouse_passthrough(const Vector<Vector2> &p_region, WindowID p_window = MAIN_WINDOW_ID) override;634635virtual int window_get_current_screen(WindowID p_window = MAIN_WINDOW_ID) const override;636virtual void window_set_current_screen(int p_screen, WindowID p_window = MAIN_WINDOW_ID) override;637638virtual Point2i window_get_position(WindowID p_window = MAIN_WINDOW_ID) const override;639virtual Point2i window_get_position_with_decorations(WindowID p_window = MAIN_WINDOW_ID) const override;640virtual void window_set_position(const Point2i &p_position, WindowID p_window = MAIN_WINDOW_ID) override;641642virtual void window_set_transient(WindowID p_window, WindowID p_parent) override;643virtual void window_set_exclusive(WindowID p_window, bool p_exclusive) override;644645virtual void window_set_max_size(const Size2i p_size, WindowID p_window = MAIN_WINDOW_ID) override;646virtual Size2i window_get_max_size(WindowID p_window = MAIN_WINDOW_ID) const override;647648virtual void window_set_min_size(const Size2i p_size, WindowID p_window = MAIN_WINDOW_ID) override;649virtual Size2i window_get_min_size(WindowID p_window = MAIN_WINDOW_ID) const override;650651virtual void window_set_size(const Size2i p_size, WindowID p_window = MAIN_WINDOW_ID) override;652virtual Size2i window_get_size(WindowID p_window = MAIN_WINDOW_ID) const override;653virtual Size2i window_get_size_with_decorations(WindowID p_window = MAIN_WINDOW_ID) const override;654655virtual void window_set_mode(WindowMode p_mode, WindowID p_window = MAIN_WINDOW_ID) override;656virtual WindowMode window_get_mode(WindowID p_window = MAIN_WINDOW_ID) const override;657658virtual bool window_is_maximize_allowed(WindowID p_window = MAIN_WINDOW_ID) const override;659660virtual void window_set_flag(WindowFlags p_flag, bool p_enabled, WindowID p_window = MAIN_WINDOW_ID) override;661virtual bool window_get_flag(WindowFlags p_flag, WindowID p_window = MAIN_WINDOW_ID) const override;662663virtual void window_request_attention(WindowID p_window = MAIN_WINDOW_ID) override;664virtual void window_move_to_foreground(WindowID p_window = MAIN_WINDOW_ID) override;665virtual bool window_is_focused(WindowID p_window = MAIN_WINDOW_ID) const override;666667virtual WindowID get_focused_window() const override;668669virtual bool window_can_draw(WindowID p_window = MAIN_WINDOW_ID) const override;670671virtual bool can_any_window_draw() const override;672673virtual void window_set_ime_active(const bool p_active, WindowID p_window = MAIN_WINDOW_ID) override;674virtual void window_set_ime_position(const Point2i &p_pos, WindowID p_window = MAIN_WINDOW_ID) override;675676virtual int accessibility_should_increase_contrast() const override;677virtual int accessibility_should_reduce_animation() const override;678virtual int accessibility_should_reduce_transparency() const override;679virtual int accessibility_screen_reader_active() const override;680681virtual Point2i ime_get_selection() const override;682virtual String ime_get_text() const override;683684virtual void window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mode, WindowID p_window = MAIN_WINDOW_ID) override;685virtual DisplayServer::VSyncMode window_get_vsync_mode(WindowID p_vsync_mode) const override;686687virtual void window_start_drag(WindowID p_window = MAIN_WINDOW_ID) override;688virtual void window_start_resize(WindowResizeEdge p_edge, WindowID p_window = MAIN_WINDOW_ID) override;689690virtual void cursor_set_shape(CursorShape p_shape) override;691virtual CursorShape cursor_get_shape() const override;692virtual void cursor_set_custom_image(const Ref<Resource> &p_cursor, CursorShape p_shape = CURSOR_ARROW, const Vector2 &p_hotspot = Vector2()) override;693694virtual bool get_swap_cancel_ok() override;695696virtual void enable_for_stealing_focus(OS::ProcessID pid) override;697virtual Error embed_process(WindowID p_window, OS::ProcessID p_pid, const Rect2i &p_rect, bool p_visible, bool p_grab_focus) override;698virtual Error request_close_embedded_process(OS::ProcessID p_pid) override;699virtual Error remove_embedded_process(OS::ProcessID p_pid) override;700virtual OS::ProcessID get_focused_process_id() override;701702virtual Error dialog_show(String p_title, String p_description, Vector<String> p_buttons, const Callable &p_callback) override;703virtual Error dialog_input_text(String p_title, String p_description, String p_partial, const Callable &p_callback) override;704705virtual int keyboard_get_layout_count() const override;706virtual int keyboard_get_current_layout() const override;707virtual void keyboard_set_current_layout(int p_index) override;708virtual String keyboard_get_layout_language(int p_index) const override;709virtual String keyboard_get_layout_name(int p_index) const override;710virtual Key keyboard_get_keycode_from_physical(Key p_keycode) const override;711virtual Key keyboard_get_label_from_physical(Key p_keycode) const override;712virtual void show_emoji_and_symbol_picker() const override;713714virtual int tablet_get_driver_count() const override;715virtual String tablet_get_driver_name(int p_driver) const override;716virtual String tablet_get_current_driver() const override;717virtual void tablet_set_current_driver(const String &p_driver) override;718719virtual void process_events() override;720721virtual void force_process_and_drop_events() override;722723virtual void release_rendering_thread() override;724virtual void swap_buffers() override;725726virtual void set_native_icon(const String &p_filename) override;727virtual void set_icon(const Ref<Image> &p_icon) override;728729virtual IndicatorID create_status_indicator(const Ref<Texture2D> &p_icon, const String &p_tooltip, const Callable &p_callback) override;730virtual void status_indicator_set_icon(IndicatorID p_id, const Ref<Texture2D> &p_icon) override;731virtual void status_indicator_set_tooltip(IndicatorID p_id, const String &p_tooltip) override;732virtual void status_indicator_set_menu(IndicatorID p_id, const RID &p_rid) override;733virtual void status_indicator_set_callback(IndicatorID p_id, const Callable &p_callback) override;734virtual Rect2 status_indicator_get_rect(IndicatorID p_id) const override;735virtual void delete_status_indicator(IndicatorID p_id) override;736737virtual void set_context(Context p_context) override;738739virtual bool is_window_transparency_available() const override;740741static DisplayServer *create_func(const String &p_rendering_driver, WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i *p_position, const Vector2i &p_resolution, int p_screen, Context p_context, int64_t p_parent_window, Error &r_error);742static Vector<String> get_rendering_drivers_func();743static void register_windows_driver();744745DisplayServerWindows(const String &p_rendering_driver, WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i *p_position, const Vector2i &p_resolution, int p_screen, Context p_context, int64_t p_parent_window, Error &r_error);746~DisplayServerWindows();747};748749750