|
43 | 43 | #import "key_mapping_macos.h" |
44 | 44 | #import "macos_quartz_core_spi.h" |
45 | 45 | #import "os_macos.h" |
46 | | -#import "tts_macos.h" |
47 | 46 |
|
48 | 47 | #include "core/config/project_settings.h" |
49 | 48 | #include "core/io/marshalls.h" |
|
916 | 915 | return help_action_callback; |
917 | 916 | } |
918 | 917 |
|
919 | | -void DisplayServerMacOS::initialize_tts() const { |
920 | | - const_cast<DisplayServerMacOS *>(this)->tts = [[TTS_MacOS alloc] init]; |
921 | | -} |
922 | | - |
923 | | -bool DisplayServerMacOS::tts_is_speaking() const { |
924 | | - if (unlikely(!tts)) { |
925 | | - initialize_tts(); |
926 | | - } |
927 | | - ERR_FAIL_NULL_V(tts, false); |
928 | | - return [tts isSpeaking]; |
929 | | -} |
930 | | - |
931 | | -bool DisplayServerMacOS::tts_is_paused() const { |
932 | | - if (unlikely(!tts)) { |
933 | | - initialize_tts(); |
934 | | - } |
935 | | - ERR_FAIL_NULL_V(tts, false); |
936 | | - return [tts isPaused]; |
937 | | -} |
938 | | - |
939 | | -TypedArray<Dictionary> DisplayServerMacOS::tts_get_voices() const { |
940 | | - if (unlikely(!tts)) { |
941 | | - initialize_tts(); |
942 | | - } |
943 | | - ERR_FAIL_NULL_V(tts, TypedArray<Dictionary>()); |
944 | | - return [tts getVoices]; |
945 | | -} |
946 | | - |
947 | | -void DisplayServerMacOS::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) { |
948 | | - if (unlikely(!tts)) { |
949 | | - initialize_tts(); |
950 | | - } |
951 | | - ERR_FAIL_NULL(tts); |
952 | | - [tts speak:p_text voice:p_voice volume:p_volume pitch:p_pitch rate:p_rate utterance_id:p_utterance_id interrupt:p_interrupt]; |
953 | | -} |
954 | | - |
955 | | -void DisplayServerMacOS::tts_pause() { |
956 | | - if (unlikely(!tts)) { |
957 | | - initialize_tts(); |
958 | | - } |
959 | | - ERR_FAIL_NULL(tts); |
960 | | - [tts pauseSpeaking]; |
961 | | -} |
962 | | - |
963 | | -void DisplayServerMacOS::tts_resume() { |
964 | | - if (unlikely(!tts)) { |
965 | | - initialize_tts(); |
966 | | - } |
967 | | - ERR_FAIL_NULL(tts); |
968 | | - [tts resumeSpeaking]; |
969 | | -} |
970 | | - |
971 | | -void DisplayServerMacOS::tts_stop() { |
972 | | - if (unlikely(!tts)) { |
973 | | - initialize_tts(); |
974 | | - } |
975 | | - ERR_FAIL_NULL(tts); |
976 | | - [tts stopSpeaking]; |
977 | | -} |
978 | | - |
979 | 918 | bool DisplayServerMacOS::is_dark_mode_supported() const { |
980 | 919 | if (@available(macOS 10.14, *)) { |
981 | 920 | return true; |
|
1642 | 1581 | return last_button_state; |
1643 | 1582 | } |
1644 | 1583 |
|
1645 | | -void DisplayServerMacOS::clipboard_set(const String &p_text) { |
1646 | | - _THREAD_SAFE_METHOD_ |
1647 | | - |
1648 | | - NSString *copiedString = [NSString stringWithUTF8String:p_text.utf8().get_data()]; |
1649 | | - NSArray *copiedStringArray = [NSArray arrayWithObject:copiedString]; |
1650 | | - |
1651 | | - NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; |
1652 | | - [pasteboard clearContents]; |
1653 | | - [pasteboard writeObjects:copiedStringArray]; |
1654 | | -} |
1655 | | - |
1656 | | -String DisplayServerMacOS::clipboard_get() const { |
1657 | | - _THREAD_SAFE_METHOD_ |
1658 | | - |
1659 | | - NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; |
1660 | | - NSArray *classArray = [NSArray arrayWithObject:[NSString class]]; |
1661 | | - NSDictionary *options = [NSDictionary dictionary]; |
1662 | | - |
1663 | | - BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options]; |
1664 | | - |
1665 | | - if (!ok) { |
1666 | | - return ""; |
1667 | | - } |
1668 | | - |
1669 | | - NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options]; |
1670 | | - NSString *string = [objectsToPaste objectAtIndex:0]; |
1671 | | - |
1672 | | - String ret; |
1673 | | - ret.append_utf8([string UTF8String]); |
1674 | | - return ret; |
1675 | | -} |
1676 | | - |
1677 | | -Ref<Image> DisplayServerMacOS::clipboard_get_image() const { |
1678 | | - Ref<Image> image; |
1679 | | - NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; |
1680 | | - NSString *result = [pasteboard availableTypeFromArray:[NSArray arrayWithObjects:NSPasteboardTypeTIFF, NSPasteboardTypePNG, nil]]; |
1681 | | - if (!result) { |
1682 | | - return image; |
1683 | | - } |
1684 | | - NSData *data = [pasteboard dataForType:result]; |
1685 | | - if (!data) { |
1686 | | - return image; |
1687 | | - } |
1688 | | - NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:data]; |
1689 | | - NSData *pngData = [bitmap representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; |
1690 | | - image.instantiate(); |
1691 | | - PNGDriverCommon::png_to_image((const uint8_t *)pngData.bytes, pngData.length, false, image); |
1692 | | - return image; |
1693 | | -} |
1694 | | - |
1695 | | -bool DisplayServerMacOS::clipboard_has() const { |
1696 | | - NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; |
1697 | | - NSArray *classArray = [NSArray arrayWithObject:[NSString class]]; |
1698 | | - NSDictionary *options = [NSDictionary dictionary]; |
1699 | | - return [pasteboard canReadObjectForClasses:classArray options:options]; |
1700 | | -} |
1701 | | - |
1702 | | -bool DisplayServerMacOS::clipboard_has_image() const { |
1703 | | - NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; |
1704 | | - NSString *result = [pasteboard availableTypeFromArray:[NSArray arrayWithObjects:NSPasteboardTypeTIFF, NSPasteboardTypePNG, nil]]; |
1705 | | - return result; |
1706 | | -} |
1707 | | - |
1708 | 1584 | int DisplayServerMacOS::get_screen_count() const { |
1709 | 1585 | _THREAD_SAFE_METHOD_ |
1710 | 1586 |
|
|
4013 | 3889 | // Register to be notified on displays arrangement changes. |
4014 | 3890 | CGDisplayRegisterReconfigurationCallback(_displays_arrangement_changed, nullptr); |
4015 | 3891 |
|
4016 | | - // Init TTS |
4017 | | - bool tts_enabled = GLOBAL_GET("audio/general/text_to_speech"); |
4018 | | - if (tts_enabled) { |
4019 | | - initialize_tts(); |
4020 | | - } |
4021 | | - |
4022 | 3892 | native_menu = memnew(NativeMenuMacOS); |
4023 | 3893 |
|
4024 | 3894 | #ifdef ACCESSKIT_ENABLED |
|
0 commit comments