diff options
author | crupest <crupest@outlook.com> | 2022-05-15 14:08:06 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-05-15 14:08:06 +0800 |
commit | 8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6 (patch) | |
tree | 77e41cc14264060517c0f7ed95837012afb8342e /src/platform/gui/osx/Clipboard.mm | |
parent | 9e0c9d3499bc50c3534b4dc500d8b5d0b5f22752 (diff) | |
download | cru-8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6.tar.gz cru-8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6.tar.bz2 cru-8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6.zip |
...
Diffstat (limited to 'src/platform/gui/osx/Clipboard.mm')
-rw-r--r-- | src/platform/gui/osx/Clipboard.mm | 46 |
1 files changed, 46 insertions, 0 deletions
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 <memory> + +namespace cru::platform::gui::osx { +using cru::platform::osx::Convert; + +OsxClipboard::OsxClipboard(cru::platform::gui::IUiApplication* ui_application, + std::unique_ptr<details::OsxClipboardPrivate> 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 |