From 0ddcb9de7bd72ca2db82d12c1d9d56493169766b Mon Sep 17 00:00:00 2001 From: Thierry Crozat Date: Sun, 4 Aug 2019 16:00:19 +0100 Subject: IOS7: Implement copy to clipboard and paste from clipboard --- backends/platform/ios7/ios7_osys_main.cpp | 1 + backends/platform/ios7/ios7_osys_main.h | 4 ++++ backends/platform/ios7/ios7_osys_video.mm | 39 +++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) (limited to 'backends') diff --git a/backends/platform/ios7/ios7_osys_main.cpp b/backends/platform/ios7/ios7_osys_main.cpp index 9b740ca69d..6f69e20d70 100644 --- a/backends/platform/ios7/ios7_osys_main.cpp +++ b/backends/platform/ios7/ios7_osys_main.cpp @@ -172,6 +172,7 @@ bool OSystem_iOS7::hasFeature(Feature f) { case kFeatureCursorPalette: case kFeatureFilteringMode: case kFeatureVirtualKeyboard: + case kFeatureClipboardSupport: return true; default: diff --git a/backends/platform/ios7/ios7_osys_main.h b/backends/platform/ios7/ios7_osys_main.h index ca98991f1b..6555125737 100644 --- a/backends/platform/ios7/ios7_osys_main.h +++ b/backends/platform/ios7/ios7_osys_main.h @@ -206,6 +206,10 @@ public: virtual void logMessage(LogMessageType::Type type, const char *message); virtual void fatalError() override; + virtual bool hasTextInClipboard(); + virtual Common::String getTextFromClipboard(); + virtual bool setTextInClipboard(const Common::String &text); + protected: void initVideoContext(); void updateOutputSurface(); diff --git a/backends/platform/ios7/ios7_osys_video.mm b/backends/platform/ios7/ios7_osys_video.mm index 20cf687709..05093e5428 100644 --- a/backends/platform/ios7/ios7_osys_video.mm +++ b/backends/platform/ios7/ios7_osys_video.mm @@ -28,6 +28,7 @@ #include "graphics/conversion.h" #include "backends/platform/ios7/ios7_app_delegate.h" +#include "common/translation.h" @interface iOS7AlertHandler : NSObject @end @@ -603,3 +604,41 @@ void OSystem_iOS7::setShowKeyboard(bool show) { bool OSystem_iOS7::isKeyboardShown() const { return [[iOS7AppDelegate iPhoneView] isKeyboardShown]; } + + +bool OSystem_iOS7::hasTextInClipboard() { + return [[UIPasteboard generalPasteboard] containsPasteboardTypes:UIPasteboardTypeListString]; +} + +Common::String OSystem_iOS7::getTextFromClipboard() { + if (!hasTextInClipboard()) + return Common::String(); + + UIPasteboard *pb = [UIPasteboard generalPasteboard]; + NSString *str = pb.string; + if (str == nil) + return Common::String(); + + // If translations are supported, use the current TranslationManager charset and otherwise + // use ASCII. If the string cannot be represented using the requested encoding we get a null + // pointer below, which is fine as ScummVM would not know what to do with the string anyway. +#ifdef USE_TRANSLATION + NSString* encStr = [NSString stringWithCString:TransMan.getCurrentCharset().c_str() encoding:NSASCIIStringEncoding]; + NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encStr)); +#else + NSStringEncoding encoding = NSISOLatin1StringEncoding; +#endif + return Common::String([str cStringUsingEncoding:encoding]); +} + +bool OSystem_iOS7::setTextInClipboard(const Common::String &text) { +#ifdef USE_TRANSLATION + NSString* encStr = [NSString stringWithCString:TransMan.getCurrentCharset().c_str() encoding:NSASCIIStringEncoding]; + NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encStr)); +#else + NSStringEncoding encoding = NSISOLatin1StringEncoding; +#endif + UIPasteboard *pb = [UIPasteboard generalPasteboard]; + [pb setString:[NSString stringWithCString:text.c_str() encoding:encoding]]; + return true; +} -- cgit v1.2.3