Add draggable/resizable panels

This commit is contained in:
Hamcha 2020-07-10 12:37:17 +02:00
parent fc5c2875a9
commit e592aa435c
Signed by: hamcha
GPG key ID: 477AFB9A47CD4B7F
6 changed files with 110 additions and 5 deletions

View file

@ -18,4 +18,5 @@ corner_radius_bottom_left = 4
[resource] [resource]
default_font = ExtResource( 1 ) default_font = ExtResource( 1 )
Panel/styles/panel = SubResource( 1 ) Panel/styles/panel = SubResource( 1 )
PanelContainer/styles/panel = SubResource( 1 )
PopupDialog/styles/panel = SubResource( 1 ) PopupDialog/styles/panel = SubResource( 1 )

View file

@ -10,7 +10,6 @@ script = ExtResource( 5 )
[node name="world" type="Node2D" parent="."] [node name="world" type="Node2D" parent="."]
scale = Vector2( 2, 2 ) scale = Vector2( 2, 2 )
script = ExtResource( 4 ) script = ExtResource( 4 )
mapToLoad = 1
[node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="CanvasLayer" type="CanvasLayer" parent="."]

View file

@ -1,6 +1,3 @@
extends Control extends Control
signal command(command) signal command(command)
#func _ready():
#$MapPopup.popup_centered_ratio()

View file

@ -1,7 +1,8 @@
[gd_scene load_steps=3 format=2] [gd_scene load_steps=4 format=2]
[ext_resource path="res://Scenes/UI/SpaceMap.tscn" type="PackedScene" id=1] [ext_resource path="res://Scenes/UI/SpaceMap.tscn" type="PackedScene" id=1]
[ext_resource path="res://Scenes/UI.gd" type="Script" id=2] [ext_resource path="res://Scenes/UI.gd" type="Script" id=2]
[ext_resource path="res://Scenes/UI/Widgets/ResizablePanel.tscn" type="PackedScene" id=3]
[node name="ui" type="Control"] [node name="ui" type="Control"]
anchor_right = 1.0 anchor_right = 1.0
@ -14,3 +15,8 @@ __meta__ = {
} }
[node name="MapPopup" parent="." instance=ExtResource( 1 )] [node name="MapPopup" parent="." instance=ExtResource( 1 )]
[node name="PanelContainer" parent="." instance=ExtResource( 3 )]
margin_right = 392.0
margin_bottom = 256.0
title = "Log"

View file

@ -0,0 +1,36 @@
tool
extends Panel
export var title = "Unnamed panel" setget set_title
var dragging = false
var resizing = false
var last_origin = Vector2.ZERO
var last_mouse = Vector2.ZERO
func _handle_drag(event):
if event is InputEventMouseButton:
dragging = event.pressed
last_origin = rect_position
last_mouse = event.global_position
if dragging and event is InputEventMouseMotion:
rect_position = last_origin + (event.global_position - last_mouse)
func _handle_resize(event):
if event is InputEventMouseButton:
resizing = event.pressed
last_origin = rect_size
last_mouse = event.global_position
if resizing and event is InputEventMouseMotion:
rect_size = last_origin + (event.global_position - last_mouse)
func _input(event):
if dragging and event is InputEventMouseButton and not event.pressed:
dragging = false
if resizing and event is InputEventMouseButton and not event.pressed:
dragging = false
func set_title(val):
title = val
$DragHandle/Label.text = title

View file

@ -0,0 +1,66 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://Scenes/UI/Widgets/ResizablePanel.gd" type="Script" id=1]
[sub_resource type="StyleBoxFlat" id=1]
bg_color = Color( 0.133333, 0.12549, 0.203922, 0.705882 )
border_width_left = 4
border_width_top = 4
border_width_right = 4
border_width_bottom = 4
border_color = Color( 0.0941176, 0.0823529, 0.180392, 1 )
border_blend = true
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
[node name="ResizablePanel" type="Panel"]
margin_left = 10.0
margin_top = 10.0
margin_right = 376.0
margin_bottom = 336.0
custom_styles/panel = SubResource( 1 )
script = ExtResource( 1 )
[node name="DragHandle" type="Panel" parent="."]
anchor_right = 1.0
margin_left = 4.0
margin_top = 4.0
margin_right = -4.0
margin_bottom = 32.0
rect_min_size = Vector2( 0, 28 )
size_flags_horizontal = 3
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Label" type="Label" parent="DragHandle"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 2.0
margin_top = 2.0
margin_right = 2.0
margin_bottom = 2.0
text = "Unnamed panel"
align = 1
valign = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="ResizeHandle" type="Panel" parent="."]
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = -15.0
margin_top = -15.0
rect_min_size = Vector2( 18, 18 )
size_flags_horizontal = 0
size_flags_vertical = 0
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="gui_input" from="DragHandle" to="." method="_handle_drag"]
[connection signal="gui_input" from="ResizeHandle" to="." method="_handle_resize"]