aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorThierry Crozat2019-08-04 16:00:19 +0100
committerThierry Crozat2019-08-04 19:03:34 +0100
commit0ddcb9de7bd72ca2db82d12c1d9d56493169766b (patch)
tree784d0e89455614d15ade82eba142929ec52094a9 /backends
parent0448f5608fda54ef92d9826728af537450bc339d (diff)
downloadscummvm-rg350-0ddcb9de7bd72ca2db82d12c1d9d56493169766b.tar.gz
scummvm-rg350-0ddcb9de7bd72ca2db82d12c1d9d56493169766b.tar.bz2
scummvm-rg350-0ddcb9de7bd72ca2db82d12c1d9d56493169766b.zip
IOS7: Implement copy to clipboard and paste from clipboard
Diffstat (limited to 'backends')
-rw-r--r--backends/platform/ios7/ios7_osys_main.cpp1
-rw-r--r--backends/platform/ios7/ios7_osys_main.h4
-rw-r--r--backends/platform/ios7/ios7_osys_video.mm39
3 files changed, 44 insertions, 0 deletions
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<UIAlertViewDelegate>
@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;
+}