#!/usr/bin/env python3 """Advanced test for UIFrame clipping with nested frames""" import mcrfpy from mcrfpy import Color, Frame, Caption, Vector import sys def test_nested_clipping(runtime): """Test nested frames with clipping""" mcrfpy.delTimer("test_nested_clipping") print("Testing advanced UIFrame clipping with nested frames...") # Create test scene scene = mcrfpy.sceneUI("test") # Create outer frame with clipping enabled outer = Frame(50, 50, 400, 300, fill_color=Color(50, 50, 150), outline_color=Color(255, 255, 255), outline=3) outer.name = "outer" outer.clip_children = True scene.append(outer) # Create inner frame that extends beyond outer bounds inner = Frame(200, 150, 300, 200, fill_color=Color(150, 50, 50), outline_color=Color(255, 255, 0), outline=2) inner.name = "inner" inner.clip_children = True # Also enable clipping on inner frame outer.children.append(inner) # Add content to inner frame that extends beyond its bounds for i in range(5): caption = Caption(10, 30 * i, f"Line {i+1}: This text should be double-clipped") caption.font_size = 14 caption.fill_color = Color(255, 255, 255) inner.children.append(caption) # Add a child frame to inner that extends way out deeply_nested = Frame(250, 100, 200, 150, fill_color=Color(50, 150, 50), outline_color=Color(255, 0, 255), outline=2) deeply_nested.name = "deeply_nested" inner.children.append(deeply_nested) # Add status text status = Caption(50, 380, "Nested clipping test:\n" "- Blue outer frame clips red inner frame\n" "- Red inner frame clips green deeply nested frame\n" "- All text should be clipped to frame bounds") status.font_size = 12 status.fill_color = Color(200, 200, 200) scene.append(status) # Test render texture size handling print(f"Outer frame size: {outer.w}x{outer.h}") print(f"Inner frame size: {inner.w}x{inner.h}") # Dynamically resize frames to test RenderTexture recreation def resize_test(runtime): mcrfpy.delTimer("resize_test") print("Resizing frames to test RenderTexture recreation...") outer.w = 450 outer.h = 350 inner.w = 350 inner.h = 250 print(f"New outer frame size: {outer.w}x{outer.h}") print(f"New inner frame size: {inner.w}x{inner.h}") # Take screenshot after resize mcrfpy.setTimer("screenshot_resize", take_resize_screenshot, 500) def take_resize_screenshot(runtime): mcrfpy.delTimer("screenshot_resize") from mcrfpy import automation automation.screenshot("frame_clipping_resized.png") print("\nAdvanced test completed!") print("Screenshots saved:") print(" - frame_clipping_resized.png (after resize)") sys.exit(0) # Take initial screenshot from mcrfpy import automation automation.screenshot("frame_clipping_nested.png") print("Initial screenshot saved: frame_clipping_nested.png") # Schedule resize test mcrfpy.setTimer("resize_test", resize_test, 1000) # Main execution print("Creating advanced test scene...") mcrfpy.createScene("test") mcrfpy.setScene("test") # Schedule the test mcrfpy.setTimer("test_nested_clipping", test_nested_clipping, 100) print("Advanced test scheduled, running...")