Route canvas input policy through platform services

This commit is contained in:
2026-06-04 18:26:21 +02:00
parent e52fd3cbb5
commit 4bd29bee9f
10 changed files with 122 additions and 26 deletions

View File

@@ -140,21 +140,13 @@ void CanvasModePen::on_GestureEvent(GestureEvent* ge)
void CanvasModePen::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
{
#if defined(__IOS__)
m_draw_tip = (me->m_source == kEventSource::Mouse && me->m_type != kEventType::MouseUpL);
#else
m_draw_tip = (me->m_source == kEventSource::Mouse || me->m_source == kEventSource::Stylus);
#endif
m_draw_tip = App::I->draws_canvas_tip_for_input(me->m_source, me->m_type);
m_draw_outline = true;
if (Canvas::I->m_touch_lock && me->m_source == kEventSource::Touch)
return;
#if _WIN32
// curve https://www.wolframalpha.com/input/?i=plot+(1-(x-1)%5E2)%5E2+from+x%3D0+to+1
auto curve = [](float x, float max) { return x > max ? 1.f : glm::pow(1.f - glm::pow(x / max - 1.f, 2.f), 2.f); };
me->m_pressure = curve(me->m_pressure, 0.95f);
#endif
me->m_pressure = App::I->adjust_canvas_input_pressure(me->m_pressure);
switch (me->m_type)
{
@@ -344,11 +336,7 @@ void CanvasModePen::enter(kCanvasMode prev)
void CanvasModeLine::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
{
#if defined(__IOS__)
m_draw_tip = (me->m_source == kEventSource::Mouse && me->m_type != kEventType::MouseUpL);
#else
m_draw_tip = (me->m_source == kEventSource::Mouse || me->m_source == kEventSource::Stylus);
#endif
m_draw_tip = App::I->draws_canvas_tip_for_input(me->m_source, me->m_type);
if (Canvas::I->m_touch_lock && me->m_source == kEventSource::Touch)
return;
switch (me->m_type)
@@ -1636,11 +1624,7 @@ void CanvasModeTransform::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
void CanvasModeFloodFill::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
{
#if defined(__IOS__)
m_draw_tip = (me->m_source == kEventSource::Mouse && me->m_type != kEventType::MouseUpL);
#else
m_draw_tip = (me->m_source == kEventSource::Mouse || me->m_source == kEventSource::Stylus);
#endif
m_draw_tip = App::I->draws_canvas_tip_for_input(me->m_source, me->m_type);
if (Canvas::I->m_touch_lock && me->m_source == kEventSource::Touch)
return;