Route canvas input mode switching through planner

This commit is contained in:
2026-06-03 11:28:41 +02:00
parent 91e1c2c9a3
commit c56d301b29
3 changed files with 28 additions and 7 deletions

View File

@@ -2,6 +2,7 @@
#include <cstdint>
#include "app_core/canvas_tool_ui.h"
#include "app_core/history_ui.h"
#include "app.h"
#include "log.h"
@@ -36,6 +37,24 @@ void run_history_redo_if_available()
ActionManager::redo();
}
void run_canvas_tool_mode(pp::app::CanvasToolMode mode)
{
const auto plan = pp::app::plan_canvas_tool_select(mode);
if (!plan.updates_canvas_mode)
return;
switch (plan.mode) {
case pp::app::CanvasToolMode::draw:
Canvas::set_mode(kCanvasMode::Draw);
return;
case pp::app::CanvasToolMode::erase:
Canvas::set_mode(kCanvasMode::Erase);
return;
default:
return;
}
}
}
Node* NodeCanvas::clone_instantiate() const
@@ -588,9 +607,9 @@ kEventResult NodeCanvas::handle_event(Event* e)
case kEventType::MouseMove:
if (stylus_eraser != me->m_eraser)
{
Canvas::set_mode(me->m_eraser ?
kCanvasMode::Erase :
kCanvasMode::Draw);
run_canvas_tool_mode(me->m_eraser ?
pp::app::CanvasToolMode::erase :
pp::app::CanvasToolMode::draw);
stylus_eraser = me->m_eraser;
}
case kEventType::MouseScroll:
@@ -613,7 +632,7 @@ kEventResult NodeCanvas::handle_event(Event* e)
break;
case kEventType::KeyDown:
if (ke->m_key == kKey::KeyE)
Canvas::set_mode(kCanvasMode::Erase);
run_canvas_tool_mode(pp::app::CanvasToolMode::erase);
if (ke->m_key == kKey::AndroidBack)
run_history_undo_if_available();
if (ke->m_key == kKey::KeyAlt && m_mouse_focus)
@@ -624,7 +643,7 @@ kEventResult NodeCanvas::handle_event(Event* e)
case kEventType::KeyUp:
update_cursor();
if (ke->m_key == kKey::KeyE)
Canvas::set_mode(kCanvasMode::Draw);
run_canvas_tool_mode(pp::app::CanvasToolMode::draw);
if (ke->m_key == kKey::KeyTab)
App::I->toggle_ui();
if (ke->m_key == kKey::KeyZ && App::I->keys[(int)kKey::KeyCtrl])