38 lines
1.2 KiB
GDScript
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)
|