Skip to content

Commit b544113

Browse files
committed
Ignore events in LVGL subwidgets that are out of bounds
Signed-off-by: falkTX <[email protected]>
1 parent 887c3ed commit b544113

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

generic/LVGL.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,22 @@ bool LVGLWidget<BaseWidget>::onMouse(const Widget::MouseEvent& event)
527527
return true;
528528
}
529529

530+
template <>
531+
bool LVGLWidget<SubWidget>::onMouse(const Widget::MouseEvent& event)
532+
{
533+
if (SubWidget::onMouse(event))
534+
return true;
535+
536+
if (!getAbsoluteArea().contains(event.absolutePos))
537+
return false;
538+
539+
if (event.button > ARRAY_SIZE(lvglData->mouseButtons))
540+
return false;
541+
542+
lvglData->mouseButtons[event.button] = event.press;
543+
return true;
544+
}
545+
530546
template <class BaseWidget>
531547
bool LVGLWidget<BaseWidget>::onMotion(const Widget::MotionEvent& event)
532548
{
@@ -538,6 +554,20 @@ bool LVGLWidget<BaseWidget>::onMotion(const Widget::MotionEvent& event)
538554
return true;
539555
}
540556

557+
template <>
558+
bool LVGLWidget<SubWidget>::onMotion(const Widget::MotionEvent& event)
559+
{
560+
if (SubWidget::onMotion(event))
561+
return true;
562+
563+
if (!getAbsoluteArea().contains(event.absolutePos))
564+
return false;
565+
566+
lvglData->mousePos.x = std::max(0, std::min<int>(getWidth() - 1, event.pos.getX()));
567+
lvglData->mousePos.y = std::max(0, std::min<int>(getHeight() - 1, event.pos.getY()));
568+
return true;
569+
}
570+
541571
template <class BaseWidget>
542572
bool LVGLWidget<BaseWidget>::onScroll(const Widget::ScrollEvent& event)
543573
{
@@ -548,6 +578,19 @@ bool LVGLWidget<BaseWidget>::onScroll(const Widget::ScrollEvent& event)
548578
return false;
549579
}
550580

581+
template <>
582+
bool LVGLWidget<SubWidget>::onScroll(const Widget::ScrollEvent& event)
583+
{
584+
if (SubWidget::onScroll(event))
585+
return true;
586+
587+
if (!getAbsoluteArea().contains(event.absolutePos))
588+
return false;
589+
590+
lvglData->mouseWheelDelta -= event.delta.getY();
591+
return false;
592+
}
593+
551594
template <class BaseWidget>
552595
void LVGLWidget<BaseWidget>::onResize(const Widget::ResizeEvent& event)
553596
{

0 commit comments

Comments
 (0)