x12 windowing system

This commit is contained in:
martyTF 2025-12-09 20:17:57 +01:00
parent e16b468e23
commit e6ab1fb39a
60 changed files with 701 additions and 877 deletions

View file

@ -0,0 +1,210 @@
extends Control
var pixel_x
var pixel_y
var ui_scale
var minsize
var restore_minimize
var module
var category = "character"
var item = "Grondir"
var origin = null
var distance = null
var dragPoint = null
var dragPoint_move = null
var minimized = false
var window_size
var window_position
var resizer
func _enter_tree() -> void:
module = load("res://01 - Menus/03 - Sheets/sheet.tscn").instantiate()
module.category = category
module.item = item
%window.position = Vector2(600,400)
%category.text = category
%item.text = item
%window.add_child(module)
ui_scale = 1
if get_viewport_rect().size[0] + get_viewport_rect().size[1] < 3000:
ui_scale = 0.7
pixel_x = get_viewport_rect().size[0] / ui_scale
pixel_y = get_viewport_rect().size[1] / ui_scale
module_fit_window()
#call_deferred("module_fit_window")
set_bar_items()
func _process(_delta: float) -> void:
if pixel_x != get_viewport_rect().size[0] or pixel_y != get_viewport_rect().size[1]:
pixel_x = get_viewport_rect().size[0]
pixel_y = get_viewport_rect().size[1]
if pixel_x + pixel_y > 3000:
ui_scale = 1
else:
ui_scale = 0.7
module_fit_window()
func module_fit_window():
if get_viewport_rect().size[0] > get_viewport_rect().size[1]:
module.get_child(0).size = %ui_background.size - Vector2(64,64)
module.get_child(0).position = %ui_background.position + Vector2(32,32)
else:
position = Vector2(0,0)
%ui_background.size = get_viewport_rect().size
module.get_child(0).size = %ui_background.size - Vector2(64,64)
module.get_child(0).position = Vector2(32,96)
%ui_bar.size.x = %ui_background.size.x
%item.position.x = 64
%close.position.x = %ui_bar.size.x - 92
%minimize.position.x = %close.position.x - 92
for i in [%size_right,%size_left,%size_bottom]:
i.visible = false
module.set_items()
move_child(module,1)
func _on_ui_bar_gui_input(ev: InputEvent) -> void:
if ev is InputEventMouseButton:
if ev.button_index == MOUSE_BUTTON_LEFT:
if ev.pressed:
dragPoint = get_global_mouse_position() - %window.get_position()
get_parent().move_child(self,get_parent().get_child_count())
else:
dragPoint = null
if ev is InputEventMouseMotion and dragPoint != null:
%window.position = get_global_mouse_position()/ui_scale - dragPoint/ui_scale
func _on_minimize_button_up() -> void:
if minimized:
for i in [%ui_background,module]:
i.visible = true
minimized = false
%minimize.text = "-"
for i in [%size_left,%size_right]:
i.size.y = %ui_bar.size.y + %ui_background.size.y
%size_bottom.visible = true
else:
for i in [%ui_background,module]:
i.visible = false
module.visible = false
minimized = true
%minimize.text = "+"
for i in [%size_left,%size_right]:
i.size.y = %ui_bar.size.y
%size_bottom.visible = false
func _on_close_button_up() -> void:
queue_free()
func _on_size_gui_input(ev: InputEvent) -> void:
match resizer:
"right":
resizer = %size_right
"left":
resizer = %size_left
"bottom":
resizer = %size_bottom
if ev is InputEventMouseButton:
if ev.button_index == MOUSE_BUTTON_LEFT:
if ev.pressed:
dragPoint = get_global_mouse_position() * ui_scale
origin = resizer.position
else:
var reset_right = %size_right.position.x - %size_left.position.x - 32
dragPoint = null
distance = null
origin = null
for i in [%size_left,%size_right]:
i.size.y = %ui_background.size.y + 32
i.position.y = 0
%size_bottom.size.x = %ui_bar.size.x
%size_bottom.position.x = %ui_bar.position.x
%window.set_position(%ui_bar.global_position)
%size_left.position = Vector2(-32,0)
%size_right.position.x = reset_right
if ev is InputEventMouseMotion and dragPoint :
distance = get_global_mouse_position() - dragPoint * ui_scale
resizer.position = origin + distance
for i in [%ui_background,%ui_bar]:
i.size.x = %size_right.position.x - %size_left.position.x
if %ui_background.size.x >= 700:
i.position.x = %size_left.position.x + 32
%ui_background.size.y = %size_bottom.position.y - %ui_bar.position.y - 32
set_bar_items()
module_fit_window()
func set_bar_items():
if %ui_background.size.y < 500:
%ui_background.size.y = 500
for i in [%size_left,%size_right]:
i.size.y = 500
%size_bottom.position.y = 532
minsize = true
else:
minsize = false
if %ui_bar.size.x < 700:
for i in [%ui_bar,%ui_background]:
i.size.x = 700
%size_left.position.x = %ui_bar.position.x - 32
elif %ui_bar.size.x < 1200:
%category.visible = false
%item.visible = true
%item.position.x = (%ui_bar.size.x - 256) / 6
minsize = false
else:
%category.visible = true
%item.visible = true
%category.position.x = %ui_bar.size.x /6
%item.position.x = %category.position.x + %category.size.x + 64
minsize = false
%close.position.x = %ui_bar.size.x - 96
%minimize.position.x = %ui_bar.size.x - 192
%size_right.position.x = %ui_bar.position.x + %ui_bar.size.x - 32
func _on_size_mouse_entered() -> void:
#print("in")
Input.set_default_cursor_shape(Input.CURSOR_HSIZE)
func _on_size_mouse_exited() -> void:
#print("out")
Input.set_default_cursor_shape(Input.CURSOR_ARROW)
func _on_size_right_mouse_entered() -> void:
_on_size_mouse_entered()
resizer = "right"
func _on_size_right_mouse_exited() -> void:
_on_size_mouse_exited()
dragPoint = null
func _on_size_left_mouse_entered() -> void:
_on_size_mouse_entered()
resizer = "left"
func _on_size_left_mouse_exited() -> void:
_on_size_mouse_exited()
dragPoint = null
func _on_size_bottom_mouse_entered() -> void:
_on_size_mouse_entered()
resizer = "bottom"
func _on_size_bottom_mouse_exited() -> void:
_on_size_mouse_exited()
dragPoint = null