Added keybind to image paste
This commit is contained in:
parent
a9c7278102
commit
777a5a6d03
6 changed files with 56 additions and 29 deletions
|
|
@ -36,10 +36,6 @@
|
|||
|
||||
#include "Tools/EraserTool.hpp"
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <EmscriptenHelpers/emscripten_browser_clipboard.h>
|
||||
#endif
|
||||
|
||||
DrawingProgram::DrawingProgram(World& initWorld):
|
||||
world(initWorld),
|
||||
drawCache(*this),
|
||||
|
|
@ -171,27 +167,8 @@ bool DrawingProgram::selection_action_menu(Vector2f popupPos) {
|
|||
shouldClose = true;
|
||||
}
|
||||
if(t.gui.text_button_left_transparent("Paste Image", "Paste Image")) {
|
||||
#ifdef __EMSCRIPTEN__
|
||||
struct PasteData {
|
||||
std::weak_ptr<World> w;
|
||||
Vector2f screenPos;
|
||||
};
|
||||
static PasteData pasteData;
|
||||
pasteData.screenPos = popupPos;
|
||||
pasteData.w = make_weak_ptr(world.main.world);
|
||||
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", pasteData, p->screenPos);
|
||||
else
|
||||
Logger::get().log("INFO", "Loading image to canvas that has been destroyed");
|
||||
}, &pasteData);
|
||||
#else
|
||||
world.main.input.get_clipboard_image_data_SDL([&](std::string_view pasteData) {
|
||||
add_file_to_canvas_by_data("Image from clipboard", pasteData, popupPos);
|
||||
});
|
||||
#endif
|
||||
selection.deselect_all();
|
||||
selection.paste_image(popupPos * t.final_gui_scale());
|
||||
shouldClose = true;
|
||||
}
|
||||
if(selection.is_something_selected()) {
|
||||
|
|
@ -536,7 +513,7 @@ void DrawingProgram::add_file_to_canvas_by_path_execute(const std::filesystem::p
|
|||
}
|
||||
}
|
||||
|
||||
void DrawingProgram::add_file_to_canvas_by_data(const std::string& fileName, std::string_view fileBuffer, Vector2f dropPos) {
|
||||
CanvasComponentContainer::ObjInfo* DrawingProgram::add_file_to_canvas_by_data(const std::string& fileName, std::string_view fileBuffer, Vector2f dropPos) {
|
||||
if(layerMan.is_a_layer_being_edited()) {
|
||||
ResourceData newResource;
|
||||
newResource.data = std::make_shared<std::string>(fileBuffer);
|
||||
|
|
@ -553,9 +530,11 @@ void DrawingProgram::add_file_to_canvas_by_data(const std::string& fileName, std
|
|||
img.d.p1 = dropPos - imDim;
|
||||
img.d.p2 = dropPos + imDim;
|
||||
img.d.imageID = imageID;
|
||||
auto newObjInfo = layerMan.add_component_to_layer_being_edited(newContainer);
|
||||
CanvasComponentContainer::ObjInfo* newObjInfo = layerMan.add_component_to_layer_being_edited(newContainer);
|
||||
layerMan.add_undo_place_component(newObjInfo);
|
||||
return newObjInfo;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
float DrawingProgram::drag_point_radius() {
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ class DrawingProgram {
|
|||
void init_server_callbacks();
|
||||
void init_client_callbacks();
|
||||
void add_file_to_canvas_by_path(const std::filesystem::path& filePath, Vector2f dropPos, bool addInSameThread);
|
||||
void add_file_to_canvas_by_data(const std::string& fileName, std::string_view fileBuffer, Vector2f dropPos);
|
||||
CanvasComponentContainer::ObjInfo* add_file_to_canvas_by_data(const std::string& fileName, std::string_view fileBuffer, Vector2f dropPos);
|
||||
void get_used_resources(std::unordered_set<NetworkingObjects::NetObjID>& resourceSet);
|
||||
|
||||
void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,10 @@
|
|||
#define ROTATION_POINT_RADIUS_MULTIPLIER 0.7f
|
||||
#define ROTATION_POINTS_DISTANCE 20.0f
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <EmscriptenHelpers/emscripten_browser_clipboard.h>
|
||||
#endif
|
||||
|
||||
DrawingProgramSelection::DrawingProgramSelection(DrawingProgram& initDrawP):
|
||||
drawP(initDrawP)
|
||||
{}
|
||||
|
|
@ -343,9 +347,15 @@ void DrawingProgramSelection::update() {
|
|||
deselect_all();
|
||||
paste_clipboard(drawP.world.main.input.mouse.pos);
|
||||
}
|
||||
else if(drawP.world.main.input.key(InputManager::KEY_PASTE_IMAGE).pressed) {
|
||||
deselect_all();
|
||||
paste_image(drawP.world.main.input.mouse.pos);
|
||||
}
|
||||
}
|
||||
else if(drawP.world.main.input.key(InputManager::KEY_PASTE).pressed && !drawP.prevent_undo_or_redo())
|
||||
paste_clipboard(drawP.world.main.input.mouse.pos);
|
||||
else if(drawP.world.main.input.key(InputManager::KEY_PASTE_IMAGE).pressed && !drawP.prevent_undo_or_redo())
|
||||
paste_image(drawP.world.main.input.mouse.pos);
|
||||
else if(drawP.world.main.input.key(InputManager::KEY_GENERIC_ESCAPE).pressed)
|
||||
drawP.switch_to_tool(DrawingProgramToolType::EDIT, true);
|
||||
}
|
||||
|
|
@ -432,7 +442,40 @@ void DrawingProgramSelection::paste_clipboard(Vector2f pasteScreenPos) {
|
|||
compSetInserted.emplace_back(&(*it));
|
||||
}
|
||||
set_to_selection(compSetInserted);
|
||||
//drawP.add_undo_place_components(compSetInserted);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawingProgramSelection::paste_image(Vector2f pasteScreenPos) {
|
||||
if(drawP.layerMan.is_a_layer_being_edited()) {
|
||||
#ifdef __EMSCRIPTEN__
|
||||
struct PasteData {
|
||||
std::weak_ptr<World> w;
|
||||
Vector2f screenPos;
|
||||
};
|
||||
static PasteData pasteData;
|
||||
pasteData.screenPos = pasteScreenPos;
|
||||
pasteData.w = make_weak_ptr(drawP.world.main.world);
|
||||
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", pasteData, p->screenPos);
|
||||
else
|
||||
Logger::get().log("INFO", "Loading image to canvas that has been destroyed");
|
||||
}, &pasteData);
|
||||
#else
|
||||
if(!drawP.is_selection_allowing_tool(drawP.drawTool->get_type()))
|
||||
drawP.switch_to_tool(DrawingProgramToolType::EDIT);
|
||||
|
||||
std::vector<CanvasComponentContainer::ObjInfo*> compSetInserted;
|
||||
drawP.world.main.input.get_clipboard_image_data_SDL([&](std::string_view pasteData) {
|
||||
compSetInserted.emplace_back(drawP.add_file_to_canvas_by_data("Image from clipboard", pasteData, pasteScreenPos));
|
||||
});
|
||||
if(!compSetInserted.empty() && compSetInserted.back() != nullptr) {
|
||||
drawP.drawCache.erase_component(compSetInserted.back());
|
||||
set_to_selection(compSetInserted);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ class DrawingProgramSelection {
|
|||
void update();
|
||||
void deselect_all();
|
||||
void paste_clipboard(Vector2f pasteScreenPos);
|
||||
void paste_image(Vector2f pasteScreenPos);
|
||||
std::unordered_set<CanvasComponentContainer::ObjInfo*> get_selection_as_set();
|
||||
void delete_all();
|
||||
void selection_to_clipboard();
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ InputManager::InputManager() {
|
|||
defaultKeyAssignments[{CTRL_MOD, SDLK_C}] = KEY_COPY;
|
||||
defaultKeyAssignments[{CTRL_MOD, SDLK_X}] = KEY_CUT;
|
||||
defaultKeyAssignments[{CTRL_MOD, SDLK_V}] = KEY_PASTE;
|
||||
defaultKeyAssignments[{CTRL_MOD | SDL_KMOD_SHIFT, SDLK_V}] = KEY_PASTE_IMAGE;
|
||||
defaultKeyAssignments[{0, SDLK_B}] = KEY_DRAW_TOOL_BRUSH;
|
||||
defaultKeyAssignments[{0, SDLK_E}] = KEY_DRAW_TOOL_ERASER;
|
||||
defaultKeyAssignments[{0, SDLK_Z}] = KEY_DRAW_TOOL_ZOOM;
|
||||
|
|
@ -155,6 +156,7 @@ void InputManager::get_clipboard_image_data_SDL(const std::function<void(std::st
|
|||
void* clipboardData = SDL_GetClipboardData(mimeTypes[i], &clipboardDataSize);
|
||||
callback(std::string_view(static_cast<char*>(clipboardData), clipboardDataSize));
|
||||
SDL_free(clipboardData);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ struct InputManager {
|
|||
KEY_COPY,
|
||||
KEY_CUT,
|
||||
KEY_PASTE,
|
||||
KEY_PASTE_IMAGE,
|
||||
KEY_DRAW_TOOL_BRUSH,
|
||||
KEY_DRAW_TOOL_ERASER,
|
||||
KEY_DRAW_TOOL_ZOOM,
|
||||
|
|
@ -240,6 +241,7 @@ NLOHMANN_JSON_SERIALIZE_ENUM(InputManager::KeyCodeEnum, {
|
|||
{InputManager::KEY_COPY, "Copy"},
|
||||
{InputManager::KEY_CUT, "Cut"},
|
||||
{InputManager::KEY_PASTE, "Paste"},
|
||||
{InputManager::KEY_PASTE_IMAGE, "Paste Image"},
|
||||
{InputManager::KEY_DRAW_TOOL_BRUSH, "Brush Tool"},
|
||||
{InputManager::KEY_DRAW_TOOL_ERASER, "Eraser Tool"},
|
||||
{InputManager::KEY_DRAW_TOOL_ZOOM, "Zoom Tool"},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue