From 8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6 Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 15 May 2022 14:08:06 +0800 Subject: ... --- src/platform/gui/osx/Clipboard.mm | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/platform/gui/osx/Clipboard.mm (limited to 'src/platform/gui/osx/Clipboard.mm') diff --git a/src/platform/gui/osx/Clipboard.mm b/src/platform/gui/osx/Clipboard.mm new file mode 100644 index 00000000..068771c8 --- /dev/null +++ b/src/platform/gui/osx/Clipboard.mm @@ -0,0 +1,46 @@ +#include "cru/platform/gui/osx/Clipboard.h" +#include "ClipboardPrivate.h" + +#include "cru/common/log/Logger.h" +#include "cru/platform/osx/Convert.h" + +#include + +namespace cru::platform::gui::osx { +using cru::platform::osx::Convert; + +OsxClipboard::OsxClipboard(cru::platform::gui::IUiApplication* ui_application, + std::unique_ptr p) + : OsxGuiResource(ui_application), p_(std::move(p)) {} + +OsxClipboard::~OsxClipboard() {} + +String OsxClipboard::GetText() { return p_->GetText(); } + +void OsxClipboard::SetText(String text) { p_->SetText(text); } + +namespace details { +OsxClipboardPrivate::OsxClipboardPrivate(NSPasteboard* pasteboard) : pasteboard_(pasteboard) {} + +OsxClipboardPrivate::~OsxClipboardPrivate() {} + +String OsxClipboardPrivate::GetText() { + auto result = [pasteboard_ readObjectsForClasses:@[ NSString.class ] options:nil]; + if (result == nil) { + CRU_LOG_WARN(u"Failed to get text from clipboard"); + return u""; + } else { + if (result.count == 0) { + return u""; + } else { + return Convert((CFStringRef)result[0]); + } + } +} + +void OsxClipboardPrivate::SetText(String text) { + [pasteboard_ clearContents]; + [pasteboard_ writeObjects:@[ (NSString*)Convert(text) ]]; +} +} +} // namespace cru::platform::gui::osx -- cgit v1.2.3