Files
leonwww/Scripts/ResizableTextEdit.gd
2025-07-25 18:55:28 +03:00

65 lines
1.9 KiB
GDScript

extends TextEdit
@onready var resize_handle = TextureRect.new()
var is_resizing = false
var resize_start_pos = Vector2()
var original_size = Vector2()
var min_size = Vector2(100, 50)
func _ready():
# Create resize handle as TextureRect child of TextEdit
resize_handle.texture = load("res://Assets/Icons/resize-handle.svg")
resize_handle.size = Vector2(32, 32)
resize_handle.mouse_default_cursor_shape = Control.CURSOR_FDIAGSIZE
resize_handle.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
add_child(resize_handle)
# Position handle in bottom-right corner
_update_handle_position()
# Connect signals
resize_handle.gui_input.connect(_on_resize_handle_input)
resized.connect(_update_handle_position)
func _gui_input(event):
if event is InputEventMouseButton and get_global_rect().has_point(get_viewport().get_mouse_position()):
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
set_v_scroll(get_v_scroll() - 2)
accept_event()
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
set_v_scroll(get_v_scroll() + 2)
accept_event()
func _update_handle_position():
if resize_handle:
resize_handle.position = Vector2(size.x - 32, size.y - 32)
func _on_resize_handle_input(event):
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed:
is_resizing = true
resize_start_pos = event.global_position
original_size = size
else:
is_resizing = false
elif event is InputEventMouseMotion and is_resizing:
var delta = event.global_position - resize_start_pos
var new_size = original_size + delta
new_size.x = max(new_size.x, min_size.x)
new_size.y = max(new_size.y, min_size.y)
size = new_size
# Sync parent Control size
var parent_control = get_parent() as Control
if parent_control:
parent_control.size = new_size
parent_control.custom_minimum_size = new_size
if parent_control:
parent_control.size = new_size
parent_control.custom_minimum_size = new_size