From da6da775a0a5150ceee17d32dcc5443528000352 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Tue, 25 Jun 2019 16:04:16 +0200 Subject: [PATCH] implement clipboard on iOS --- PanoPainter/GameViewController.h | 2 ++ PanoPainter/GameViewController.m | 12 ++++++++++++ src/app.h | 2 ++ src/app_events.cpp | 22 ++++++++++++++++++++++ src/node_dialog_picker.cpp | 8 +++++--- src/util.cpp | 18 ------------------ src/util.h | 3 --- 7 files changed, 43 insertions(+), 24 deletions(-) diff --git a/PanoPainter/GameViewController.h b/PanoPainter/GameViewController.h index 902e5f7..512fb32 100644 --- a/PanoPainter/GameViewController.h +++ b/PanoPainter/GameViewController.h @@ -35,4 +35,6 @@ - (void)share_file:(NSString*)file_path; - (void)tick; - (void)render_loop; +- (std::string)clipboard_get_string; +- (bool)clipboard_set_string:(const std::string&)s; @end diff --git a/PanoPainter/GameViewController.m b/PanoPainter/GameViewController.m index 10df477..21a23f3 100644 --- a/PanoPainter/GameViewController.m +++ b/PanoPainter/GameViewController.m @@ -44,6 +44,18 @@ NSThread* lock_thread; std::recursive_mutex lock_mutex; @implementation GameViewController +- (std::string)clipboard_get_string +{ + NSString* ns = [[UIPasteboard generalPasteboard] string]; + const char* ptr = [ns cStringUsingEncoding:NSUTF8StringEncoding]; + return std::string(ptr); +} +- (bool)clipboard_set_string:(const std::string &)s +{ + NSString* ns = [NSString stringWithUTF8String:s.c_str()]; + [[UIPasteboard generalPasteboard] setString:ns]; + return true; +} - (void)crash { AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate]; diff --git a/src/app.h b/src/app.h index 3f484dd..ae4872b 100644 --- a/src/app.h +++ b/src/app.h @@ -144,6 +144,8 @@ public: struct android_app* and_app; struct engine* and_engine; #endif + std::string clipboard_get_text(); + bool clipboard_set_text(const std::string& s); void pick_image(std::function callback); void pick_file(std::vector types, std::function callback); void pick_dir(std::function callback); diff --git a/src/app_events.cpp b/src/app_events.cpp index 32b87e3..40978dd 100644 --- a/src/app_events.cpp +++ b/src/app_events.cpp @@ -8,8 +8,30 @@ void android_pick_file(android_app* mApplication, std::function Node* NodeColorPicker::clone_instantiate() const { @@ -90,7 +92,7 @@ void NodeColorPicker::init_controls() m_btn_paste->on_click = [this](Node*) { - std::string s = clipboard_get_text(); + std::string s = App::I.clipboard_get_text(); std::regex r("#([\\dabcdefABCDEF]{6})"); std::smatch m; if (std::regex_search(s, m, r)) @@ -106,7 +108,7 @@ void NodeColorPicker::init_controls() m_btn_copy->on_click = [this](Node*) { - clipboard_set_text(m_txt_hex->m_text); + App::I.clipboard_set_text(m_txt_hex->m_text); }; m_wheel->on_value_changed = [this](Node*, glm::vec3 hsv) @@ -164,7 +166,7 @@ void NodeColorPicker::init_controls() void NodeColorPicker::update_hex(glm::vec3 rgb) { char tmp[32]; - ultoa(convert_rgb_long(rgb), tmp, 16); + snprintf(tmp, sizeof(tmp), "%xul", convert_rgb_long(rgb)); m_txt_hex->set_text_format("#%s", tmp); } diff --git a/src/util.cpp b/src/util.cpp index 0cc70d5..11ca337 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -610,24 +610,6 @@ std::string str_replace(const std::string& string, const std::string& search, co return ret; } -std::string clipboard_get_text() -{ -#if _WIN32 - extern std::string win32_clipboard_get_text(); - return win32_clipboard_get_text(); -#elif _IOS_ -#endif -} - -bool clipboard_set_text(const std::string& s) -{ -#if _WIN32 - extern bool win32_clipboard_set_text(const std::string & s); - return win32_clipboard_set_text(s); -#elif _IOS_ -#endif -} - static const char* gl2str(GLenum err) { switch (err) diff --git a/src/util.h b/src/util.h index 01986ea..b0b6b55 100644 --- a/src/util.h +++ b/src/util.h @@ -82,9 +82,6 @@ std::string wstr2str(const std::wstring& wstr); bool str_iequals(const std::string& a, const std::string& b); std::string str_replace(const std::string& string, const std::string& search, const std::string& replace); -std::string clipboard_get_text(); -bool clipboard_set_text(const std::string& s); - size_t curl_data_handler(void *contents, size_t size, size_t nmemb, void *userp); size_t curl_data_write(void *ptr, size_t size, size_t nmemb, FILE *stream); void check_OpenGLError(const char* stmt, const char* fname, int line);