1 | /**************************************************************************/ |
2 | /* display_server_headless.h */ |
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 | #ifndef DISPLAY_SERVER_HEADLESS_H |
32 | #define DISPLAY_SERVER_HEADLESS_H |
33 | |
34 | #include "servers/display_server.h" |
35 | |
36 | #include "servers/rendering/dummy/rasterizer_dummy.h" |
37 | |
38 | class DisplayServerHeadless : public DisplayServer { |
39 | private: |
40 | friend class DisplayServer; |
41 | |
42 | static Vector<String> get_rendering_drivers_func() { |
43 | Vector<String> drivers; |
44 | drivers.push_back("dummy" ); |
45 | return drivers; |
46 | } |
47 | |
48 | static DisplayServer *create_func(const String &p_rendering_driver, DisplayServer::WindowMode p_mode, DisplayServer::VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i *p_position, const Vector2i &p_resolution, int p_screen, Error &r_error) { |
49 | r_error = OK; |
50 | RasterizerDummy::make_current(); |
51 | return memnew(DisplayServerHeadless()); |
52 | } |
53 | |
54 | public: |
55 | bool has_feature(Feature p_feature) const override { return false; } |
56 | String get_name() const override { return "headless" ; } |
57 | |
58 | int get_screen_count() const override { return 0; } |
59 | int get_primary_screen() const override { return 0; }; |
60 | Point2i screen_get_position(int p_screen = SCREEN_OF_MAIN_WINDOW) const override { return Point2i(); } |
61 | Size2i screen_get_size(int p_screen = SCREEN_OF_MAIN_WINDOW) const override { return Size2i(); } |
62 | Rect2i screen_get_usable_rect(int p_screen = SCREEN_OF_MAIN_WINDOW) const override { return Rect2i(); } |
63 | int screen_get_dpi(int p_screen = SCREEN_OF_MAIN_WINDOW) const override { return 96; /* 0 might cause issues */ } |
64 | float screen_get_scale(int p_screen = SCREEN_OF_MAIN_WINDOW) const override { return 1; } |
65 | float screen_get_max_scale() const override { return 1; } |
66 | float screen_get_refresh_rate(int p_screen = SCREEN_OF_MAIN_WINDOW) const override { return SCREEN_REFRESH_RATE_FALLBACK; } |
67 | |
68 | Vector<DisplayServer::WindowID> get_window_list() const override { return Vector<DisplayServer::WindowID>(); } |
69 | |
70 | WindowID create_sub_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect = Rect2i()) override { return 0; } |
71 | void show_window(WindowID p_id) override {} |
72 | void delete_sub_window(WindowID p_id) override {} |
73 | |
74 | WindowID get_window_at_screen_position(const Point2i &p_position) const override { return 0; } |
75 | |
76 | void window_attach_instance_id(ObjectID p_instance, WindowID p_window = MAIN_WINDOW_ID) override {} |
77 | ObjectID window_get_attached_instance_id(WindowID p_window = MAIN_WINDOW_ID) const override { return ObjectID(); } |
78 | |
79 | void window_set_rect_changed_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} |
80 | |
81 | void window_set_window_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} |
82 | void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} |
83 | void window_set_input_text_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} |
84 | void window_set_drop_files_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} |
85 | |
86 | void window_set_title(const String &p_title, WindowID p_window = MAIN_WINDOW_ID) override {} |
87 | |
88 | void window_set_mouse_passthrough(const Vector<Vector2> &p_region, WindowID p_window = MAIN_WINDOW_ID) override {} |
89 | |
90 | int window_get_current_screen(WindowID p_window = MAIN_WINDOW_ID) const override { return -1; } |
91 | void window_set_current_screen(int p_screen, WindowID p_window = MAIN_WINDOW_ID) override {} |
92 | |
93 | Point2i window_get_position(WindowID p_window = MAIN_WINDOW_ID) const override { return Point2i(); } |
94 | Point2i window_get_position_with_decorations(WindowID p_window = MAIN_WINDOW_ID) const override { return Point2i(); } |
95 | void window_set_position(const Point2i &p_position, WindowID p_window = MAIN_WINDOW_ID) override {} |
96 | |
97 | void window_set_transient(WindowID p_window, WindowID p_parent) override {} |
98 | |
99 | void window_set_max_size(const Size2i p_size, WindowID p_window = MAIN_WINDOW_ID) override {} |
100 | Size2i window_get_max_size(WindowID p_window = MAIN_WINDOW_ID) const override { return Size2i(); } |
101 | |
102 | void window_set_min_size(const Size2i p_size, WindowID p_window = MAIN_WINDOW_ID) override {} |
103 | Size2i window_get_min_size(WindowID p_window = MAIN_WINDOW_ID) const override { return Size2i(); } |
104 | |
105 | void window_set_size(const Size2i p_size, WindowID p_window = MAIN_WINDOW_ID) override {} |
106 | Size2i window_get_size(WindowID p_window = MAIN_WINDOW_ID) const override { return Size2i(); } |
107 | Size2i window_get_size_with_decorations(WindowID p_window = MAIN_WINDOW_ID) const override { return Size2i(); } |
108 | |
109 | void window_set_mode(WindowMode p_mode, WindowID p_window = MAIN_WINDOW_ID) override {} |
110 | WindowMode window_get_mode(WindowID p_window = MAIN_WINDOW_ID) const override { return WINDOW_MODE_MINIMIZED; } |
111 | |
112 | void window_set_vsync_mode(VSyncMode p_vsync_mode, WindowID p_window = MAIN_WINDOW_ID) override {} |
113 | VSyncMode window_get_vsync_mode(WindowID p_window) const override { return VSyncMode::VSYNC_ENABLED; } |
114 | |
115 | bool window_is_maximize_allowed(WindowID p_window = MAIN_WINDOW_ID) const override { return false; } |
116 | |
117 | void window_set_flag(WindowFlags p_flag, bool p_enabled, WindowID p_window = MAIN_WINDOW_ID) override {} |
118 | bool window_get_flag(WindowFlags p_flag, WindowID p_window = MAIN_WINDOW_ID) const override { return false; } |
119 | |
120 | void window_request_attention(WindowID p_window = MAIN_WINDOW_ID) override {} |
121 | void window_move_to_foreground(WindowID p_window = MAIN_WINDOW_ID) override {} |
122 | bool window_is_focused(WindowID p_window = MAIN_WINDOW_ID) const override { return true; }; |
123 | |
124 | bool window_can_draw(WindowID p_window = MAIN_WINDOW_ID) const override { return false; } |
125 | |
126 | bool can_any_window_draw() const override { return false; } |
127 | |
128 | void window_set_ime_active(const bool p_active, WindowID p_window = MAIN_WINDOW_ID) override {} |
129 | void window_set_ime_position(const Point2i &p_pos, WindowID p_window = MAIN_WINDOW_ID) override {} |
130 | |
131 | void process_events() override {} |
132 | |
133 | void set_icon(const Ref<Image> &p_icon) override {} |
134 | |
135 | DisplayServerHeadless() {} |
136 | ~DisplayServerHeadless() {} |
137 | }; |
138 | |
139 | #endif // DISPLAY_SERVER_HEADLESS_H |
140 | |