extends Control @export_enum("Landscape", "Dual portrait") var configuration := 0 @export var use_portrait_monitors := true func _ready() -> void: if configuration == 1: $Overview.overview_changed.connect($RightWindow/RightOverview.set_overview) $RightWindow/RightOverview.overview_changed.connect($Overview.set_overview) $RightWindow.close_requested.connect(get_tree().quit) if get_parent() == get_tree().root: _configure_windows.call_deferred() func _configure_windows() -> void: var window := get_window() var reference := Vector2i(1920, 1080) if configuration == 0 else Vector2i(1080, 1920) _prepare_window(window, reference) if configuration == 0: var usable := DisplayServer.screen_get_usable_rect() window.size = _preview_size(reference, usable.size, 1) window.title = "Layout / landscape" return var right: Window = $RightWindow _prepare_window(right, reference) window.title = "ROV / left portrait" var portrait_screens: Array[int] = [] for screen in range(DisplayServer.get_screen_count()): var dimensions := DisplayServer.screen_get_size(screen) if dimensions.y > dimensions.x: portrait_screens.append(screen) if use_portrait_monitors and portrait_screens.size() >= 2: window.current_screen = portrait_screens[0] window.mode = Window.MODE_MAXIMIZED right.current_screen = portrait_screens[1] right.show() right.mode = Window.MODE_MAXIMIZED else: var usable := DisplayServer.screen_get_usable_rect() var preview := _preview_size(reference, usable.size, 2) window.size = preview right.size = preview var origin := usable.position + (usable.size - Vector2i(preview.x * 2 + 16, preview.y)) / 2 window.position = origin right.position = origin + Vector2i(preview.x + 16, 0) right.show() func _prepare_window(window: Window, reference: Vector2i) -> void: window.content_scale_factor = 1.0 window.content_scale_size = reference window.content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS window.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_KEEP window.mode = Window.MODE_WINDOWED func _preview_size(reference: Vector2i, usable: Vector2i, count: int) -> Vector2i: var factor := minf(float(usable.x) * 0.85 / (reference.x * count + 16 * (count - 1)), float(usable.y) * 0.85 / reference.y) return Vector2i(Vector2(reference) * clampf(factor, 0.1, 1.0))