diff options
Diffstat (limited to 'servers/display_server.cpp')
| -rw-r--r-- | servers/display_server.cpp | 101 | 
1 files changed, 99 insertions, 2 deletions
diff --git a/servers/display_server.cpp b/servers/display_server.cpp index 67bfc75426..59f88844e9 100644 --- a/servers/display_server.cpp +++ b/servers/display_server.cpp @@ -220,6 +220,81 @@ void DisplayServer::global_menu_clear(const String &p_menu_root) {  	WARN_PRINT("Global menus not supported by this display server.");  } +bool DisplayServer::tts_is_speaking() const { +	WARN_PRINT("TTS is not supported by this display server."); +	return false; +} + +bool DisplayServer::tts_is_paused() const { +	WARN_PRINT("TTS is not supported by this display server."); +	return false; +} + +void DisplayServer::tts_pause() { +	WARN_PRINT("TTS is not supported by this display server."); +} + +void DisplayServer::tts_resume() { +	WARN_PRINT("TTS is not supported by this display server."); +} + +Array DisplayServer::tts_get_voices() const { +	WARN_PRINT("TTS is not supported by this display server."); +	return Array(); +} + +PackedStringArray DisplayServer::tts_get_voices_for_language(const String &p_language) const { +	PackedStringArray ret; +	Array voices = tts_get_voices(); +	for (int i = 0; i < voices.size(); i++) { +		const Dictionary &voice = voices[i]; +		if (voice.has("id") && voice.has("language") && voice["language"].operator String().begins_with(p_language)) { +			ret.push_back(voice["id"]); +		} +	} +	return ret; +} + +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) { +	WARN_PRINT("TTS is not supported by this display server."); +} + +void DisplayServer::tts_stop() { +	WARN_PRINT("TTS is not supported by this display server."); +} + +void DisplayServer::tts_set_utterance_callback(TTSUtteranceEvent p_event, const Callable &p_callable) { +	ERR_FAIL_INDEX(p_event, DisplayServer::TTS_UTTERANCE_MAX); +	utterance_callback[p_event] = p_callable; +} + +void DisplayServer::tts_post_utterance_event(TTSUtteranceEvent p_event, int p_id, int p_pos) { +	ERR_FAIL_INDEX(p_event, DisplayServer::TTS_UTTERANCE_MAX); +	switch (p_event) { +		case DisplayServer::TTS_UTTERANCE_STARTED: +		case DisplayServer::TTS_UTTERANCE_ENDED: +		case DisplayServer::TTS_UTTERANCE_CANCELED: { +			if (utterance_callback[p_event].is_valid()) { +				Variant args[1]; +				args[0] = p_id; +				const Variant *argp[] = { &args[0] }; +				utterance_callback[p_event].call_deferred(argp, 1); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession. +			} +		} break; +		case DisplayServer::TTS_UTTERANCE_BOUNDARY: { +			if (utterance_callback[p_event].is_valid()) { +				Variant args[2]; +				args[0] = p_pos; +				args[1] = p_id; +				const Variant *argp[] = { &args[0], &args[1] }; +				utterance_callback[p_event].call_deferred(argp, 2); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession. +			} +		} break; +		default: +			break; +	} +} +  void DisplayServer::mouse_set_mode(MouseMode p_mode) {  	WARN_PRINT("Mouse is not supported by this display server.");  } @@ -346,7 +421,7 @@ DisplayServer::CursorShape DisplayServer::cursor_get_shape() const {  	return CURSOR_ARROW;  } -void DisplayServer::cursor_set_custom_image(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) { +void DisplayServer::cursor_set_custom_image(const Ref<Resource> &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) {  	WARN_PRINT("Custom cursor shape not supported by this display server.");  } @@ -478,6 +553,19 @@ void DisplayServer::_bind_methods() {  	ClassDB::bind_method(D_METHOD("global_menu_remove_item", "menu_root", "idx"), &DisplayServer::global_menu_remove_item);  	ClassDB::bind_method(D_METHOD("global_menu_clear", "menu_root"), &DisplayServer::global_menu_clear); +	ClassDB::bind_method(D_METHOD("tts_is_speaking"), &DisplayServer::tts_is_speaking); +	ClassDB::bind_method(D_METHOD("tts_is_paused"), &DisplayServer::tts_is_paused); +	ClassDB::bind_method(D_METHOD("tts_get_voices"), &DisplayServer::tts_get_voices); +	ClassDB::bind_method(D_METHOD("tts_get_voices_for_language", "language"), &DisplayServer::tts_get_voices_for_language); + +	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)); +	ClassDB::bind_method(D_METHOD("tts_pause"), &DisplayServer::tts_pause); +	ClassDB::bind_method(D_METHOD("tts_resume"), &DisplayServer::tts_resume); +	ClassDB::bind_method(D_METHOD("tts_stop"), &DisplayServer::tts_stop); + +	ClassDB::bind_method(D_METHOD("tts_set_utterance_callback", "event", "callable"), &DisplayServer::tts_set_utterance_callback); +	ClassDB::bind_method(D_METHOD("_tts_post_utterance_event", "event", "id", "char_pos"), &DisplayServer::tts_post_utterance_event); +  	ClassDB::bind_method(D_METHOD("mouse_set_mode", "mouse_mode"), &DisplayServer::mouse_set_mode);  	ClassDB::bind_method(D_METHOD("mouse_get_mode"), &DisplayServer::mouse_get_mode); @@ -491,6 +579,9 @@ void DisplayServer::_bind_methods() {  	ClassDB::bind_method(D_METHOD("clipboard_set_primary", "clipboard_primary"), &DisplayServer::clipboard_set_primary);  	ClassDB::bind_method(D_METHOD("clipboard_get_primary"), &DisplayServer::clipboard_get_primary); +	ClassDB::bind_method(D_METHOD("get_display_cutouts"), &DisplayServer::get_display_cutouts); +	ClassDB::bind_method(D_METHOD("get_display_safe_area"), &DisplayServer::get_display_safe_area); +  	ClassDB::bind_method(D_METHOD("get_screen_count"), &DisplayServer::get_screen_count);  	ClassDB::bind_method(D_METHOD("screen_get_position", "screen"), &DisplayServer::screen_get_position, DEFVAL(SCREEN_OF_MAIN_WINDOW));  	ClassDB::bind_method(D_METHOD("screen_get_size", "screen"), &DisplayServer::screen_get_size, DEFVAL(SCREEN_OF_MAIN_WINDOW)); @@ -621,6 +712,7 @@ void DisplayServer::_bind_methods() {  	BIND_ENUM_CONSTANT(FEATURE_ORIENTATION);  	BIND_ENUM_CONSTANT(FEATURE_SWAP_BUFFERS);  	BIND_ENUM_CONSTANT(FEATURE_CLIPBOARD_PRIMARY); +	BIND_ENUM_CONSTANT(FEATURE_TEXT_TO_SPEECH);  	BIND_ENUM_CONSTANT(MOUSE_MODE_VISIBLE);  	BIND_ENUM_CONSTANT(MOUSE_MODE_HIDDEN); @@ -689,6 +781,11 @@ void DisplayServer::_bind_methods() {  	BIND_ENUM_CONSTANT(DISPLAY_HANDLE);  	BIND_ENUM_CONSTANT(WINDOW_HANDLE);  	BIND_ENUM_CONSTANT(WINDOW_VIEW); + +	BIND_ENUM_CONSTANT(TTS_UTTERANCE_STARTED); +	BIND_ENUM_CONSTANT(TTS_UTTERANCE_ENDED); +	BIND_ENUM_CONSTANT(TTS_UTTERANCE_CANCELED); +	BIND_ENUM_CONSTANT(TTS_UTTERANCE_BOUNDARY);  }  void DisplayServer::register_create_function(const char *p_name, CreateFunction p_function, GetRenderingDriversFunction p_get_drivers) { @@ -736,7 +833,7 @@ Input::CursorShape DisplayServer::_input_get_current_cursor_shape() {  	return (Input::CursorShape)singleton->cursor_get_shape();  } -void DisplayServer::_input_set_custom_mouse_cursor_func(const RES &p_image, Input::CursorShape p_shape, const Vector2 &p_hostspot) { +void DisplayServer::_input_set_custom_mouse_cursor_func(const Ref<Resource> &p_image, Input::CursorShape p_shape, const Vector2 &p_hostspot) {  	singleton->cursor_set_custom_image(p_image, (CursorShape)p_shape, p_hostspot);  }  |