feat: Implement comprehensive mouse event system

Implements multiple mouse event improvements for UI elements:

- Mouse enter/exit events (#140): on_enter, on_exit callbacks and
  hovered property for all UIDrawable types (Frame, Caption, Sprite, Grid)
- Headless click events (#111): Track simulated mouse position for
  automation testing in headless mode
- Mouse move events (#141): on_move callback fires continuously while
  mouse is within element bounds
- Grid cell events (#142): on_cell_enter, on_cell_exit, on_cell_click
  callbacks with cell coordinates (x, y), plus hovered_cell property

Includes comprehensive tests for all new functionality.

Closes #140, closes #111, closes #141, closes #142

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
John McCardle 2025-11-27 23:08:31 -05:00
commit 6c496b8732
14 changed files with 1353 additions and 27 deletions

View file

@ -428,6 +428,15 @@ void GameEngine::processEvent(const sf::Event& event)
actionCode = ActionCode::keycode(event.mouseWheelScroll.wheel, delta );
}
}
// #140 - Handle mouse movement for hover detection
else if (event.type == sf::Event::MouseMoved)
{
// Cast to PyScene to call do_mouse_hover
if (auto* pyscene = dynamic_cast<PyScene*>(currentScene())) {
pyscene->do_mouse_hover(event.mouseMove.x, event.mouseMove.y);
}
return;
}
else
return;