chobit/shared/godot/ui/panel_window.gd

38 lines
1.2 KiB
GDScript

extends "res://addons/godot-ui/core/window_base.gd"
## Chobit floating panel window.
## Adds always-on-top and companion-relative positioning on top of the generic base.
func _ready() -> void:
always_on_top = true
super._ready()
_position_beside_companion()
func _position_beside_companion() -> void:
var companion_pos := DisplayServer.window_get_position(0)
var companion_size := DisplayServer.window_get_size(0)
var screen_idx := DisplayServer.get_primary_screen()
var screen_rect := DisplayServer.screen_get_usable_rect(screen_idx)
var my_w := size.x
var my_h := size.y
var gap := 8
var space_right: int = (
screen_rect.position.x + screen_rect.size.x - (companion_pos.x + companion_size.x + gap)
)
var space_left: int = companion_pos.x - screen_rect.position.x - gap
var x: int
if space_right >= my_w:
x = companion_pos.x + companion_size.x + gap
elif space_left >= my_w:
x = companion_pos.x - my_w - gap
else:
x = companion_pos.x + companion_size.x + gap
x = clampi(x, screen_rect.position.x, screen_rect.position.x + screen_rect.size.x - my_w)
var y := companion_pos.y + companion_size.y - my_h
y = clampi(y, screen_rect.position.y, screen_rect.position.y + screen_rect.size.y - my_h)
position = Vector2i(x, y)