Use string view for image clipboard data
This commit is contained in:
parent
875a3760ed
commit
06079f80cd
4 changed files with 10 additions and 12 deletions
|
|
@ -17,7 +17,7 @@ namespace emscripten_browser_clipboard {
|
|||
|
||||
/////////////////////////////////// Interface //////////////////////////////////
|
||||
|
||||
using paste_image_handler = void(*)(std::string, void*);
|
||||
using paste_image_handler = void(*)(std::string_view, void*);
|
||||
using paste_handler = void(*)(std::string&&, void*);
|
||||
using copy_handler = char const*(*)(void*);
|
||||
|
||||
|
|
@ -142,7 +142,7 @@ EMSCRIPTEN_KEEPALIVE inline int emscripten_browser_clipboard_detail_paste_return
|
|||
|
||||
EMSCRIPTEN_KEEPALIVE inline int emscripten_browser_clipboard_detail_paste_image_return(char const *pasteData, int pasteSize, paste_image_handler callback, void *callback_data) {
|
||||
/// Call paste callback - this function is called from javascript when the paste event occurs
|
||||
callback(std::string(pasteData, pasteSize), callback_data);
|
||||
callback(std::string_view(pasteData, pasteSize), callback_data);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -179,18 +179,18 @@ bool DrawingProgram::selection_action_menu(Vector2f popupPos) {
|
|||
static PasteData pasteData;
|
||||
pasteData.screenPos = popupPos;
|
||||
pasteData.w = make_weak_ptr(world.main.world);
|
||||
emscripten_browser_clipboard::paste_async_image([](std::string pasteData, void* callbackData){
|
||||
emscripten_browser_clipboard::paste_async_image([](std::string_view pasteData, void* callbackData){
|
||||
PasteData* p = (PasteData*)callbackData;
|
||||
std::shared_ptr<World> wLock = p->w.lock();
|
||||
if(wLock)
|
||||
wLock->drawProg.add_file_to_canvas_by_data("Image from clipboard", std::string(pasteData), p->screenPos);
|
||||
wLock->drawProg.add_file_to_canvas_by_data("Image from clipboard", pasteData, p->screenPos);
|
||||
else
|
||||
Logger::get().log("INFO", "Loading image to canvas that has been destroyed");
|
||||
}, &pasteData);
|
||||
#else
|
||||
std::string imageData = world.main.input.get_clipboard_image_data_SDL();
|
||||
if(!imageData.empty())
|
||||
add_file_to_canvas_by_data("Image from clipboard", imageData, popupPos);
|
||||
world.main.input.get_clipboard_image_data_SDL([&](std::string_view pasteData) {
|
||||
add_file_to_canvas_by_data("Image from clipboard", pasteData, popupPos);
|
||||
});
|
||||
#endif
|
||||
shouldClose = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ std::string InputManager::get_clipboard_str_SDL() {
|
|||
return toRet;
|
||||
}
|
||||
|
||||
std::string InputManager::get_clipboard_image_data_SDL() {
|
||||
void InputManager::get_clipboard_image_data_SDL(const std::function<void(std::string_view data)>& callback) {
|
||||
#ifndef __EMSCRIPTEN__
|
||||
static std::unordered_set<std::string> validMimetypes;
|
||||
if(validMimetypes.empty()) {
|
||||
|
|
@ -153,14 +153,12 @@ std::string InputManager::get_clipboard_image_data_SDL() {
|
|||
if(validMimetypes.contains(mimeTypes[i])) {
|
||||
size_t clipboardDataSize;
|
||||
void* clipboardData = SDL_GetClipboardData(mimeTypes[i], &clipboardDataSize);
|
||||
std::string toRet(static_cast<char*>(clipboardData), clipboardDataSize);
|
||||
callback(std::string_view(static_cast<char*>(clipboardData), clipboardDataSize));
|
||||
SDL_free(clipboardData);
|
||||
return toRet;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return std::string();
|
||||
}
|
||||
|
||||
void InputManager::set_clipboard_str(std::string_view s) {
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ struct InputManager {
|
|||
void set_clipboard_str(std::string_view s);
|
||||
void set_clipboard_plain_and_richtext_pair(const std::pair<std::string, RichText::TextData>& plainAndRichtextPair);
|
||||
std::string get_clipboard_str_SDL();
|
||||
std::string get_clipboard_image_data_SDL();
|
||||
void get_clipboard_image_data_SDL(const std::function<void(std::string_view data)>& callback);
|
||||
void call_text_paste(bool isRichTextPaste);
|
||||
void process_text_paste(const std::string& plainClipboardStr);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue