Merge pull request #92806 from mihe/headless-input
Add input event callback to `DisplayServerHeadless`
This commit is contained in:
commit
d4fdf16353
2 changed files with 22 additions and 23 deletions
|
@ -51,7 +51,18 @@ private:
|
||||||
return memnew(DisplayServerHeadless());
|
return memnew(DisplayServerHeadless());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _dispatch_input_events(const Ref<InputEvent> &p_event) {
|
||||||
|
static_cast<DisplayServerHeadless *>(get_singleton())->_dispatch_input_event(p_event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _dispatch_input_event(const Ref<InputEvent> &p_event) {
|
||||||
|
if (input_event_callback.is_valid()) {
|
||||||
|
input_event_callback.call(p_event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NativeMenu *native_menu = nullptr;
|
NativeMenu *native_menu = nullptr;
|
||||||
|
Callable input_event_callback;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool has_feature(Feature p_feature) const override { return false; }
|
bool has_feature(Feature p_feature) const override { return false; }
|
||||||
|
@ -86,7 +97,11 @@ public:
|
||||||
void window_set_rect_changed_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
void window_set_rect_changed_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
||||||
|
|
||||||
void window_set_window_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
void window_set_window_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
||||||
void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
|
||||||
|
void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {
|
||||||
|
input_event_callback = p_callable;
|
||||||
|
}
|
||||||
|
|
||||||
void window_set_input_text_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
void window_set_input_text_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
||||||
void window_set_drop_files_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
void window_set_drop_files_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {}
|
||||||
|
|
||||||
|
@ -137,7 +152,9 @@ public:
|
||||||
|
|
||||||
int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const override { return 0; }
|
int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const override { return 0; }
|
||||||
|
|
||||||
void process_events() override {}
|
void process_events() override {
|
||||||
|
Input::get_singleton()->flush_buffered_events();
|
||||||
|
}
|
||||||
|
|
||||||
void set_native_icon(const String &p_filename) override {}
|
void set_native_icon(const String &p_filename) override {}
|
||||||
void set_icon(const Ref<Image> &p_icon) override {}
|
void set_icon(const Ref<Image> &p_icon) override {}
|
||||||
|
@ -179,7 +196,9 @@ public:
|
||||||
|
|
||||||
DisplayServerHeadless() {
|
DisplayServerHeadless() {
|
||||||
native_menu = memnew(NativeMenu);
|
native_menu = memnew(NativeMenu);
|
||||||
|
Input::get_singleton()->set_event_dispatch_function(_dispatch_input_events);
|
||||||
}
|
}
|
||||||
|
|
||||||
~DisplayServerHeadless() {
|
~DisplayServerHeadless() {
|
||||||
if (native_menu) {
|
if (native_menu) {
|
||||||
memdelete(native_menu);
|
memdelete(native_menu);
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include "servers/rendering/dummy/rasterizer_dummy.h"
|
#include "servers/rendering/dummy/rasterizer_dummy.h"
|
||||||
|
|
||||||
// Specialized DisplayServer for unittests based on DisplayServerHeadless, that
|
// Specialized DisplayServer for unittests based on DisplayServerHeadless, that
|
||||||
// additionally supports rudimentary InputEvent handling and mouse position.
|
// additionally supports things like mouse enter/exit events and clipboard.
|
||||||
class DisplayServerMock : public DisplayServerHeadless {
|
class DisplayServerMock : public DisplayServerHeadless {
|
||||||
private:
|
private:
|
||||||
friend class DisplayServer;
|
friend class DisplayServer;
|
||||||
|
@ -45,7 +45,6 @@ private:
|
||||||
CursorShape cursor_shape = CursorShape::CURSOR_ARROW;
|
CursorShape cursor_shape = CursorShape::CURSOR_ARROW;
|
||||||
bool window_over = false;
|
bool window_over = false;
|
||||||
Callable event_callback;
|
Callable event_callback;
|
||||||
Callable input_event_callback;
|
|
||||||
|
|
||||||
String clipboard_text;
|
String clipboard_text;
|
||||||
String primary_clipboard_text;
|
String primary_clipboard_text;
|
||||||
|
@ -62,16 +61,6 @@ private:
|
||||||
return memnew(DisplayServerMock());
|
return memnew(DisplayServerMock());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _dispatch_input_events(const Ref<InputEvent> &p_event) {
|
|
||||||
static_cast<DisplayServerMock *>(get_singleton())->_dispatch_input_event(p_event);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _dispatch_input_event(const Ref<InputEvent> &p_event) {
|
|
||||||
if (input_event_callback.is_valid()) {
|
|
||||||
input_event_callback.call(p_event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _set_mouse_position(const Point2i &p_position) {
|
void _set_mouse_position(const Point2i &p_position) {
|
||||||
if (mouse_position == p_position) {
|
if (mouse_position == p_position) {
|
||||||
return;
|
return;
|
||||||
|
@ -153,18 +142,9 @@ public:
|
||||||
event_callback = p_callable;
|
event_callback = p_callable;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {
|
|
||||||
input_event_callback = p_callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void register_mock_driver() {
|
static void register_mock_driver() {
|
||||||
register_create_function("mock", create_func, get_rendering_drivers_func);
|
register_create_function("mock", create_func, get_rendering_drivers_func);
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayServerMock() {
|
|
||||||
Input::get_singleton()->set_event_dispatch_function(_dispatch_input_events);
|
|
||||||
}
|
|
||||||
~DisplayServerMock() {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DISPLAY_SERVER_MOCK_H
|
#endif // DISPLAY_SERVER_MOCK_H
|
||||||
|
|
Loading…
Reference in a new issue