Added a dynamic layout system where UI elements can be moved about on a tiled grid.
This commit is contained in:
1 parent
ea6ba54666
commit
26c29df4ad
34 files changed
+1269
No files matched your search
@@ -0,0 +1,56 @@
|
||||
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))
|
||||
Reference in new issue
Block a user