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>
2025-11-27 23:08:31 -05:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
"""Test #111: Click Events in Headless Mode"""
|
|
|
|
|
import mcrfpy
|
|
|
|
|
from mcrfpy import automation
|
|
|
|
|
import sys
|
|
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
errors = []
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
# Test 1: Click hit detection
|
|
|
|
|
print("Testing headless click events...")
|
|
|
|
|
test_click = mcrfpy.Scene("test_click")
|
|
|
|
|
mcrfpy.current_scene = test_click
|
|
|
|
|
ui = test_click.children
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
|
|
|
|
|
ui.append(frame)
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
start_clicks = []
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
def on_click_handler(pos, button, action):
|
|
|
|
|
if action == mcrfpy.InputState.PRESSED:
|
|
|
|
|
start_clicks.append((pos.x, pos.y))
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
frame.on_click = on_click_handler
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
# Click inside the frame
|
|
|
|
|
automation.click(150, 150)
|
|
|
|
|
mcrfpy.step(0.05)
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
if len(start_clicks) >= 1:
|
|
|
|
|
if abs(start_clicks[0][0] - 150) > 1 or abs(start_clicks[0][1] - 150) > 1:
|
|
|
|
|
errors.append(f"Click position wrong: expected ~(150,150), got {start_clicks[0]}")
|
|
|
|
|
else:
|
|
|
|
|
errors.append("No click received on frame")
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
# Test 2: Click miss (outside element)
|
|
|
|
|
print("Testing click miss...")
|
|
|
|
|
test_miss = mcrfpy.Scene("test_miss")
|
|
|
|
|
mcrfpy.current_scene = test_miss
|
|
|
|
|
ui2 = test_miss.children
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
frame2 = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
|
|
|
|
|
ui2.append(frame2)
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
miss_clicks = []
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
def on_miss_handler(pos, button, action):
|
|
|
|
|
miss_clicks.append(1)
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
frame2.on_click = on_miss_handler
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
# Click outside the frame
|
|
|
|
|
automation.click(50, 50)
|
|
|
|
|
mcrfpy.step(0.05)
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
if len(miss_clicks) > 0:
|
|
|
|
|
errors.append(f"Click outside frame should not trigger callback, got {len(miss_clicks)} events")
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
# Test 3: Position tracking
|
|
|
|
|
print("Testing position tracking...")
|
|
|
|
|
automation.moveTo(123, 456)
|
|
|
|
|
pos = automation.position()
|
|
|
|
|
if pos[0] != 123 or pos[1] != 456:
|
|
|
|
|
errors.append(f"Position tracking: expected (123,456), got {pos}")
|
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>
2025-11-27 23:08:31 -05:00
|
|
|
|
2026-02-09 08:15:18 -05:00
|
|
|
if errors:
|
|
|
|
|
for err in errors:
|
|
|
|
|
print(f"FAIL: {err}", file=sys.stderr)
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
else:
|
|
|
|
|
print("PASS: headless click events", file=sys.stderr)
|
|
|
|
|
sys.exit(0)
|