McRogueFace/tests
John McCardle 5a49cb7b6d feat(viewport): complete viewport-based rendering system (#8)
Implements a comprehensive viewport system that allows fixed game resolution
with flexible window scaling, addressing the primary wishes for issues #34, #49, and #8.

Key Features:
- Fixed game resolution independent of window size (window.game_resolution property)
- Three scaling modes accessible via window.scaling_mode:
  - "center": 1:1 pixels, viewport centered in window
  - "stretch": viewport fills window, ignores aspect ratio
  - "fit": maintains aspect ratio with black bars
- Automatic window-to-game coordinate transformation for mouse input
- Full Python API integration with PyWindow properties

Technical Implementation:
- GameEngine::ViewportMode enum with Center, Stretch, Fit modes
- SFML View system for efficient GPU-based viewport scaling
- updateViewport() recalculates on window resize or mode change
- windowToGameCoords() transforms mouse coordinates correctly
- PyScene mouse input automatically uses transformed coordinates

Tests:
- test_viewport_simple.py: Basic API functionality
- test_viewport_visual.py: Visual verification with screenshots
- test_viewport_scaling.py: Interactive mode switching and resizing

This completes the viewport-based rendering task and provides the foundation
for resolution-independent game development as requested for Crypt of Sokoban.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 10:28:50 -04:00
..
WORKING_automation_test_example.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
animation_demo.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
api_createScene_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
api_keypressScene_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
api_sceneUI_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
api_setScene_currentScene_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
api_timer_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
automation_click_issue78_analysis.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
automation_click_issue78_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
automation_screenshot_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
automation_screenshot_test_simple.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
debug_render_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
empty_script.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
exit_immediately_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
force_non_interactive.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
generate_caption_screenshot_fixed.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
generate_docs_screenshots.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
generate_docs_screenshots_simple.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
generate_entity_screenshot_fixed.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
generate_grid_screenshot.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
generate_sprite_screenshot.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
grid_at_argument_test.py feat(Grid): flexible at() method arguments 2025-07-05 20:35:33 -04:00
issue_9_minimal_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_9_rendertexture_resize_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_9_simple_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_9_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_12_gridpoint_instantiation_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_26_28_iterator_comprehensive_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_37_simple_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_37_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_37_windows_scripts_comprehensive_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_76_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_76_uientitycollection_type_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_79_color_properties_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_80_caption_font_size_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_81_sprite_index_standardization_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_82_sprite_scale_xy_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_83_position_tuple_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_84_pos_property_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_95_uicollection_repr_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_96_uicollection_extend_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
issue_99_texture_font_properties_test.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
keypress_scene_validation_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
run_all_tests.sh feat: stabilize test suite and add UIDrawable methods 2025-07-06 09:51:37 -04:00
run_issue_tests.py Squashed commit of the following: [alpha_streamline_1] 2025-07-05 18:56:02 -04:00
screenshot_transparency_fix_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
simple_screenshot_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
simple_timer_screenshot_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
test_frame_clipping.py feat(rendering): implement RenderTexture base infrastructure and UIFrame clipping (#6) 2025-07-06 16:13:12 -04:00
test_frame_clipping_advanced.py feat(rendering): implement RenderTexture base infrastructure and UIFrame clipping (#6) 2025-07-06 16:13:12 -04:00
test_grid_background.py docs: create RenderTexture overhaul design document 2025-07-06 16:00:11 -04:00
test_stdin_theory.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
test_viewport_scaling.py feat(viewport): complete viewport-based rendering system (#8) 2025-07-07 10:28:50 -04:00
test_viewport_simple.py feat(viewport): complete viewport-based rendering system (#8) 2025-07-07 10:28:50 -04:00
test_viewport_visual.py feat(viewport): complete viewport-based rendering system (#8) 2025-07-07 10:28:50 -04:00
trace_exec_behavior.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
trace_interactive.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Entity_issue73_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Frame_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Frame_test_detailed.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Grid_none_texture_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Grid_null_texture_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Grid_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Grid_test_no_grid.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Grid_test_simple.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_Sprite_issue19_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
ui_UICollection_issue69_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
unified_click_example.cpp feat: implement name system for finding UI elements (#39/40/41) 2025-07-06 12:02:37 -04:00
validate_screenshot_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00
working_timer_test.py Squashed commit of the following: [interpreter_mode] 2025-07-05 17:23:09 -04:00