| 1 | /**************************************************************************/ |
| 2 | /* display_server.cpp */ |
| 3 | /**************************************************************************/ |
| 4 | /* This file is part of: */ |
| 5 | /* GODOT ENGINE */ |
| 6 | /* https://godotengine.org */ |
| 7 | /**************************************************************************/ |
| 8 | /* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ |
| 9 | /* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ |
| 10 | /* */ |
| 11 | /* Permission is hereby granted, free of charge, to any person obtaining */ |
| 12 | /* a copy of this software and associated documentation files (the */ |
| 13 | /* "Software"), to deal in the Software without restriction, including */ |
| 14 | /* without limitation the rights to use, copy, modify, merge, publish, */ |
| 15 | /* distribute, sublicense, and/or sell copies of the Software, and to */ |
| 16 | /* permit persons to whom the Software is furnished to do so, subject to */ |
| 17 | /* the following conditions: */ |
| 18 | /* */ |
| 19 | /* The above copyright notice and this permission notice shall be */ |
| 20 | /* included in all copies or substantial portions of the Software. */ |
| 21 | /* */ |
| 22 | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ |
| 23 | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ |
| 24 | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ |
| 25 | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ |
| 26 | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ |
| 27 | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ |
| 28 | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ |
| 29 | /**************************************************************************/ |
| 30 | |
| 31 | #include "display_server.h" |
| 32 | |
| 33 | #include "core/input/input.h" |
| 34 | #include "scene/resources/texture.h" |
| 35 | #include "servers/display_server_headless.h" |
| 36 | |
| 37 | DisplayServer *DisplayServer::singleton = nullptr; |
| 38 | |
| 39 | bool DisplayServer::hidpi_allowed = false; |
| 40 | |
| 41 | bool DisplayServer::window_early_clear_override_enabled = false; |
| 42 | Color DisplayServer::window_early_clear_override_color = Color(0, 0, 0, 0); |
| 43 | |
| 44 | DisplayServer::DisplayServerCreate DisplayServer::server_create_functions[DisplayServer::MAX_SERVERS] = { |
| 45 | { "headless" , &DisplayServerHeadless::create_func, &DisplayServerHeadless::get_rendering_drivers_func } |
| 46 | }; |
| 47 | |
| 48 | int DisplayServer::server_create_count = 1; |
| 49 | |
| 50 | int DisplayServer::(const String &, const String &p_label, const Callable &p_callback, const Callable &p_key_callback, const Variant &p_tag, Key p_accel, int p_index) { |
| 51 | WARN_PRINT("Global menus not supported by this display server." ); |
| 52 | return -1; |
| 53 | } |
| 54 | |
| 55 | int DisplayServer::(const String &, const String &p_label, const Callable &p_callback, const Callable &p_key_callback, const Variant &p_tag, Key p_accel, int p_index) { |
| 56 | WARN_PRINT("Global menus not supported by this display server." ); |
| 57 | return -1; |
| 58 | } |
| 59 | |
| 60 | int DisplayServer::(const String &, const Ref<Texture2D> &p_icon, const String &p_label, const Callable &p_callback, const Callable &p_key_callback, const Variant &p_tag, Key p_accel, int p_index) { |
| 61 | WARN_PRINT("Global menus not supported by this display server." ); |
| 62 | return -1; |
| 63 | } |
| 64 | |
| 65 | int DisplayServer::(const String &, const Ref<Texture2D> &p_icon, const String &p_label, const Callable &p_callback, const Callable &p_key_callback, const Variant &p_tag, Key p_accel, int p_index) { |
| 66 | WARN_PRINT("Global menus not supported by this display server." ); |
| 67 | return -1; |
| 68 | } |
| 69 | |
| 70 | int DisplayServer::(const String &, const String &p_label, const Callable &p_callback, const Callable &p_key_callback, const Variant &p_tag, Key p_accel, int p_index) { |
| 71 | WARN_PRINT("Global menus not supported by this display server." ); |
| 72 | return -1; |
| 73 | } |
| 74 | |
| 75 | int DisplayServer::(const String &, const Ref<Texture2D> &p_icon, const String &p_label, const Callable &p_callback, const Callable &p_key_callback, const Variant &p_tag, Key p_accel, int p_index) { |
| 76 | WARN_PRINT("Global menus not supported by this display server." ); |
| 77 | return -1; |
| 78 | } |
| 79 | |
| 80 | int DisplayServer::(const String &, const String &p_label, int p_max_states, int p_default_state, const Callable &p_callback, const Callable &p_key_callback, const Variant &p_tag, Key p_accel, int p_index) { |
| 81 | WARN_PRINT("Global menus not supported by this display server." ); |
| 82 | return -1; |
| 83 | } |
| 84 | |
| 85 | int DisplayServer::(const String &, const String &p_label, const String &, int p_index) { |
| 86 | WARN_PRINT("Global menus not supported by this display server." ); |
| 87 | return -1; |
| 88 | } |
| 89 | |
| 90 | int DisplayServer::(const String &, int p_index) { |
| 91 | WARN_PRINT("Global menus not supported by this display server." ); |
| 92 | return -1; |
| 93 | } |
| 94 | |
| 95 | int DisplayServer::(const String &, const String &p_text) const { |
| 96 | WARN_PRINT("Global menus not supported by this display server." ); |
| 97 | return -1; |
| 98 | } |
| 99 | |
| 100 | int DisplayServer::(const String &, const Variant &p_tag) const { |
| 101 | WARN_PRINT("Global menus not supported by this display server." ); |
| 102 | return -1; |
| 103 | } |
| 104 | |
| 105 | void DisplayServer::(const String &, int p_idx, const Callable &p_callback) { |
| 106 | WARN_PRINT("Global menus not supported by this display server." ); |
| 107 | } |
| 108 | |
| 109 | void DisplayServer::(const String &, int p_idx, const Callable &p_key_callback) { |
| 110 | WARN_PRINT("Global menus not supported by this display server." ); |
| 111 | } |
| 112 | |
| 113 | bool DisplayServer::(const String &, int p_idx) const { |
| 114 | WARN_PRINT("Global menus not supported by this display server." ); |
| 115 | return false; |
| 116 | } |
| 117 | |
| 118 | bool DisplayServer::(const String &, int p_idx) const { |
| 119 | WARN_PRINT("Global menus not supported by this display server." ); |
| 120 | return false; |
| 121 | } |
| 122 | |
| 123 | bool DisplayServer::(const String &, int p_idx) const { |
| 124 | WARN_PRINT("Global menus not supported by this display server." ); |
| 125 | return false; |
| 126 | } |
| 127 | |
| 128 | Callable DisplayServer::(const String &, int p_idx) const { |
| 129 | WARN_PRINT("Global menus not supported by this display server." ); |
| 130 | return Callable(); |
| 131 | } |
| 132 | |
| 133 | Callable DisplayServer::(const String &, int p_idx) const { |
| 134 | WARN_PRINT("Global menus not supported by this display server." ); |
| 135 | return Callable(); |
| 136 | } |
| 137 | |
| 138 | Variant DisplayServer::(const String &, int p_idx) const { |
| 139 | WARN_PRINT("Global menus not supported by this display server." ); |
| 140 | return Variant(); |
| 141 | } |
| 142 | |
| 143 | String DisplayServer::(const String &, int p_idx) const { |
| 144 | WARN_PRINT("Global menus not supported by this display server." ); |
| 145 | return String(); |
| 146 | } |
| 147 | |
| 148 | String DisplayServer::(const String &, int p_idx) const { |
| 149 | WARN_PRINT("Global menus not supported by this display server." ); |
| 150 | return String(); |
| 151 | } |
| 152 | |
| 153 | Key DisplayServer::(const String &, int p_idx) const { |
| 154 | WARN_PRINT("Global menus not supported by this display server." ); |
| 155 | return Key::NONE; |
| 156 | } |
| 157 | |
| 158 | bool DisplayServer::(const String &, int p_idx) const { |
| 159 | WARN_PRINT("Global menus not supported by this display server." ); |
| 160 | return false; |
| 161 | } |
| 162 | |
| 163 | String DisplayServer::(const String &, int p_idx) const { |
| 164 | WARN_PRINT("Global menus not supported by this display server." ); |
| 165 | return String(); |
| 166 | } |
| 167 | |
| 168 | int DisplayServer::(const String &, int p_idx) const { |
| 169 | WARN_PRINT("Global menus not supported by this display server." ); |
| 170 | return -1; |
| 171 | } |
| 172 | |
| 173 | int DisplayServer::(const String &, int p_idx) const { |
| 174 | WARN_PRINT("Global menus not supported by this display server." ); |
| 175 | return -1; |
| 176 | } |
| 177 | |
| 178 | Ref<Texture2D> DisplayServer::(const String &, int p_idx) const { |
| 179 | WARN_PRINT("Global menus not supported by this display server." ); |
| 180 | return Ref<Texture2D>(); |
| 181 | } |
| 182 | |
| 183 | int DisplayServer::(const String &, int p_idx) const { |
| 184 | WARN_PRINT("Global menus not supported by this display server." ); |
| 185 | return 0; |
| 186 | } |
| 187 | |
| 188 | void DisplayServer::(const String &, int p_idx, bool p_checked) { |
| 189 | WARN_PRINT("Global menus not supported by this display server." ); |
| 190 | } |
| 191 | |
| 192 | void DisplayServer::(const String &, int p_idx, bool p_checkable) { |
| 193 | WARN_PRINT("Global menus not supported by this display server." ); |
| 194 | } |
| 195 | |
| 196 | void DisplayServer::(const String &, int p_idx, bool p_checkable) { |
| 197 | WARN_PRINT("Global menus not supported by this display server." ); |
| 198 | } |
| 199 | |
| 200 | void DisplayServer::(const String &, int p_idx, const Variant &p_tag) { |
| 201 | WARN_PRINT("Global menus not supported by this display server." ); |
| 202 | } |
| 203 | |
| 204 | void DisplayServer::(const String &, int p_idx, const String &p_text) { |
| 205 | WARN_PRINT("Global menus not supported by this display server." ); |
| 206 | } |
| 207 | |
| 208 | void DisplayServer::(const String &, int p_idx, const String &) { |
| 209 | WARN_PRINT("Global menus not supported by this display server." ); |
| 210 | } |
| 211 | |
| 212 | void DisplayServer::(const String &, int p_idx, Key p_keycode) { |
| 213 | WARN_PRINT("Global menus not supported by this display server." ); |
| 214 | } |
| 215 | |
| 216 | void DisplayServer::(const String &, int p_idx, bool p_disabled) { |
| 217 | WARN_PRINT("Global menus not supported by this display server." ); |
| 218 | } |
| 219 | |
| 220 | void DisplayServer::(const String &, int p_idx, const String &p_tooltip) { |
| 221 | WARN_PRINT("Global menus not supported by this display server." ); |
| 222 | } |
| 223 | |
| 224 | void DisplayServer::(const String &, int p_idx, int p_state) { |
| 225 | WARN_PRINT("Global menus not supported by this display server." ); |
| 226 | } |
| 227 | |
| 228 | void DisplayServer::(const String &, int p_idx, int p_max_states) { |
| 229 | WARN_PRINT("Global menus not supported by this display server." ); |
| 230 | } |
| 231 | |
| 232 | void DisplayServer::(const String &, int p_idx, const Ref<Texture2D> &p_icon) { |
| 233 | WARN_PRINT("Global menus not supported by this display server." ); |
| 234 | } |
| 235 | |
| 236 | void DisplayServer::(const String &, int p_idx, int p_level) { |
| 237 | WARN_PRINT("Global menus not supported by this display server." ); |
| 238 | } |
| 239 | |
| 240 | int DisplayServer::(const String &) const { |
| 241 | WARN_PRINT("Global menus not supported by this display server." ); |
| 242 | return 0; |
| 243 | } |
| 244 | |
| 245 | void DisplayServer::(const String &, int p_idx) { |
| 246 | WARN_PRINT("Global menus not supported by this display server." ); |
| 247 | } |
| 248 | |
| 249 | void DisplayServer::(const String &) { |
| 250 | WARN_PRINT("Global menus not supported by this display server." ); |
| 251 | } |
| 252 | |
| 253 | bool DisplayServer::tts_is_speaking() const { |
| 254 | WARN_PRINT("TTS is not supported by this display server." ); |
| 255 | return false; |
| 256 | } |
| 257 | |
| 258 | bool DisplayServer::tts_is_paused() const { |
| 259 | WARN_PRINT("TTS is not supported by this display server." ); |
| 260 | return false; |
| 261 | } |
| 262 | |
| 263 | void DisplayServer::tts_pause() { |
| 264 | WARN_PRINT("TTS is not supported by this display server." ); |
| 265 | } |
| 266 | |
| 267 | void DisplayServer::tts_resume() { |
| 268 | WARN_PRINT("TTS is not supported by this display server." ); |
| 269 | } |
| 270 | |
| 271 | TypedArray<Dictionary> DisplayServer::tts_get_voices() const { |
| 272 | WARN_PRINT("TTS is not supported by this display server." ); |
| 273 | return TypedArray<Dictionary>(); |
| 274 | } |
| 275 | |
| 276 | PackedStringArray DisplayServer::tts_get_voices_for_language(const String &p_language) const { |
| 277 | PackedStringArray ret; |
| 278 | TypedArray<Dictionary> voices = tts_get_voices(); |
| 279 | for (int i = 0; i < voices.size(); i++) { |
| 280 | const Dictionary &voice = voices[i]; |
| 281 | if (voice.has("id" ) && voice.has("language" ) && voice["language" ].operator String().begins_with(p_language)) { |
| 282 | ret.push_back(voice["id" ]); |
| 283 | } |
| 284 | } |
| 285 | return ret; |
| 286 | } |
| 287 | |
| 288 | void DisplayServer::tts_speak(const String &p_text, const String &p_voice, int p_volume, float p_pitch, float p_rate, int p_utterance_id, bool p_interrupt) { |
| 289 | WARN_PRINT("TTS is not supported by this display server." ); |
| 290 | } |
| 291 | |
| 292 | void DisplayServer::tts_stop() { |
| 293 | WARN_PRINT("TTS is not supported by this display server." ); |
| 294 | } |
| 295 | |
| 296 | void DisplayServer::tts_set_utterance_callback(TTSUtteranceEvent p_event, const Callable &p_callable) { |
| 297 | ERR_FAIL_INDEX(p_event, DisplayServer::TTS_UTTERANCE_MAX); |
| 298 | utterance_callback[p_event] = p_callable; |
| 299 | } |
| 300 | |
| 301 | void DisplayServer::tts_post_utterance_event(TTSUtteranceEvent p_event, int p_id, int p_pos) { |
| 302 | ERR_FAIL_INDEX(p_event, DisplayServer::TTS_UTTERANCE_MAX); |
| 303 | switch (p_event) { |
| 304 | case DisplayServer::TTS_UTTERANCE_STARTED: |
| 305 | case DisplayServer::TTS_UTTERANCE_ENDED: |
| 306 | case DisplayServer::TTS_UTTERANCE_CANCELED: { |
| 307 | if (utterance_callback[p_event].is_valid()) { |
| 308 | utterance_callback[p_event].call_deferred(p_id); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession. |
| 309 | } |
| 310 | } break; |
| 311 | case DisplayServer::TTS_UTTERANCE_BOUNDARY: { |
| 312 | if (utterance_callback[p_event].is_valid()) { |
| 313 | utterance_callback[p_event].call_deferred(p_pos, p_id); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession. |
| 314 | } |
| 315 | } break; |
| 316 | default: |
| 317 | break; |
| 318 | } |
| 319 | } |
| 320 | |
| 321 | bool DisplayServer::_get_window_early_clear_override(Color &r_color) { |
| 322 | if (window_early_clear_override_enabled) { |
| 323 | r_color = window_early_clear_override_color; |
| 324 | return true; |
| 325 | } else if (RenderingServer::get_singleton()) { |
| 326 | r_color = RenderingServer::get_singleton()->get_default_clear_color(); |
| 327 | return true; |
| 328 | } else { |
| 329 | return false; |
| 330 | } |
| 331 | } |
| 332 | |
| 333 | void DisplayServer::set_early_window_clear_color_override(bool p_enabled, Color p_color) { |
| 334 | window_early_clear_override_enabled = p_enabled; |
| 335 | window_early_clear_override_color = p_color; |
| 336 | } |
| 337 | |
| 338 | void DisplayServer::mouse_set_mode(MouseMode p_mode) { |
| 339 | WARN_PRINT("Mouse is not supported by this display server." ); |
| 340 | } |
| 341 | |
| 342 | DisplayServer::MouseMode DisplayServer::mouse_get_mode() const { |
| 343 | return MOUSE_MODE_VISIBLE; |
| 344 | } |
| 345 | |
| 346 | void DisplayServer::warp_mouse(const Point2i &p_position) { |
| 347 | } |
| 348 | |
| 349 | Point2i DisplayServer::mouse_get_position() const { |
| 350 | ERR_FAIL_V_MSG(Point2i(), "Mouse is not supported by this display server." ); |
| 351 | } |
| 352 | |
| 353 | BitField<MouseButtonMask> DisplayServer::mouse_get_button_state() const { |
| 354 | ERR_FAIL_V_MSG(0, "Mouse is not supported by this display server." ); |
| 355 | } |
| 356 | |
| 357 | void DisplayServer::clipboard_set(const String &p_text) { |
| 358 | WARN_PRINT("Clipboard is not supported by this display server." ); |
| 359 | } |
| 360 | |
| 361 | String DisplayServer::clipboard_get() const { |
| 362 | ERR_FAIL_V_MSG(String(), "Clipboard is not supported by this display server." ); |
| 363 | } |
| 364 | |
| 365 | Ref<Image> DisplayServer::clipboard_get_image() const { |
| 366 | ERR_FAIL_V_MSG(Ref<Image>(), "Clipboard is not supported by this display server." ); |
| 367 | } |
| 368 | |
| 369 | bool DisplayServer::clipboard_has() const { |
| 370 | return !clipboard_get().is_empty(); |
| 371 | } |
| 372 | |
| 373 | bool DisplayServer::clipboard_has_image() const { |
| 374 | return clipboard_get_image().is_valid(); |
| 375 | } |
| 376 | |
| 377 | void DisplayServer::clipboard_set_primary(const String &p_text) { |
| 378 | WARN_PRINT("Primary clipboard is not supported by this display server." ); |
| 379 | } |
| 380 | |
| 381 | String DisplayServer::clipboard_get_primary() const { |
| 382 | ERR_FAIL_V_MSG(String(), "Primary clipboard is not supported by this display server." ); |
| 383 | } |
| 384 | |
| 385 | void DisplayServer::screen_set_orientation(ScreenOrientation p_orientation, int p_screen) { |
| 386 | WARN_PRINT("Orientation not supported by this display server." ); |
| 387 | } |
| 388 | |
| 389 | DisplayServer::ScreenOrientation DisplayServer::screen_get_orientation(int p_screen) const { |
| 390 | return SCREEN_LANDSCAPE; |
| 391 | } |
| 392 | |
| 393 | float DisplayServer::screen_get_scale(int p_screen) const { |
| 394 | return 1.0f; |
| 395 | }; |
| 396 | |
| 397 | bool DisplayServer::is_touchscreen_available() const { |
| 398 | return Input::get_singleton() && Input::get_singleton()->is_emulating_touch_from_mouse(); |
| 399 | } |
| 400 | |
| 401 | void DisplayServer::screen_set_keep_on(bool p_enable) { |
| 402 | WARN_PRINT("Keeping screen on not supported by this display server." ); |
| 403 | } |
| 404 | |
| 405 | bool DisplayServer::screen_is_kept_on() const { |
| 406 | return false; |
| 407 | } |
| 408 | |
| 409 | int DisplayServer::get_screen_from_rect(const Rect2 &p_rect) const { |
| 410 | int nearest_area = 0; |
| 411 | int pos_screen = -1; |
| 412 | for (int i = 0; i < get_screen_count(); i++) { |
| 413 | Rect2i r; |
| 414 | r.position = screen_get_position(i); |
| 415 | r.size = screen_get_size(i); |
| 416 | Rect2 inters = r.intersection(p_rect); |
| 417 | int area = inters.size.width * inters.size.height; |
| 418 | if (area > nearest_area) { |
| 419 | pos_screen = i; |
| 420 | nearest_area = area; |
| 421 | } |
| 422 | } |
| 423 | return pos_screen; |
| 424 | } |
| 425 | |
| 426 | DisplayServer::WindowID DisplayServer::create_sub_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect) { |
| 427 | ERR_FAIL_V_MSG(INVALID_WINDOW_ID, "Sub-windows not supported by this display server." ); |
| 428 | } |
| 429 | |
| 430 | void DisplayServer::show_window(WindowID p_id) { |
| 431 | ERR_FAIL_MSG("Sub-windows not supported by this display server." ); |
| 432 | } |
| 433 | |
| 434 | void DisplayServer::delete_sub_window(WindowID p_id) { |
| 435 | ERR_FAIL_MSG("Sub-windows not supported by this display server." ); |
| 436 | } |
| 437 | |
| 438 | void DisplayServer::window_set_exclusive(WindowID p_window, bool p_exclusive) { |
| 439 | // Do nothing, if not supported. |
| 440 | } |
| 441 | |
| 442 | void DisplayServer::window_set_mouse_passthrough(const Vector<Vector2> &p_region, WindowID p_window) { |
| 443 | ERR_FAIL_MSG("Mouse passthrough not supported by this display server." ); |
| 444 | } |
| 445 | |
| 446 | void DisplayServer::gl_window_make_current(DisplayServer::WindowID p_window_id) { |
| 447 | // noop except in gles |
| 448 | } |
| 449 | |
| 450 | void DisplayServer::window_set_ime_active(const bool p_active, WindowID p_window) { |
| 451 | WARN_PRINT("IME not supported by this display server." ); |
| 452 | } |
| 453 | |
| 454 | void DisplayServer::window_set_ime_position(const Point2i &p_pos, WindowID p_window) { |
| 455 | WARN_PRINT("IME not supported by this display server." ); |
| 456 | } |
| 457 | |
| 458 | Point2i DisplayServer::ime_get_selection() const { |
| 459 | ERR_FAIL_V_MSG(Point2i(), "IME or NOTIFICATION_WM_IME_UPDATE not supported by this display server." ); |
| 460 | } |
| 461 | |
| 462 | String DisplayServer::ime_get_text() const { |
| 463 | ERR_FAIL_V_MSG(String(), "IME or NOTIFICATION_WM_IME_UPDATEnot supported by this display server." ); |
| 464 | } |
| 465 | |
| 466 | void DisplayServer::virtual_keyboard_show(const String &p_existing_text, const Rect2 &p_screen_rect, VirtualKeyboardType p_type, int p_max_length, int p_cursor_start, int p_cursor_end) { |
| 467 | WARN_PRINT("Virtual keyboard not supported by this display server." ); |
| 468 | } |
| 469 | |
| 470 | void DisplayServer::virtual_keyboard_hide() { |
| 471 | WARN_PRINT("Virtual keyboard not supported by this display server." ); |
| 472 | } |
| 473 | |
| 474 | // returns height of the currently shown keyboard (0 if keyboard is hidden) |
| 475 | int DisplayServer::virtual_keyboard_get_height() const { |
| 476 | ERR_FAIL_V_MSG(0, "Virtual keyboard not supported by this display server." ); |
| 477 | } |
| 478 | |
| 479 | void DisplayServer::cursor_set_shape(CursorShape p_shape) { |
| 480 | WARN_PRINT("Cursor shape not supported by this display server." ); |
| 481 | } |
| 482 | |
| 483 | DisplayServer::CursorShape DisplayServer::cursor_get_shape() const { |
| 484 | return CURSOR_ARROW; |
| 485 | } |
| 486 | |
| 487 | void DisplayServer::cursor_set_custom_image(const Ref<Resource> &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) { |
| 488 | WARN_PRINT("Custom cursor shape not supported by this display server." ); |
| 489 | } |
| 490 | |
| 491 | bool DisplayServer::get_swap_cancel_ok() { |
| 492 | return false; |
| 493 | } |
| 494 | |
| 495 | void DisplayServer::enable_for_stealing_focus(OS::ProcessID pid) { |
| 496 | } |
| 497 | |
| 498 | Error DisplayServer::dialog_show(String p_title, String p_description, Vector<String> p_buttons, const Callable &p_callback) { |
| 499 | WARN_PRINT("Native dialogs not supported by this display server." ); |
| 500 | return OK; |
| 501 | } |
| 502 | |
| 503 | Error DisplayServer::dialog_input_text(String p_title, String p_description, String p_partial, const Callable &p_callback) { |
| 504 | WARN_PRINT("Native dialogs not supported by this display server." ); |
| 505 | return OK; |
| 506 | } |
| 507 | |
| 508 | Error DisplayServer::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) { |
| 509 | WARN_PRINT("Native dialogs not supported by this display server." ); |
| 510 | return OK; |
| 511 | } |
| 512 | |
| 513 | int DisplayServer::keyboard_get_layout_count() const { |
| 514 | return 0; |
| 515 | } |
| 516 | |
| 517 | int DisplayServer::keyboard_get_current_layout() const { |
| 518 | return -1; |
| 519 | } |
| 520 | |
| 521 | void DisplayServer::keyboard_set_current_layout(int p_index) { |
| 522 | } |
| 523 | |
| 524 | String DisplayServer::keyboard_get_layout_language(int p_index) const { |
| 525 | return "" ; |
| 526 | } |
| 527 | |
| 528 | String DisplayServer::keyboard_get_layout_name(int p_index) const { |
| 529 | return "Not supported" ; |
| 530 | } |
| 531 | |
| 532 | Key DisplayServer::keyboard_get_keycode_from_physical(Key p_keycode) const { |
| 533 | ERR_FAIL_V_MSG(p_keycode, "Not supported by this display server." ); |
| 534 | } |
| 535 | |
| 536 | Key DisplayServer::keyboard_get_label_from_physical(Key p_keycode) const { |
| 537 | ERR_FAIL_V_MSG(p_keycode, "Not supported by this display server." ); |
| 538 | } |
| 539 | |
| 540 | void DisplayServer::force_process_and_drop_events() { |
| 541 | } |
| 542 | |
| 543 | void DisplayServer::release_rendering_thread() { |
| 544 | WARN_PRINT("Rendering thread not supported by this display server." ); |
| 545 | } |
| 546 | |
| 547 | void DisplayServer::make_rendering_thread() { |
| 548 | WARN_PRINT("Rendering thread not supported by this display server." ); |
| 549 | } |
| 550 | |
| 551 | void DisplayServer::swap_buffers() { |
| 552 | WARN_PRINT("Swap buffers not supported by this display server." ); |
| 553 | } |
| 554 | |
| 555 | void DisplayServer::set_native_icon(const String &p_filename) { |
| 556 | WARN_PRINT("Native icon not supported by this display server." ); |
| 557 | } |
| 558 | |
| 559 | void DisplayServer::set_icon(const Ref<Image> &p_icon) { |
| 560 | WARN_PRINT("Icon not supported by this display server." ); |
| 561 | } |
| 562 | |
| 563 | int64_t DisplayServer::window_get_native_handle(HandleType p_handle_type, WindowID p_window) const { |
| 564 | WARN_PRINT("Native handle not supported by this display server." ); |
| 565 | return 0; |
| 566 | } |
| 567 | |
| 568 | void DisplayServer::window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mode, WindowID p_window) { |
| 569 | WARN_PRINT("Changing the V-Sync mode is not supported by this display server." ); |
| 570 | } |
| 571 | |
| 572 | DisplayServer::VSyncMode DisplayServer::window_get_vsync_mode(WindowID p_window) const { |
| 573 | WARN_PRINT("Changing the V-Sync mode is not supported by this display server." ); |
| 574 | return VSyncMode::VSYNC_ENABLED; |
| 575 | } |
| 576 | |
| 577 | void DisplayServer::set_context(Context p_context) { |
| 578 | } |
| 579 | |
| 580 | void DisplayServer::_bind_methods() { |
| 581 | ClassDB::bind_method(D_METHOD("has_feature" , "feature" ), &DisplayServer::has_feature); |
| 582 | ClassDB::bind_method(D_METHOD("get_name" ), &DisplayServer::get_name); |
| 583 | |
| 584 | ClassDB::bind_method(D_METHOD("global_menu_add_submenu_item" , "menu_root" , "label" , "submenu" , "index" ), &DisplayServer::global_menu_add_submenu_item, DEFVAL(-1)); |
| 585 | ClassDB::bind_method(D_METHOD("global_menu_add_item" , "menu_root" , "label" , "callback" , "key_callback" , "tag" , "accelerator" , "index" ), &DisplayServer::global_menu_add_item, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL(Variant()), DEFVAL(Key::NONE), DEFVAL(-1)); |
| 586 | ClassDB::bind_method(D_METHOD("global_menu_add_check_item" , "menu_root" , "label" , "callback" , "key_callback" , "tag" , "accelerator" , "index" ), &DisplayServer::global_menu_add_check_item, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL(Variant()), DEFVAL(Key::NONE), DEFVAL(-1)); |
| 587 | ClassDB::bind_method(D_METHOD("global_menu_add_icon_item" , "menu_root" , "icon" , "label" , "callback" , "key_callback" , "tag" , "accelerator" , "index" ), &DisplayServer::global_menu_add_icon_item, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL(Variant()), DEFVAL(Key::NONE), DEFVAL(-1)); |
| 588 | ClassDB::bind_method(D_METHOD("global_menu_add_icon_check_item" , "menu_root" , "icon" , "label" , "callback" , "key_callback" , "tag" , "accelerator" , "index" ), &DisplayServer::global_menu_add_icon_check_item, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL(Variant()), DEFVAL(Key::NONE), DEFVAL(-1)); |
| 589 | ClassDB::bind_method(D_METHOD("global_menu_add_radio_check_item" , "menu_root" , "label" , "callback" , "key_callback" , "tag" , "accelerator" , "index" ), &DisplayServer::global_menu_add_radio_check_item, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL(Variant()), DEFVAL(Key::NONE), DEFVAL(-1)); |
| 590 | ClassDB::bind_method(D_METHOD("global_menu_add_icon_radio_check_item" , "menu_root" , "icon" , "label" , "callback" , "key_callback" , "tag" , "accelerator" , "index" ), &DisplayServer::global_menu_add_icon_radio_check_item, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL(Variant()), DEFVAL(Key::NONE), DEFVAL(-1)); |
| 591 | ClassDB::bind_method(D_METHOD("global_menu_add_multistate_item" , "menu_root" , "label" , "max_states" , "default_state" , "callback" , "key_callback" , "tag" , "accelerator" , "index" ), &DisplayServer::global_menu_add_multistate_item, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL(Variant()), DEFVAL(Key::NONE), DEFVAL(-1)); |
| 592 | ClassDB::bind_method(D_METHOD("global_menu_add_separator" , "menu_root" , "index" ), &DisplayServer::global_menu_add_separator, DEFVAL(-1)); |
| 593 | |
| 594 | ClassDB::bind_method(D_METHOD("global_menu_get_item_index_from_text" , "menu_root" , "text" ), &DisplayServer::global_menu_get_item_index_from_text); |
| 595 | ClassDB::bind_method(D_METHOD("global_menu_get_item_index_from_tag" , "menu_root" , "tag" ), &DisplayServer::global_menu_get_item_index_from_tag); |
| 596 | |
| 597 | ClassDB::bind_method(D_METHOD("global_menu_is_item_checked" , "menu_root" , "idx" ), &DisplayServer::global_menu_is_item_checked); |
| 598 | ClassDB::bind_method(D_METHOD("global_menu_is_item_checkable" , "menu_root" , "idx" ), &DisplayServer::global_menu_is_item_checkable); |
| 599 | ClassDB::bind_method(D_METHOD("global_menu_is_item_radio_checkable" , "menu_root" , "idx" ), &DisplayServer::global_menu_is_item_radio_checkable); |
| 600 | ClassDB::bind_method(D_METHOD("global_menu_get_item_callback" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_callback); |
| 601 | ClassDB::bind_method(D_METHOD("global_menu_get_item_key_callback" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_key_callback); |
| 602 | ClassDB::bind_method(D_METHOD("global_menu_get_item_tag" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_tag); |
| 603 | ClassDB::bind_method(D_METHOD("global_menu_get_item_text" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_text); |
| 604 | ClassDB::bind_method(D_METHOD("global_menu_get_item_submenu" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_submenu); |
| 605 | ClassDB::bind_method(D_METHOD("global_menu_get_item_accelerator" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_accelerator); |
| 606 | ClassDB::bind_method(D_METHOD("global_menu_is_item_disabled" , "menu_root" , "idx" ), &DisplayServer::global_menu_is_item_disabled); |
| 607 | ClassDB::bind_method(D_METHOD("global_menu_get_item_tooltip" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_tooltip); |
| 608 | ClassDB::bind_method(D_METHOD("global_menu_get_item_state" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_state); |
| 609 | ClassDB::bind_method(D_METHOD("global_menu_get_item_max_states" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_max_states); |
| 610 | ClassDB::bind_method(D_METHOD("global_menu_get_item_icon" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_icon); |
| 611 | ClassDB::bind_method(D_METHOD("global_menu_get_item_indentation_level" , "menu_root" , "idx" ), &DisplayServer::global_menu_get_item_indentation_level); |
| 612 | |
| 613 | ClassDB::bind_method(D_METHOD("global_menu_set_item_checked" , "menu_root" , "idx" , "checked" ), &DisplayServer::global_menu_set_item_checked); |
| 614 | ClassDB::bind_method(D_METHOD("global_menu_set_item_checkable" , "menu_root" , "idx" , "checkable" ), &DisplayServer::global_menu_set_item_checkable); |
| 615 | ClassDB::bind_method(D_METHOD("global_menu_set_item_radio_checkable" , "menu_root" , "idx" , "checkable" ), &DisplayServer::global_menu_set_item_radio_checkable); |
| 616 | ClassDB::bind_method(D_METHOD("global_menu_set_item_callback" , "menu_root" , "idx" , "callback" ), &DisplayServer::global_menu_set_item_callback); |
| 617 | ClassDB::bind_method(D_METHOD("global_menu_set_item_key_callback" , "menu_root" , "idx" , "key_callback" ), &DisplayServer::global_menu_set_item_key_callback); |
| 618 | ClassDB::bind_method(D_METHOD("global_menu_set_item_tag" , "menu_root" , "idx" , "tag" ), &DisplayServer::global_menu_set_item_tag); |
| 619 | ClassDB::bind_method(D_METHOD("global_menu_set_item_text" , "menu_root" , "idx" , "text" ), &DisplayServer::global_menu_set_item_text); |
| 620 | ClassDB::bind_method(D_METHOD("global_menu_set_item_submenu" , "menu_root" , "idx" , "submenu" ), &DisplayServer::global_menu_set_item_submenu); |
| 621 | ClassDB::bind_method(D_METHOD("global_menu_set_item_accelerator" , "menu_root" , "idx" , "keycode" ), &DisplayServer::global_menu_set_item_accelerator); |
| 622 | ClassDB::bind_method(D_METHOD("global_menu_set_item_disabled" , "menu_root" , "idx" , "disabled" ), &DisplayServer::global_menu_set_item_disabled); |
| 623 | ClassDB::bind_method(D_METHOD("global_menu_set_item_tooltip" , "menu_root" , "idx" , "tooltip" ), &DisplayServer::global_menu_set_item_tooltip); |
| 624 | ClassDB::bind_method(D_METHOD("global_menu_set_item_state" , "menu_root" , "idx" , "state" ), &DisplayServer::global_menu_set_item_state); |
| 625 | ClassDB::bind_method(D_METHOD("global_menu_set_item_max_states" , "menu_root" , "idx" , "max_states" ), &DisplayServer::global_menu_set_item_max_states); |
| 626 | ClassDB::bind_method(D_METHOD("global_menu_set_item_icon" , "menu_root" , "idx" , "icon" ), &DisplayServer::global_menu_set_item_icon); |
| 627 | ClassDB::bind_method(D_METHOD("global_menu_set_item_indentation_level" , "menu_root" , "idx" , "level" ), &DisplayServer::global_menu_set_item_indentation_level); |
| 628 | |
| 629 | ClassDB::bind_method(D_METHOD("global_menu_get_item_count" , "menu_root" ), &DisplayServer::global_menu_get_item_count); |
| 630 | |
| 631 | ClassDB::bind_method(D_METHOD("global_menu_remove_item" , "menu_root" , "idx" ), &DisplayServer::global_menu_remove_item); |
| 632 | ClassDB::bind_method(D_METHOD("global_menu_clear" , "menu_root" ), &DisplayServer::global_menu_clear); |
| 633 | |
| 634 | ClassDB::bind_method(D_METHOD("tts_is_speaking" ), &DisplayServer::tts_is_speaking); |
| 635 | ClassDB::bind_method(D_METHOD("tts_is_paused" ), &DisplayServer::tts_is_paused); |
| 636 | ClassDB::bind_method(D_METHOD("tts_get_voices" ), &DisplayServer::tts_get_voices); |
| 637 | ClassDB::bind_method(D_METHOD("tts_get_voices_for_language" , "language" ), &DisplayServer::tts_get_voices_for_language); |
| 638 | |
| 639 | ClassDB::bind_method(D_METHOD("tts_speak" , "text" , "voice" , "volume" , "pitch" , "rate" , "utterance_id" , "interrupt" ), &DisplayServer::tts_speak, DEFVAL(50), DEFVAL(1.f), DEFVAL(1.f), DEFVAL(0), DEFVAL(false)); |
| 640 | ClassDB::bind_method(D_METHOD("tts_pause" ), &DisplayServer::tts_pause); |
| 641 | ClassDB::bind_method(D_METHOD("tts_resume" ), &DisplayServer::tts_resume); |
| 642 | ClassDB::bind_method(D_METHOD("tts_stop" ), &DisplayServer::tts_stop); |
| 643 | |
| 644 | ClassDB::bind_method(D_METHOD("tts_set_utterance_callback" , "event" , "callable" ), &DisplayServer::tts_set_utterance_callback); |
| 645 | ClassDB::bind_method(D_METHOD("_tts_post_utterance_event" , "event" , "id" , "char_pos" ), &DisplayServer::tts_post_utterance_event); |
| 646 | |
| 647 | ClassDB::bind_method(D_METHOD("is_dark_mode_supported" ), &DisplayServer::is_dark_mode_supported); |
| 648 | ClassDB::bind_method(D_METHOD("is_dark_mode" ), &DisplayServer::is_dark_mode); |
| 649 | ClassDB::bind_method(D_METHOD("get_accent_color" ), &DisplayServer::get_accent_color); |
| 650 | |
| 651 | ClassDB::bind_method(D_METHOD("mouse_set_mode" , "mouse_mode" ), &DisplayServer::mouse_set_mode); |
| 652 | ClassDB::bind_method(D_METHOD("mouse_get_mode" ), &DisplayServer::mouse_get_mode); |
| 653 | |
| 654 | ClassDB::bind_method(D_METHOD("warp_mouse" , "position" ), &DisplayServer::warp_mouse); |
| 655 | ClassDB::bind_method(D_METHOD("mouse_get_position" ), &DisplayServer::mouse_get_position); |
| 656 | ClassDB::bind_method(D_METHOD("mouse_get_button_state" ), &DisplayServer::mouse_get_button_state); |
| 657 | |
| 658 | ClassDB::bind_method(D_METHOD("clipboard_set" , "clipboard" ), &DisplayServer::clipboard_set); |
| 659 | ClassDB::bind_method(D_METHOD("clipboard_get" ), &DisplayServer::clipboard_get); |
| 660 | ClassDB::bind_method(D_METHOD("clipboard_get_image" ), &DisplayServer::clipboard_get_image); |
| 661 | ClassDB::bind_method(D_METHOD("clipboard_has" ), &DisplayServer::clipboard_has); |
| 662 | ClassDB::bind_method(D_METHOD("clipboard_has_image" ), &DisplayServer::clipboard_has_image); |
| 663 | ClassDB::bind_method(D_METHOD("clipboard_set_primary" , "clipboard_primary" ), &DisplayServer::clipboard_set_primary); |
| 664 | ClassDB::bind_method(D_METHOD("clipboard_get_primary" ), &DisplayServer::clipboard_get_primary); |
| 665 | |
| 666 | ClassDB::bind_method(D_METHOD("get_display_cutouts" ), &DisplayServer::get_display_cutouts); |
| 667 | ClassDB::bind_method(D_METHOD("get_display_safe_area" ), &DisplayServer::get_display_safe_area); |
| 668 | |
| 669 | ClassDB::bind_method(D_METHOD("get_screen_count" ), &DisplayServer::get_screen_count); |
| 670 | ClassDB::bind_method(D_METHOD("get_primary_screen" ), &DisplayServer::get_primary_screen); |
| 671 | ClassDB::bind_method(D_METHOD("get_keyboard_focus_screen" ), &DisplayServer::get_keyboard_focus_screen); |
| 672 | ClassDB::bind_method(D_METHOD("get_screen_from_rect" , "rect" ), &DisplayServer::get_screen_from_rect); |
| 673 | ClassDB::bind_method(D_METHOD("screen_get_position" , "screen" ), &DisplayServer::screen_get_position, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 674 | ClassDB::bind_method(D_METHOD("screen_get_size" , "screen" ), &DisplayServer::screen_get_size, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 675 | ClassDB::bind_method(D_METHOD("screen_get_usable_rect" , "screen" ), &DisplayServer::screen_get_usable_rect, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 676 | ClassDB::bind_method(D_METHOD("screen_get_dpi" , "screen" ), &DisplayServer::screen_get_dpi, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 677 | ClassDB::bind_method(D_METHOD("screen_get_scale" , "screen" ), &DisplayServer::screen_get_scale, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 678 | ClassDB::bind_method(D_METHOD("is_touchscreen_available" ), &DisplayServer::is_touchscreen_available, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 679 | ClassDB::bind_method(D_METHOD("screen_get_max_scale" ), &DisplayServer::screen_get_max_scale); |
| 680 | ClassDB::bind_method(D_METHOD("screen_get_refresh_rate" , "screen" ), &DisplayServer::screen_get_refresh_rate, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 681 | ClassDB::bind_method(D_METHOD("screen_get_pixel" , "position" ), &DisplayServer::screen_get_pixel); |
| 682 | ClassDB::bind_method(D_METHOD("screen_get_image" , "screen" ), &DisplayServer::screen_get_image, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 683 | |
| 684 | ClassDB::bind_method(D_METHOD("screen_set_orientation" , "orientation" , "screen" ), &DisplayServer::screen_set_orientation, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 685 | ClassDB::bind_method(D_METHOD("screen_get_orientation" , "screen" ), &DisplayServer::screen_get_orientation, DEFVAL(SCREEN_OF_MAIN_WINDOW)); |
| 686 | |
| 687 | ClassDB::bind_method(D_METHOD("screen_set_keep_on" , "enable" ), &DisplayServer::screen_set_keep_on); |
| 688 | ClassDB::bind_method(D_METHOD("screen_is_kept_on" ), &DisplayServer::screen_is_kept_on); |
| 689 | |
| 690 | ClassDB::bind_method(D_METHOD("get_window_list" ), &DisplayServer::get_window_list); |
| 691 | ClassDB::bind_method(D_METHOD("get_window_at_screen_position" , "position" ), &DisplayServer::get_window_at_screen_position); |
| 692 | |
| 693 | ClassDB::bind_method(D_METHOD("window_get_native_handle" , "handle_type" , "window_id" ), &DisplayServer::window_get_native_handle, DEFVAL(MAIN_WINDOW_ID)); |
| 694 | ClassDB::bind_method(D_METHOD("window_get_active_popup" ), &DisplayServer::window_get_active_popup); |
| 695 | ClassDB::bind_method(D_METHOD("window_set_popup_safe_rect" , "window" , "rect" ), &DisplayServer::window_set_popup_safe_rect); |
| 696 | ClassDB::bind_method(D_METHOD("window_get_popup_safe_rect" , "window" ), &DisplayServer::window_get_popup_safe_rect); |
| 697 | |
| 698 | ClassDB::bind_method(D_METHOD("window_set_title" , "title" , "window_id" ), &DisplayServer::window_set_title, DEFVAL(MAIN_WINDOW_ID)); |
| 699 | ClassDB::bind_method(D_METHOD("window_set_mouse_passthrough" , "region" , "window_id" ), &DisplayServer::window_set_mouse_passthrough, DEFVAL(MAIN_WINDOW_ID)); |
| 700 | |
| 701 | ClassDB::bind_method(D_METHOD("window_get_current_screen" , "window_id" ), &DisplayServer::window_get_current_screen, DEFVAL(MAIN_WINDOW_ID)); |
| 702 | ClassDB::bind_method(D_METHOD("window_set_current_screen" , "screen" , "window_id" ), &DisplayServer::window_set_current_screen, DEFVAL(MAIN_WINDOW_ID)); |
| 703 | |
| 704 | ClassDB::bind_method(D_METHOD("window_get_position" , "window_id" ), &DisplayServer::window_get_position, DEFVAL(MAIN_WINDOW_ID)); |
| 705 | ClassDB::bind_method(D_METHOD("window_get_position_with_decorations" , "window_id" ), &DisplayServer::window_get_position_with_decorations, DEFVAL(MAIN_WINDOW_ID)); |
| 706 | ClassDB::bind_method(D_METHOD("window_set_position" , "position" , "window_id" ), &DisplayServer::window_set_position, DEFVAL(MAIN_WINDOW_ID)); |
| 707 | |
| 708 | ClassDB::bind_method(D_METHOD("window_get_size" , "window_id" ), &DisplayServer::window_get_size, DEFVAL(MAIN_WINDOW_ID)); |
| 709 | ClassDB::bind_method(D_METHOD("window_set_size" , "size" , "window_id" ), &DisplayServer::window_set_size, DEFVAL(MAIN_WINDOW_ID)); |
| 710 | ClassDB::bind_method(D_METHOD("window_set_rect_changed_callback" , "callback" , "window_id" ), &DisplayServer::window_set_rect_changed_callback, DEFVAL(MAIN_WINDOW_ID)); |
| 711 | ClassDB::bind_method(D_METHOD("window_set_window_event_callback" , "callback" , "window_id" ), &DisplayServer::window_set_window_event_callback, DEFVAL(MAIN_WINDOW_ID)); |
| 712 | ClassDB::bind_method(D_METHOD("window_set_input_event_callback" , "callback" , "window_id" ), &DisplayServer::window_set_input_event_callback, DEFVAL(MAIN_WINDOW_ID)); |
| 713 | ClassDB::bind_method(D_METHOD("window_set_input_text_callback" , "callback" , "window_id" ), &DisplayServer::window_set_input_text_callback, DEFVAL(MAIN_WINDOW_ID)); |
| 714 | ClassDB::bind_method(D_METHOD("window_set_drop_files_callback" , "callback" , "window_id" ), &DisplayServer::window_set_drop_files_callback, DEFVAL(MAIN_WINDOW_ID)); |
| 715 | |
| 716 | ClassDB::bind_method(D_METHOD("window_get_attached_instance_id" , "window_id" ), &DisplayServer::window_get_attached_instance_id, DEFVAL(MAIN_WINDOW_ID)); |
| 717 | |
| 718 | ClassDB::bind_method(D_METHOD("window_get_max_size" , "window_id" ), &DisplayServer::window_get_max_size, DEFVAL(MAIN_WINDOW_ID)); |
| 719 | ClassDB::bind_method(D_METHOD("window_set_max_size" , "max_size" , "window_id" ), &DisplayServer::window_set_max_size, DEFVAL(MAIN_WINDOW_ID)); |
| 720 | |
| 721 | ClassDB::bind_method(D_METHOD("window_get_min_size" , "window_id" ), &DisplayServer::window_get_min_size, DEFVAL(MAIN_WINDOW_ID)); |
| 722 | ClassDB::bind_method(D_METHOD("window_set_min_size" , "min_size" , "window_id" ), &DisplayServer::window_set_min_size, DEFVAL(MAIN_WINDOW_ID)); |
| 723 | |
| 724 | ClassDB::bind_method(D_METHOD("window_get_size_with_decorations" , "window_id" ), &DisplayServer::window_get_size_with_decorations, DEFVAL(MAIN_WINDOW_ID)); |
| 725 | |
| 726 | ClassDB::bind_method(D_METHOD("window_get_mode" , "window_id" ), &DisplayServer::window_get_mode, DEFVAL(MAIN_WINDOW_ID)); |
| 727 | ClassDB::bind_method(D_METHOD("window_set_mode" , "mode" , "window_id" ), &DisplayServer::window_set_mode, DEFVAL(MAIN_WINDOW_ID)); |
| 728 | |
| 729 | ClassDB::bind_method(D_METHOD("window_set_flag" , "flag" , "enabled" , "window_id" ), &DisplayServer::window_set_flag, DEFVAL(MAIN_WINDOW_ID)); |
| 730 | ClassDB::bind_method(D_METHOD("window_get_flag" , "flag" , "window_id" ), &DisplayServer::window_get_flag, DEFVAL(MAIN_WINDOW_ID)); |
| 731 | |
| 732 | ClassDB::bind_method(D_METHOD("window_set_window_buttons_offset" , "offset" , "window_id" ), &DisplayServer::window_set_window_buttons_offset, DEFVAL(MAIN_WINDOW_ID)); |
| 733 | ClassDB::bind_method(D_METHOD("window_get_safe_title_margins" , "window_id" ), &DisplayServer::window_get_safe_title_margins, DEFVAL(MAIN_WINDOW_ID)); |
| 734 | |
| 735 | ClassDB::bind_method(D_METHOD("window_request_attention" , "window_id" ), &DisplayServer::window_request_attention, DEFVAL(MAIN_WINDOW_ID)); |
| 736 | |
| 737 | ClassDB::bind_method(D_METHOD("window_move_to_foreground" , "window_id" ), &DisplayServer::window_move_to_foreground, DEFVAL(MAIN_WINDOW_ID)); |
| 738 | ClassDB::bind_method(D_METHOD("window_is_focused" , "window_id" ), &DisplayServer::window_is_focused, DEFVAL(MAIN_WINDOW_ID)); |
| 739 | ClassDB::bind_method(D_METHOD("window_can_draw" , "window_id" ), &DisplayServer::window_can_draw, DEFVAL(MAIN_WINDOW_ID)); |
| 740 | |
| 741 | ClassDB::bind_method(D_METHOD("window_set_transient" , "window_id" , "parent_window_id" ), &DisplayServer::window_set_transient); |
| 742 | ClassDB::bind_method(D_METHOD("window_set_exclusive" , "window_id" , "exclusive" ), &DisplayServer::window_set_exclusive); |
| 743 | |
| 744 | ClassDB::bind_method(D_METHOD("window_set_ime_active" , "active" , "window_id" ), &DisplayServer::window_set_ime_active, DEFVAL(MAIN_WINDOW_ID)); |
| 745 | ClassDB::bind_method(D_METHOD("window_set_ime_position" , "position" , "window_id" ), &DisplayServer::window_set_ime_position, DEFVAL(MAIN_WINDOW_ID)); |
| 746 | |
| 747 | ClassDB::bind_method(D_METHOD("window_set_vsync_mode" , "vsync_mode" , "window_id" ), &DisplayServer::window_set_vsync_mode, DEFVAL(MAIN_WINDOW_ID)); |
| 748 | ClassDB::bind_method(D_METHOD("window_get_vsync_mode" , "window_id" ), &DisplayServer::window_get_vsync_mode, DEFVAL(MAIN_WINDOW_ID)); |
| 749 | |
| 750 | ClassDB::bind_method(D_METHOD("window_is_maximize_allowed" , "window_id" ), &DisplayServer::window_is_maximize_allowed, DEFVAL(MAIN_WINDOW_ID)); |
| 751 | ClassDB::bind_method(D_METHOD("window_maximize_on_title_dbl_click" ), &DisplayServer::window_maximize_on_title_dbl_click); |
| 752 | ClassDB::bind_method(D_METHOD("window_minimize_on_title_dbl_click" ), &DisplayServer::window_minimize_on_title_dbl_click); |
| 753 | |
| 754 | ClassDB::bind_method(D_METHOD("ime_get_selection" ), &DisplayServer::ime_get_selection); |
| 755 | ClassDB::bind_method(D_METHOD("ime_get_text" ), &DisplayServer::ime_get_text); |
| 756 | |
| 757 | ClassDB::bind_method(D_METHOD("virtual_keyboard_show" , "existing_text" , "position" , "type" , "max_length" , "cursor_start" , "cursor_end" ), &DisplayServer::virtual_keyboard_show, DEFVAL(Rect2()), DEFVAL(KEYBOARD_TYPE_DEFAULT), DEFVAL(-1), DEFVAL(-1), DEFVAL(-1)); |
| 758 | ClassDB::bind_method(D_METHOD("virtual_keyboard_hide" ), &DisplayServer::virtual_keyboard_hide); |
| 759 | |
| 760 | ClassDB::bind_method(D_METHOD("virtual_keyboard_get_height" ), &DisplayServer::virtual_keyboard_get_height); |
| 761 | |
| 762 | ClassDB::bind_method(D_METHOD("cursor_set_shape" , "shape" ), &DisplayServer::cursor_set_shape); |
| 763 | ClassDB::bind_method(D_METHOD("cursor_get_shape" ), &DisplayServer::cursor_get_shape); |
| 764 | ClassDB::bind_method(D_METHOD("cursor_set_custom_image" , "cursor" , "shape" , "hotspot" ), &DisplayServer::cursor_set_custom_image, DEFVAL(CURSOR_ARROW), DEFVAL(Vector2())); |
| 765 | |
| 766 | ClassDB::bind_method(D_METHOD("get_swap_cancel_ok" ), &DisplayServer::get_swap_cancel_ok); |
| 767 | |
| 768 | ClassDB::bind_method(D_METHOD("enable_for_stealing_focus" , "process_id" ), &DisplayServer::enable_for_stealing_focus); |
| 769 | |
| 770 | ClassDB::bind_method(D_METHOD("dialog_show" , "title" , "description" , "buttons" , "callback" ), &DisplayServer::dialog_show); |
| 771 | ClassDB::bind_method(D_METHOD("dialog_input_text" , "title" , "description" , "existing_text" , "callback" ), &DisplayServer::dialog_input_text); |
| 772 | |
| 773 | ClassDB::bind_method(D_METHOD("file_dialog_show" , "title" , "current_directory" , "filename" , "show_hidden" , "mode" , "filters" , "callback" ), &DisplayServer::file_dialog_show); |
| 774 | |
| 775 | ClassDB::bind_method(D_METHOD("keyboard_get_layout_count" ), &DisplayServer::keyboard_get_layout_count); |
| 776 | ClassDB::bind_method(D_METHOD("keyboard_get_current_layout" ), &DisplayServer::keyboard_get_current_layout); |
| 777 | ClassDB::bind_method(D_METHOD("keyboard_set_current_layout" , "index" ), &DisplayServer::keyboard_set_current_layout); |
| 778 | ClassDB::bind_method(D_METHOD("keyboard_get_layout_language" , "index" ), &DisplayServer::keyboard_get_layout_language); |
| 779 | ClassDB::bind_method(D_METHOD("keyboard_get_layout_name" , "index" ), &DisplayServer::keyboard_get_layout_name); |
| 780 | ClassDB::bind_method(D_METHOD("keyboard_get_keycode_from_physical" , "keycode" ), &DisplayServer::keyboard_get_keycode_from_physical); |
| 781 | ClassDB::bind_method(D_METHOD("keyboard_get_label_from_physical" , "keycode" ), &DisplayServer::keyboard_get_label_from_physical); |
| 782 | |
| 783 | ClassDB::bind_method(D_METHOD("process_events" ), &DisplayServer::process_events); |
| 784 | ClassDB::bind_method(D_METHOD("force_process_and_drop_events" ), &DisplayServer::force_process_and_drop_events); |
| 785 | |
| 786 | ClassDB::bind_method(D_METHOD("set_native_icon" , "filename" ), &DisplayServer::set_native_icon); |
| 787 | ClassDB::bind_method(D_METHOD("set_icon" , "image" ), &DisplayServer::set_icon); |
| 788 | |
| 789 | ClassDB::bind_method(D_METHOD("tablet_get_driver_count" ), &DisplayServer::tablet_get_driver_count); |
| 790 | ClassDB::bind_method(D_METHOD("tablet_get_driver_name" , "idx" ), &DisplayServer::tablet_get_driver_name); |
| 791 | ClassDB::bind_method(D_METHOD("tablet_get_current_driver" ), &DisplayServer::tablet_get_current_driver); |
| 792 | ClassDB::bind_method(D_METHOD("tablet_set_current_driver" , "name" ), &DisplayServer::tablet_set_current_driver); |
| 793 | |
| 794 | BIND_ENUM_CONSTANT(FEATURE_GLOBAL_MENU); |
| 795 | BIND_ENUM_CONSTANT(FEATURE_SUBWINDOWS); |
| 796 | BIND_ENUM_CONSTANT(FEATURE_TOUCHSCREEN); |
| 797 | BIND_ENUM_CONSTANT(FEATURE_MOUSE); |
| 798 | BIND_ENUM_CONSTANT(FEATURE_MOUSE_WARP); |
| 799 | BIND_ENUM_CONSTANT(FEATURE_CLIPBOARD); |
| 800 | BIND_ENUM_CONSTANT(FEATURE_VIRTUAL_KEYBOARD); |
| 801 | BIND_ENUM_CONSTANT(FEATURE_CURSOR_SHAPE); |
| 802 | BIND_ENUM_CONSTANT(FEATURE_CUSTOM_CURSOR_SHAPE); |
| 803 | BIND_ENUM_CONSTANT(FEATURE_NATIVE_DIALOG); |
| 804 | BIND_ENUM_CONSTANT(FEATURE_IME); |
| 805 | BIND_ENUM_CONSTANT(FEATURE_WINDOW_TRANSPARENCY); |
| 806 | BIND_ENUM_CONSTANT(FEATURE_HIDPI); |
| 807 | BIND_ENUM_CONSTANT(FEATURE_ICON); |
| 808 | BIND_ENUM_CONSTANT(FEATURE_NATIVE_ICON); |
| 809 | BIND_ENUM_CONSTANT(FEATURE_ORIENTATION); |
| 810 | BIND_ENUM_CONSTANT(FEATURE_SWAP_BUFFERS); |
| 811 | BIND_ENUM_CONSTANT(FEATURE_CLIPBOARD_PRIMARY); |
| 812 | BIND_ENUM_CONSTANT(FEATURE_TEXT_TO_SPEECH); |
| 813 | BIND_ENUM_CONSTANT(FEATURE_EXTEND_TO_TITLE); |
| 814 | BIND_ENUM_CONSTANT(FEATURE_SCREEN_CAPTURE); |
| 815 | |
| 816 | BIND_ENUM_CONSTANT(MOUSE_MODE_VISIBLE); |
| 817 | BIND_ENUM_CONSTANT(MOUSE_MODE_HIDDEN); |
| 818 | BIND_ENUM_CONSTANT(MOUSE_MODE_CAPTURED); |
| 819 | BIND_ENUM_CONSTANT(MOUSE_MODE_CONFINED); |
| 820 | BIND_ENUM_CONSTANT(MOUSE_MODE_CONFINED_HIDDEN); |
| 821 | |
| 822 | BIND_CONSTANT(SCREEN_WITH_MOUSE_FOCUS); |
| 823 | BIND_CONSTANT(SCREEN_WITH_KEYBOARD_FOCUS); |
| 824 | BIND_CONSTANT(SCREEN_PRIMARY); |
| 825 | BIND_CONSTANT(SCREEN_OF_MAIN_WINDOW); |
| 826 | |
| 827 | BIND_CONSTANT(MAIN_WINDOW_ID); |
| 828 | BIND_CONSTANT(INVALID_WINDOW_ID); |
| 829 | |
| 830 | BIND_ENUM_CONSTANT(SCREEN_LANDSCAPE); |
| 831 | BIND_ENUM_CONSTANT(SCREEN_PORTRAIT); |
| 832 | BIND_ENUM_CONSTANT(SCREEN_REVERSE_LANDSCAPE); |
| 833 | BIND_ENUM_CONSTANT(SCREEN_REVERSE_PORTRAIT); |
| 834 | BIND_ENUM_CONSTANT(SCREEN_SENSOR_LANDSCAPE); |
| 835 | BIND_ENUM_CONSTANT(SCREEN_SENSOR_PORTRAIT); |
| 836 | BIND_ENUM_CONSTANT(SCREEN_SENSOR); |
| 837 | |
| 838 | BIND_ENUM_CONSTANT(KEYBOARD_TYPE_DEFAULT); |
| 839 | BIND_ENUM_CONSTANT(KEYBOARD_TYPE_MULTILINE); |
| 840 | BIND_ENUM_CONSTANT(KEYBOARD_TYPE_NUMBER); |
| 841 | BIND_ENUM_CONSTANT(KEYBOARD_TYPE_NUMBER_DECIMAL); |
| 842 | BIND_ENUM_CONSTANT(KEYBOARD_TYPE_PHONE); |
| 843 | BIND_ENUM_CONSTANT(KEYBOARD_TYPE_EMAIL_ADDRESS); |
| 844 | BIND_ENUM_CONSTANT(KEYBOARD_TYPE_PASSWORD); |
| 845 | BIND_ENUM_CONSTANT(KEYBOARD_TYPE_URL); |
| 846 | |
| 847 | BIND_ENUM_CONSTANT(CURSOR_ARROW); |
| 848 | BIND_ENUM_CONSTANT(CURSOR_IBEAM); |
| 849 | BIND_ENUM_CONSTANT(CURSOR_POINTING_HAND); |
| 850 | BIND_ENUM_CONSTANT(CURSOR_CROSS); |
| 851 | BIND_ENUM_CONSTANT(CURSOR_WAIT); |
| 852 | BIND_ENUM_CONSTANT(CURSOR_BUSY); |
| 853 | BIND_ENUM_CONSTANT(CURSOR_DRAG); |
| 854 | BIND_ENUM_CONSTANT(CURSOR_CAN_DROP); |
| 855 | BIND_ENUM_CONSTANT(CURSOR_FORBIDDEN); |
| 856 | BIND_ENUM_CONSTANT(CURSOR_VSIZE); |
| 857 | BIND_ENUM_CONSTANT(CURSOR_HSIZE); |
| 858 | BIND_ENUM_CONSTANT(CURSOR_BDIAGSIZE); |
| 859 | BIND_ENUM_CONSTANT(CURSOR_FDIAGSIZE); |
| 860 | BIND_ENUM_CONSTANT(CURSOR_MOVE); |
| 861 | BIND_ENUM_CONSTANT(CURSOR_VSPLIT); |
| 862 | BIND_ENUM_CONSTANT(CURSOR_HSPLIT); |
| 863 | BIND_ENUM_CONSTANT(CURSOR_HELP); |
| 864 | BIND_ENUM_CONSTANT(CURSOR_MAX); |
| 865 | |
| 866 | BIND_ENUM_CONSTANT(FILE_DIALOG_MODE_OPEN_FILE); |
| 867 | BIND_ENUM_CONSTANT(FILE_DIALOG_MODE_OPEN_FILES); |
| 868 | BIND_ENUM_CONSTANT(FILE_DIALOG_MODE_OPEN_DIR); |
| 869 | BIND_ENUM_CONSTANT(FILE_DIALOG_MODE_OPEN_ANY); |
| 870 | BIND_ENUM_CONSTANT(FILE_DIALOG_MODE_SAVE_FILE); |
| 871 | |
| 872 | BIND_ENUM_CONSTANT(WINDOW_MODE_WINDOWED); |
| 873 | BIND_ENUM_CONSTANT(WINDOW_MODE_MINIMIZED); |
| 874 | BIND_ENUM_CONSTANT(WINDOW_MODE_MAXIMIZED); |
| 875 | BIND_ENUM_CONSTANT(WINDOW_MODE_FULLSCREEN); |
| 876 | BIND_ENUM_CONSTANT(WINDOW_MODE_EXCLUSIVE_FULLSCREEN); |
| 877 | |
| 878 | BIND_ENUM_CONSTANT(WINDOW_FLAG_RESIZE_DISABLED); |
| 879 | BIND_ENUM_CONSTANT(WINDOW_FLAG_BORDERLESS); |
| 880 | BIND_ENUM_CONSTANT(WINDOW_FLAG_ALWAYS_ON_TOP); |
| 881 | BIND_ENUM_CONSTANT(WINDOW_FLAG_TRANSPARENT); |
| 882 | BIND_ENUM_CONSTANT(WINDOW_FLAG_NO_FOCUS); |
| 883 | BIND_ENUM_CONSTANT(WINDOW_FLAG_POPUP); |
| 884 | BIND_ENUM_CONSTANT(WINDOW_FLAG_EXTEND_TO_TITLE); |
| 885 | BIND_ENUM_CONSTANT(WINDOW_FLAG_MOUSE_PASSTHROUGH); |
| 886 | BIND_ENUM_CONSTANT(WINDOW_FLAG_MAX); |
| 887 | |
| 888 | BIND_ENUM_CONSTANT(WINDOW_EVENT_MOUSE_ENTER); |
| 889 | BIND_ENUM_CONSTANT(WINDOW_EVENT_MOUSE_EXIT); |
| 890 | BIND_ENUM_CONSTANT(WINDOW_EVENT_FOCUS_IN); |
| 891 | BIND_ENUM_CONSTANT(WINDOW_EVENT_FOCUS_OUT); |
| 892 | BIND_ENUM_CONSTANT(WINDOW_EVENT_CLOSE_REQUEST); |
| 893 | BIND_ENUM_CONSTANT(WINDOW_EVENT_GO_BACK_REQUEST); |
| 894 | BIND_ENUM_CONSTANT(WINDOW_EVENT_DPI_CHANGE); |
| 895 | BIND_ENUM_CONSTANT(WINDOW_EVENT_TITLEBAR_CHANGE); |
| 896 | |
| 897 | BIND_ENUM_CONSTANT(VSYNC_DISABLED); |
| 898 | BIND_ENUM_CONSTANT(VSYNC_ENABLED); |
| 899 | BIND_ENUM_CONSTANT(VSYNC_ADAPTIVE); |
| 900 | BIND_ENUM_CONSTANT(VSYNC_MAILBOX); |
| 901 | |
| 902 | BIND_ENUM_CONSTANT(DISPLAY_HANDLE); |
| 903 | BIND_ENUM_CONSTANT(WINDOW_HANDLE); |
| 904 | BIND_ENUM_CONSTANT(WINDOW_VIEW); |
| 905 | BIND_ENUM_CONSTANT(OPENGL_CONTEXT); |
| 906 | |
| 907 | BIND_ENUM_CONSTANT(TTS_UTTERANCE_STARTED); |
| 908 | BIND_ENUM_CONSTANT(TTS_UTTERANCE_ENDED); |
| 909 | BIND_ENUM_CONSTANT(TTS_UTTERANCE_CANCELED); |
| 910 | BIND_ENUM_CONSTANT(TTS_UTTERANCE_BOUNDARY); |
| 911 | } |
| 912 | |
| 913 | void DisplayServer::register_create_function(const char *p_name, CreateFunction p_function, GetRenderingDriversFunction p_get_drivers) { |
| 914 | ERR_FAIL_COND(server_create_count == MAX_SERVERS); |
| 915 | // Headless display server is always last |
| 916 | server_create_functions[server_create_count] = server_create_functions[server_create_count - 1]; |
| 917 | server_create_functions[server_create_count - 1].name = p_name; |
| 918 | server_create_functions[server_create_count - 1].create_function = p_function; |
| 919 | server_create_functions[server_create_count - 1].get_rendering_drivers_function = p_get_drivers; |
| 920 | server_create_count++; |
| 921 | } |
| 922 | |
| 923 | int DisplayServer::get_create_function_count() { |
| 924 | return server_create_count; |
| 925 | } |
| 926 | |
| 927 | const char *DisplayServer::get_create_function_name(int p_index) { |
| 928 | ERR_FAIL_INDEX_V(p_index, server_create_count, nullptr); |
| 929 | return server_create_functions[p_index].name; |
| 930 | } |
| 931 | |
| 932 | Vector<String> DisplayServer::get_create_function_rendering_drivers(int p_index) { |
| 933 | ERR_FAIL_INDEX_V(p_index, server_create_count, Vector<String>()); |
| 934 | return server_create_functions[p_index].get_rendering_drivers_function(); |
| 935 | } |
| 936 | |
| 937 | DisplayServer *DisplayServer::create(int p_index, 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, Error &r_error) { |
| 938 | ERR_FAIL_INDEX_V(p_index, server_create_count, nullptr); |
| 939 | return server_create_functions[p_index].create_function(p_rendering_driver, p_mode, p_vsync_mode, p_flags, p_position, p_resolution, p_screen, r_error); |
| 940 | } |
| 941 | |
| 942 | void DisplayServer::_input_set_mouse_mode(Input::MouseMode p_mode) { |
| 943 | singleton->mouse_set_mode(MouseMode(p_mode)); |
| 944 | } |
| 945 | |
| 946 | Input::MouseMode DisplayServer::_input_get_mouse_mode() { |
| 947 | return Input::MouseMode(singleton->mouse_get_mode()); |
| 948 | } |
| 949 | |
| 950 | void DisplayServer::_input_warp(const Vector2 &p_to_pos) { |
| 951 | singleton->warp_mouse(p_to_pos); |
| 952 | } |
| 953 | |
| 954 | Input::CursorShape DisplayServer::_input_get_current_cursor_shape() { |
| 955 | return (Input::CursorShape)singleton->cursor_get_shape(); |
| 956 | } |
| 957 | |
| 958 | void DisplayServer::_input_set_custom_mouse_cursor_func(const Ref<Resource> &p_image, Input::CursorShape p_shape, const Vector2 &p_hostspot) { |
| 959 | singleton->cursor_set_custom_image(p_image, (CursorShape)p_shape, p_hostspot); |
| 960 | } |
| 961 | |
| 962 | DisplayServer::DisplayServer() { |
| 963 | singleton = this; |
| 964 | Input::set_mouse_mode_func = _input_set_mouse_mode; |
| 965 | Input::get_mouse_mode_func = _input_get_mouse_mode; |
| 966 | Input::warp_mouse_func = _input_warp; |
| 967 | Input::get_current_cursor_shape_func = _input_get_current_cursor_shape; |
| 968 | Input::set_custom_mouse_cursor_func = _input_set_custom_mouse_cursor_func; |
| 969 | } |
| 970 | |
| 971 | DisplayServer::~DisplayServer() { |
| 972 | singleton = nullptr; |
| 973 | } |
| 974 | |