Add hold to zoom button
This commit is contained in:
parent
777a5a6d03
commit
850882c8ed
4 changed files with 56 additions and 25 deletions
|
|
@ -241,27 +241,7 @@ void DrawingProgram::update() {
|
|||
else if(!unorderedObjectsExistTimePoint)
|
||||
unorderedObjectsExistTimePoint = std::chrono::steady_clock::now();
|
||||
|
||||
if(world.main.input.pen.isEraser && !temporaryEraser) {
|
||||
if(drawTool->get_type() == DrawingProgramToolType::BRUSH)
|
||||
switch_to_tool(DrawingProgramToolType::ERASER);
|
||||
temporaryEraser = true;
|
||||
}
|
||||
else if(!world.main.input.pen.isEraser && temporaryEraser) {
|
||||
if(drawTool->get_type() == DrawingProgramToolType::ERASER)
|
||||
switch_to_tool(DrawingProgramToolType::BRUSH);
|
||||
temporaryEraser = false;
|
||||
}
|
||||
|
||||
if(world.main.input.key(InputManager::KEY_HOLD_TO_PAN).held && !temporaryPan) {
|
||||
toolTypeAfterTempPan = drawTool->get_type();
|
||||
switch_to_tool(DrawingProgramToolType::PAN);
|
||||
temporaryPan = true;
|
||||
}
|
||||
|
||||
if(!world.main.input.key(InputManager::KEY_HOLD_TO_PAN).held && temporaryPan) {
|
||||
switch_to_tool(toolTypeAfterTempPan);
|
||||
temporaryPan = false;
|
||||
}
|
||||
tool_temporary_switch_update();
|
||||
|
||||
controls.cursorHoveringOverCanvas = !world.main.toolbar.io->hoverObstructed;
|
||||
controls.leftClick = controls.cursorHoveringOverCanvas && world.main.input.mouse.leftClicks;
|
||||
|
|
@ -346,6 +326,48 @@ void DrawingProgram::update() {
|
|||
rebuild_cache();
|
||||
}
|
||||
|
||||
void DrawingProgram::tool_temporary_switch_update() {
|
||||
switch(tempMoveToolSwitch) {
|
||||
case TemporaryMoveToolSwitch::NONE:
|
||||
if(world.main.input.key(InputManager::KEY_HOLD_TO_PAN).held) {
|
||||
toolTypeAfterTempMove = drawTool->get_type();
|
||||
switch_to_tool(DrawingProgramToolType::PAN);
|
||||
tempMoveToolSwitch = TemporaryMoveToolSwitch::PAN;
|
||||
}
|
||||
if(world.main.input.key(InputManager::KEY_HOLD_TO_ZOOM).held) {
|
||||
toolTypeAfterTempMove = drawTool->get_type();
|
||||
switch_to_tool(DrawingProgramToolType::ZOOM);
|
||||
tempMoveToolSwitch = TemporaryMoveToolSwitch::ZOOM;
|
||||
}
|
||||
break;
|
||||
case TemporaryMoveToolSwitch::PAN: {
|
||||
if(!world.main.input.key(InputManager::KEY_HOLD_TO_PAN).held) {
|
||||
switch_to_tool(toolTypeAfterTempMove);
|
||||
tempMoveToolSwitch = TemporaryMoveToolSwitch::NONE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TemporaryMoveToolSwitch::ZOOM: {
|
||||
if(!world.main.input.key(InputManager::KEY_HOLD_TO_ZOOM).held) {
|
||||
switch_to_tool(toolTypeAfterTempMove);
|
||||
tempMoveToolSwitch = TemporaryMoveToolSwitch::NONE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(world.main.input.pen.isEraser && !temporaryEraser && tempMoveToolSwitch == TemporaryMoveToolSwitch::NONE) {
|
||||
if(drawTool->get_type() == DrawingProgramToolType::BRUSH)
|
||||
switch_to_tool(DrawingProgramToolType::ERASER);
|
||||
temporaryEraser = true;
|
||||
}
|
||||
else if(!world.main.input.pen.isEraser && temporaryEraser && tempMoveToolSwitch == TemporaryMoveToolSwitch::NONE) {
|
||||
if(drawTool->get_type() == DrawingProgramToolType::ERASER)
|
||||
switch_to_tool(DrawingProgramToolType::BRUSH);
|
||||
temporaryEraser = false;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawingProgram::invalidate_cache_at_component(CanvasComponentContainer::ObjInfo* objToCheck) {
|
||||
if(!selection.is_selected(objToCheck))
|
||||
drawCache.invalidate_cache_at_aabb(objToCheck->obj->get_world_bounds());
|
||||
|
|
|
|||
|
|
@ -83,9 +83,15 @@ class DrawingProgram {
|
|||
std::unique_ptr<DrawingProgramToolBase> toolToSwitchToAfterUpdate;
|
||||
std::unordered_set<CanvasComponentContainer::ObjInfo*> updateableComponents;
|
||||
|
||||
void tool_temporary_switch_update();
|
||||
enum class TemporaryMoveToolSwitch {
|
||||
NONE,
|
||||
PAN,
|
||||
ZOOM
|
||||
};
|
||||
bool temporaryEraser = false;
|
||||
bool temporaryPan = false;
|
||||
DrawingProgramToolType toolTypeAfterTempPan;
|
||||
TemporaryMoveToolSwitch tempMoveToolSwitch = TemporaryMoveToolSwitch::NONE;
|
||||
DrawingProgramToolType toolTypeAfterTempMove;
|
||||
|
||||
struct GlobalControls {
|
||||
float relativeWidth = 15.0f;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ InputManager::InputManager() {
|
|||
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;
|
||||
defaultKeyAssignments[{0, SDLK_U}] = KEY_DRAW_TOOL_ZOOM;
|
||||
defaultKeyAssignments[{0, SDLK_L}] = KEY_DRAW_TOOL_LASSOSELECT;
|
||||
defaultKeyAssignments[{0, SDLK_H}] = KEY_DRAW_TOOL_PAN;
|
||||
defaultKeyAssignments[{0, SDLK_T}] = KEY_DRAW_TOOL_TEXTBOX;
|
||||
|
|
@ -48,6 +48,7 @@ InputManager::InputManager() {
|
|||
defaultKeyAssignments[{0, SDLK_F3}] = KEY_SHOW_METRICS;
|
||||
defaultKeyAssignments[{0, SDLK_F2}] = KEY_SHOW_PLAYER_LIST;
|
||||
defaultKeyAssignments[{0, SDLK_SPACE}] = KEY_HOLD_TO_PAN;
|
||||
defaultKeyAssignments[{0, SDLK_Z}] = KEY_HOLD_TO_ZOOM;
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
// Without this, SDL eats the CTRL-V event that initiates the paste event
|
||||
|
|
|
|||
|
|
@ -165,6 +165,7 @@ struct InputManager {
|
|||
KEY_OPEN_CHAT,
|
||||
KEY_SHOW_PLAYER_LIST,
|
||||
KEY_HOLD_TO_PAN,
|
||||
KEY_HOLD_TO_ZOOM,
|
||||
|
||||
KEY_ASSIGNABLE_COUNT, // Not a real key
|
||||
|
||||
|
|
@ -256,5 +257,6 @@ NLOHMANN_JSON_SERIALIZE_ENUM(InputManager::KeyCodeEnum, {
|
|||
{InputManager::KEY_SHOW_METRICS, "Show Metrics"},
|
||||
{InputManager::KEY_OPEN_CHAT, "Open Chat"},
|
||||
{InputManager::KEY_SHOW_PLAYER_LIST, "Show Player List"},
|
||||
{InputManager::KEY_HOLD_TO_PAN, "Hold to Pan"}
|
||||
{InputManager::KEY_HOLD_TO_PAN, "Hold to Pan"},
|
||||
{InputManager::KEY_HOLD_TO_ZOOM, "Hold to Zoom"}
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue