237 lines
8.0 KiB
Python
237 lines
8.0 KiB
Python
#!/usr/bin/env python3
|
|
"""Test viewport scaling modes"""
|
|
|
|
import mcrfpy
|
|
from mcrfpy import Window, Frame, Caption, Color, Vector
|
|
import sys
|
|
|
|
def test_viewport_modes(runtime):
|
|
"""Test all three viewport scaling modes"""
|
|
mcrfpy.delTimer("test_viewport")
|
|
|
|
print("Testing viewport scaling modes...")
|
|
|
|
# Get window singleton
|
|
window = Window.get()
|
|
|
|
# Test initial state
|
|
print(f"Initial game resolution: {window.game_resolution}")
|
|
print(f"Initial scaling mode: {window.scaling_mode}")
|
|
print(f"Window resolution: {window.resolution}")
|
|
|
|
# Create test scene with visual elements
|
|
scene = mcrfpy.sceneUI("test")
|
|
|
|
# Create a frame that fills the game resolution to show boundaries
|
|
game_res = window.game_resolution
|
|
boundary = Frame(0, 0, game_res[0], game_res[1],
|
|
fill_color=Color(50, 50, 100),
|
|
outline_color=Color(255, 255, 255),
|
|
outline=2)
|
|
boundary.name = "boundary"
|
|
scene.append(boundary)
|
|
|
|
# Add corner markers
|
|
corner_size = 50
|
|
corners = [
|
|
(0, 0, "TL"), # Top-left
|
|
(game_res[0] - corner_size, 0, "TR"), # Top-right
|
|
(0, game_res[1] - corner_size, "BL"), # Bottom-left
|
|
(game_res[0] - corner_size, game_res[1] - corner_size, "BR") # Bottom-right
|
|
]
|
|
|
|
for x, y, label in corners:
|
|
corner = Frame(x, y, corner_size, corner_size,
|
|
fill_color=Color(255, 100, 100),
|
|
outline_color=Color(255, 255, 255),
|
|
outline=1)
|
|
scene.append(corner)
|
|
|
|
text = Caption(x + 5, y + 5, label)
|
|
text.font_size = 20
|
|
text.fill_color = Color(255, 255, 255)
|
|
scene.append(text)
|
|
|
|
# Add center crosshair
|
|
center_x = game_res[0] // 2
|
|
center_y = game_res[1] // 2
|
|
h_line = Frame(center_x - 50, center_y - 1, 100, 2,
|
|
fill_color=Color(255, 255, 0))
|
|
v_line = Frame(center_x - 1, center_y - 50, 2, 100,
|
|
fill_color=Color(255, 255, 0))
|
|
scene.append(h_line)
|
|
scene.append(v_line)
|
|
|
|
# Add mode indicator
|
|
mode_text = Caption(10, 10, f"Mode: {window.scaling_mode}")
|
|
mode_text.font_size = 24
|
|
mode_text.fill_color = Color(255, 255, 255)
|
|
mode_text.name = "mode_text"
|
|
scene.append(mode_text)
|
|
|
|
# Add instructions
|
|
instructions = Caption(10, 40,
|
|
"Press 1: Center mode (1:1 pixels)\n"
|
|
"Press 2: Stretch mode (fill window)\n"
|
|
"Press 3: Fit mode (maintain aspect ratio)\n"
|
|
"Press R: Change resolution\n"
|
|
"Press G: Change game resolution\n"
|
|
"Press Esc: Exit")
|
|
instructions.font_size = 14
|
|
instructions.fill_color = Color(200, 200, 200)
|
|
scene.append(instructions)
|
|
|
|
# Test changing modes
|
|
def test_mode_changes(runtime):
|
|
mcrfpy.delTimer("test_modes")
|
|
from mcrfpy import automation
|
|
|
|
print("\nTesting scaling modes:")
|
|
|
|
# Test center mode
|
|
window.scaling_mode = "center"
|
|
print(f"Set to center mode: {window.scaling_mode}")
|
|
mode_text.text = f"Mode: center (1:1 pixels)"
|
|
automation.screenshot("viewport_center_mode.png")
|
|
|
|
# Schedule next mode test
|
|
mcrfpy.setTimer("test_stretch", test_stretch_mode, 1000)
|
|
|
|
def test_stretch_mode(runtime):
|
|
mcrfpy.delTimer("test_stretch")
|
|
from mcrfpy import automation
|
|
|
|
window.scaling_mode = "stretch"
|
|
print(f"Set to stretch mode: {window.scaling_mode}")
|
|
mode_text.text = f"Mode: stretch (fill window)"
|
|
automation.screenshot("viewport_stretch_mode.png")
|
|
|
|
# Schedule next mode test
|
|
mcrfpy.setTimer("test_fit", test_fit_mode, 1000)
|
|
|
|
def test_fit_mode(runtime):
|
|
mcrfpy.delTimer("test_fit")
|
|
from mcrfpy import automation
|
|
|
|
window.scaling_mode = "fit"
|
|
print(f"Set to fit mode: {window.scaling_mode}")
|
|
mode_text.text = f"Mode: fit (aspect ratio maintained)"
|
|
automation.screenshot("viewport_fit_mode.png")
|
|
|
|
# Test different window sizes
|
|
mcrfpy.setTimer("test_resize", test_window_resize, 1000)
|
|
|
|
def test_window_resize(runtime):
|
|
mcrfpy.delTimer("test_resize")
|
|
from mcrfpy import automation
|
|
|
|
print("\nTesting window resize with fit mode:")
|
|
|
|
# Make window wider
|
|
window.resolution = (1280, 720)
|
|
print(f"Window resized to: {window.resolution}")
|
|
automation.screenshot("viewport_fit_wide.png")
|
|
|
|
# Make window taller
|
|
mcrfpy.setTimer("test_tall", test_tall_window, 1000)
|
|
|
|
def test_tall_window(runtime):
|
|
mcrfpy.delTimer("test_tall")
|
|
from mcrfpy import automation
|
|
|
|
window.resolution = (800, 1000)
|
|
print(f"Window resized to: {window.resolution}")
|
|
automation.screenshot("viewport_fit_tall.png")
|
|
|
|
# Test game resolution change
|
|
mcrfpy.setTimer("test_game_res", test_game_resolution, 1000)
|
|
|
|
def test_game_resolution(runtime):
|
|
mcrfpy.delTimer("test_game_res")
|
|
|
|
print("\nTesting game resolution change:")
|
|
window.game_resolution = (800, 600)
|
|
print(f"Game resolution changed to: {window.game_resolution}")
|
|
|
|
# Note: UI elements won't automatically reposition, but viewport will adjust
|
|
|
|
print("\nTest completed!")
|
|
print("Screenshots saved:")
|
|
print(" - viewport_center_mode.png")
|
|
print(" - viewport_stretch_mode.png")
|
|
print(" - viewport_fit_mode.png")
|
|
print(" - viewport_fit_wide.png")
|
|
print(" - viewport_fit_tall.png")
|
|
|
|
# Restore original settings
|
|
window.resolution = (1024, 768)
|
|
window.game_resolution = (1024, 768)
|
|
window.scaling_mode = "fit"
|
|
|
|
sys.exit(0)
|
|
|
|
# Start test sequence
|
|
mcrfpy.setTimer("test_modes", test_mode_changes, 500)
|
|
|
|
# Set up keyboard handler for manual testing
|
|
def handle_keypress(key, state):
|
|
if state != "start":
|
|
return
|
|
|
|
window = Window.get()
|
|
scene = mcrfpy.sceneUI("test")
|
|
mode_text = None
|
|
for elem in scene:
|
|
if hasattr(elem, 'name') and elem.name == "mode_text":
|
|
mode_text = elem
|
|
break
|
|
|
|
if key == "1":
|
|
window.scaling_mode = "center"
|
|
if mode_text:
|
|
mode_text.text = f"Mode: center (1:1 pixels)"
|
|
print(f"Switched to center mode")
|
|
elif key == "2":
|
|
window.scaling_mode = "stretch"
|
|
if mode_text:
|
|
mode_text.text = f"Mode: stretch (fill window)"
|
|
print(f"Switched to stretch mode")
|
|
elif key == "3":
|
|
window.scaling_mode = "fit"
|
|
if mode_text:
|
|
mode_text.text = f"Mode: fit (aspect ratio maintained)"
|
|
print(f"Switched to fit mode")
|
|
elif key == "r":
|
|
# Cycle through some resolutions
|
|
current = window.resolution
|
|
if current == (1024, 768):
|
|
window.resolution = (1280, 720)
|
|
elif current == (1280, 720):
|
|
window.resolution = (800, 600)
|
|
else:
|
|
window.resolution = (1024, 768)
|
|
print(f"Window resolution: {window.resolution}")
|
|
elif key == "g":
|
|
# Cycle game resolutions
|
|
current = window.game_resolution
|
|
if current == (1024, 768):
|
|
window.game_resolution = (800, 600)
|
|
elif current == (800, 600):
|
|
window.game_resolution = (640, 480)
|
|
else:
|
|
window.game_resolution = (1024, 768)
|
|
print(f"Game resolution: {window.game_resolution}")
|
|
elif key == "escape":
|
|
sys.exit(0)
|
|
|
|
# Main execution
|
|
print("Creating viewport test scene...")
|
|
mcrfpy.createScene("test")
|
|
mcrfpy.setScene("test")
|
|
mcrfpy.keypressScene(handle_keypress)
|
|
|
|
# Schedule the test
|
|
mcrfpy.setTimer("test_viewport", test_viewport_modes, 100)
|
|
|
|
print("Viewport test running...")
|
|
print("Use number keys to switch modes, R to resize window, G to change game resolution") |