diff --git a/.import/AutoKey.svg-09797a502f03e59abf87dd8bdf8ee9a3.md5 b/.import/AutoKey.svg-09797a502f03e59abf87dd8bdf8ee9a3.md5
new file mode 100644
index 0000000..a25918e
--- /dev/null
+++ b/.import/AutoKey.svg-09797a502f03e59abf87dd8bdf8ee9a3.md5
@@ -0,0 +1,3 @@
+source_md5="e854e52a58912d899b44cdfaf67c039b"
+dest_md5="5cc58da269282ecffc7f121c2668fa91"
+
diff --git a/.import/Breakpoint.svg-2a034179832e3659bce32e101377291c.md5 b/.import/Breakpoint.svg-2a034179832e3659bce32e101377291c.md5
new file mode 100644
index 0000000..ec4de06
--- /dev/null
+++ b/.import/Breakpoint.svg-2a034179832e3659bce32e101377291c.md5
@@ -0,0 +1,3 @@
+source_md5="421fe6feed9900a72b391ae2f3a49a9f"
+dest_md5="481ffa3488d7c271f5abafb5c74dbd9c"
+
diff --git a/.import/Breakpoint.svg-2a034179832e3659bce32e101377291c.stex b/.import/Breakpoint.svg-2a034179832e3659bce32e101377291c.stex
new file mode 100644
index 0000000..1684d0b
Binary files /dev/null and b/.import/Breakpoint.svg-2a034179832e3659bce32e101377291c.stex differ
diff --git a/.import/Callable.svg-dac906657e3c1de599d45509442e2e1f.md5 b/.import/Callable.svg-dac906657e3c1de599d45509442e2e1f.md5
new file mode 100644
index 0000000..6539440
--- /dev/null
+++ b/.import/Callable.svg-dac906657e3c1de599d45509442e2e1f.md5
@@ -0,0 +1,3 @@
+source_md5="d43d7774101664ffdb8781062ad911b9"
+dest_md5="d8393478cc461da81687edb57014c4d6"
+
diff --git a/.import/Callable.svg-dac906657e3c1de599d45509442e2e1f.stex b/.import/Callable.svg-dac906657e3c1de599d45509442e2e1f.stex
new file mode 100644
index 0000000..46d1c81
Binary files /dev/null and b/.import/Callable.svg-dac906657e3c1de599d45509442e2e1f.stex differ
diff --git a/.import/Camera2D.svg-f7ff9a7e2b7478fa3eeeac7dfc6b181f.stex b/.import/Camera2D.svg-f7ff9a7e2b7478fa3eeeac7dfc6b181f.stex
deleted file mode 100644
index fb93575..0000000
Binary files a/.import/Camera2D.svg-f7ff9a7e2b7478fa3eeeac7dfc6b181f.stex and /dev/null differ
diff --git a/.import/CheckBox.svg-1e2c29f5292789351aa4d038fa3c0d3c.md5 b/.import/CheckBox.svg-1e2c29f5292789351aa4d038fa3c0d3c.md5
new file mode 100644
index 0000000..bf1a577
--- /dev/null
+++ b/.import/CheckBox.svg-1e2c29f5292789351aa4d038fa3c0d3c.md5
@@ -0,0 +1,3 @@
+source_md5="e688f985a5b5d406a14a532f08b9e028"
+dest_md5="7ab47668df4fa6d7629b5fcbe80a398d"
+
diff --git a/.import/CheckBox.svg-1e2c29f5292789351aa4d038fa3c0d3c.stex b/.import/CheckBox.svg-1e2c29f5292789351aa4d038fa3c0d3c.stex
new file mode 100644
index 0000000..407c915
Binary files /dev/null and b/.import/CheckBox.svg-1e2c29f5292789351aa4d038fa3c0d3c.stex differ
diff --git a/.import/CodeEdit.svg-725e5b7a979be7643dacdceaf6e51c1e.md5 b/.import/CodeEdit.svg-725e5b7a979be7643dacdceaf6e51c1e.md5
new file mode 100644
index 0000000..7895ae3
--- /dev/null
+++ b/.import/CodeEdit.svg-725e5b7a979be7643dacdceaf6e51c1e.md5
@@ -0,0 +1,3 @@
+source_md5="22130fb03fe029d7e1900f73bdc6832e"
+dest_md5="ac25f6cf6b9e05cc8d3b390daff86f27"
+
diff --git a/.import/Collapse.svg-fc05914f9cfc68762ae5aceb9eb0a829.md5 b/.import/Collapse.svg-fc05914f9cfc68762ae5aceb9eb0a829.md5
new file mode 100644
index 0000000..dc115e6
--- /dev/null
+++ b/.import/Collapse.svg-fc05914f9cfc68762ae5aceb9eb0a829.md5
@@ -0,0 +1,3 @@
+source_md5="d308b712cdd7299655b43dd0def30e39"
+dest_md5="6cb63d4c47ddd04f1f416596d32586b5"
+
diff --git a/.import/CurveDelete.svg-80753246d1de78ea1f6142d77a172701.md5 b/.import/CurveDelete.svg-80753246d1de78ea1f6142d77a172701.md5
new file mode 100644
index 0000000..c35eef5
--- /dev/null
+++ b/.import/CurveDelete.svg-80753246d1de78ea1f6142d77a172701.md5
@@ -0,0 +1,3 @@
+source_md5="a1d35f924ac6962970344b1041205b39"
+dest_md5="5d5b64579975d9a240ce1f248326300f"
+
diff --git a/.import/Decal.svg-af02e568f66dc88c0139d5a2686c51fa.md5 b/.import/Decal.svg-af02e568f66dc88c0139d5a2686c51fa.md5
new file mode 100644
index 0000000..4995593
--- /dev/null
+++ b/.import/Decal.svg-af02e568f66dc88c0139d5a2686c51fa.md5
@@ -0,0 +1,3 @@
+source_md5="2c119dd169178477215433781f6a9f09"
+dest_md5="5faea3d53db58ff738a22c4045367b60"
+
diff --git a/.import/Dictionary.svg-4d588ce8e53ec3d807c6ada868d4e99a.md5 b/.import/Dictionary.svg-4d588ce8e53ec3d807c6ada868d4e99a.md5
new file mode 100644
index 0000000..9066762
--- /dev/null
+++ b/.import/Dictionary.svg-4d588ce8e53ec3d807c6ada868d4e99a.md5
@@ -0,0 +1,3 @@
+source_md5="d7d324a0bb354a37ce23e22bfc0ac138"
+dest_md5="7169ff27fb189d2a60301ba507e5d1cb"
+
diff --git a/.import/FileList.svg-34fca98868db9409549a0f01e78fccd8.md5 b/.import/FileList.svg-34fca98868db9409549a0f01e78fccd8.md5
new file mode 100644
index 0000000..74280d7
--- /dev/null
+++ b/.import/FileList.svg-34fca98868db9409549a0f01e78fccd8.md5
@@ -0,0 +1,3 @@
+source_md5="ef00bbdd280ffb6ebb075ada35b1e313"
+dest_md5="8cabb4f0d569906bbf1aa601902a5523"
+
diff --git a/.import/FileList.svg-34fca98868db9409549a0f01e78fccd8.stex b/.import/FileList.svg-34fca98868db9409549a0f01e78fccd8.stex
new file mode 100644
index 0000000..c831eb8
Binary files /dev/null and b/.import/FileList.svg-34fca98868db9409549a0f01e78fccd8.stex differ
diff --git a/.import/FileList.svg-fea9e083923987e11706404416eac4aa.md5 b/.import/FileList.svg-fea9e083923987e11706404416eac4aa.md5
new file mode 100644
index 0000000..74280d7
--- /dev/null
+++ b/.import/FileList.svg-fea9e083923987e11706404416eac4aa.md5
@@ -0,0 +1,3 @@
+source_md5="ef00bbdd280ffb6ebb075ada35b1e313"
+dest_md5="8cabb4f0d569906bbf1aa601902a5523"
+
diff --git a/.import/FileList.svg-fea9e083923987e11706404416eac4aa.stex b/.import/FileList.svg-fea9e083923987e11706404416eac4aa.stex
new file mode 100644
index 0000000..c831eb8
Binary files /dev/null and b/.import/FileList.svg-fea9e083923987e11706404416eac4aa.stex differ
diff --git a/.import/GizmoLight.svg-07c56552e09222e86220e98d59c4b005.md5 b/.import/GizmoLight.svg-07c56552e09222e86220e98d59c4b005.md5
new file mode 100644
index 0000000..a5ea856
--- /dev/null
+++ b/.import/GizmoLight.svg-07c56552e09222e86220e98d59c4b005.md5
@@ -0,0 +1,3 @@
+source_md5="f6244c228312e42dbf3a0386acd803df"
+dest_md5="b2d2a37543241dccae017b864dc98755"
+
diff --git a/.import/ItemList.svg-a05125672870f39e1266f7f224722cc1.md5 b/.import/ItemList.svg-a05125672870f39e1266f7f224722cc1.md5
new file mode 100644
index 0000000..9036fea
--- /dev/null
+++ b/.import/ItemList.svg-a05125672870f39e1266f7f224722cc1.md5
@@ -0,0 +1,3 @@
+source_md5="809977a16fcd1481151440d8d3b54a9c"
+dest_md5="a79785ef2d570b3341983475b7be6c7e"
+
diff --git a/.import/PointLight2D.svg-87715192c15e76517f9b49009b4e9af6.md5 b/.import/PointLight2D.svg-87715192c15e76517f9b49009b4e9af6.md5
new file mode 100644
index 0000000..3f1b9aa
--- /dev/null
+++ b/.import/PointLight2D.svg-87715192c15e76517f9b49009b4e9af6.md5
@@ -0,0 +1,3 @@
+source_md5="4546cfd7ff2fc4aa75c83810aab8832e"
+dest_md5="66bc2146c0615be73e81fac00eedc4c4"
+
diff --git a/.import/PointLight2D.svg-87715192c15e76517f9b49009b4e9af6.stex b/.import/PointLight2D.svg-87715192c15e76517f9b49009b4e9af6.stex
new file mode 100644
index 0000000..d096d08
Binary files /dev/null and b/.import/PointLight2D.svg-87715192c15e76517f9b49009b4e9af6.stex differ
diff --git a/.import/ProjectIconLoading.svg-ee480daa54efc1277728b55c31b39c43.md5 b/.import/ProjectIconLoading.svg-ee480daa54efc1277728b55c31b39c43.md5
new file mode 100644
index 0000000..c0153c2
--- /dev/null
+++ b/.import/ProjectIconLoading.svg-ee480daa54efc1277728b55c31b39c43.md5
@@ -0,0 +1,3 @@
+source_md5="d8c7d1577e01f1e217e58e4572d77baf"
+dest_md5="df5ebed27e9cc51f898a52233119982d"
+
diff --git a/.import/ProxyTexture.svg-5c0a95e1202605cb9ddfacf0d60ba4d3.md5 b/.import/ProxyTexture.svg-5c0a95e1202605cb9ddfacf0d60ba4d3.md5
new file mode 100644
index 0000000..23c5d4d
--- /dev/null
+++ b/.import/ProxyTexture.svg-5c0a95e1202605cb9ddfacf0d60ba4d3.md5
@@ -0,0 +1,3 @@
+source_md5="09478c940b19ae492c7749472d41a263"
+dest_md5="406d44234d50c33d9c93db69dd28f842"
+
diff --git a/.import/bookmark.svg-1b055340be6c81c852fbef5be8209bfb.md5 b/.import/bookmark.svg-1b055340be6c81c852fbef5be8209bfb.md5
new file mode 100644
index 0000000..3634c6e
--- /dev/null
+++ b/.import/bookmark.svg-1b055340be6c81c852fbef5be8209bfb.md5
@@ -0,0 +1,3 @@
+source_md5="b1926227601d265cdf2777d5f2a14e7d"
+dest_md5="733ab30af1fc0c35bcd96373592e7657"
+
diff --git a/.import/bookmark.svg-e9c02cf829e808f83fc1932e1fe8a430.md5 b/.import/bookmark.svg-e9c02cf829e808f83fc1932e1fe8a430.md5
new file mode 100644
index 0000000..3634c6e
--- /dev/null
+++ b/.import/bookmark.svg-e9c02cf829e808f83fc1932e1fe8a430.md5
@@ -0,0 +1,3 @@
+source_md5="b1926227601d265cdf2777d5f2a14e7d"
+dest_md5="733ab30af1fc0c35bcd96373592e7657"
+
diff --git a/.import/bookmark.svg-e9c02cf829e808f83fc1932e1fe8a430.stex b/.import/bookmark.svg-e9c02cf829e808f83fc1932e1fe8a430.stex
new file mode 100644
index 0000000..2e6bdaa
Binary files /dev/null and b/.import/bookmark.svg-e9c02cf829e808f83fc1932e1fe8a430.stex differ
diff --git a/Assets/Icons/Breakpoint.svg b/Assets/Icons/Breakpoint.svg
new file mode 100644
index 0000000..60d59b6
--- /dev/null
+++ b/Assets/Icons/Breakpoint.svg
@@ -0,0 +1 @@
+
diff --git a/Assets/Icons/Breakpoint.svg.import b/Assets/Icons/Breakpoint.svg.import
new file mode 100644
index 0000000..21185e6
--- /dev/null
+++ b/Assets/Icons/Breakpoint.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/Breakpoint.svg-2a034179832e3659bce32e101377291c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/Icons/Breakpoint.svg"
+dest_files=[ "res://.import/Breakpoint.svg-2a034179832e3659bce32e101377291c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/Assets/Icons/Callable.svg b/Assets/Icons/Callable.svg
new file mode 100644
index 0000000..3f0d33a
--- /dev/null
+++ b/Assets/Icons/Callable.svg
@@ -0,0 +1 @@
+
diff --git a/Assets/Icons/Camera2D.svg.import b/Assets/Icons/Callable.svg.import
similarity index 72%
rename from Assets/Icons/Camera2D.svg.import
rename to Assets/Icons/Callable.svg.import
index 1f35e62..662fbbc 100644
--- a/Assets/Icons/Camera2D.svg.import
+++ b/Assets/Icons/Callable.svg.import
@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
-path="res://.import/Camera2D.svg-f7ff9a7e2b7478fa3eeeac7dfc6b181f.stex"
+path="res://.import/Callable.svg-dac906657e3c1de599d45509442e2e1f.stex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://Assets/Icons/Camera2D.svg"
-dest_files=[ "res://.import/Camera2D.svg-f7ff9a7e2b7478fa3eeeac7dfc6b181f.stex" ]
+source_file="res://Assets/Icons/Callable.svg"
+dest_files=[ "res://.import/Callable.svg-dac906657e3c1de599d45509442e2e1f.stex" ]
[params]
diff --git a/Assets/Icons/Camera2D.svg b/Assets/Icons/Camera2D.svg
deleted file mode 100644
index a066e50..0000000
--- a/Assets/Icons/Camera2D.svg
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
diff --git a/Assets/Icons/CheckBox.svg b/Assets/Icons/CheckBox.svg
new file mode 100644
index 0000000..32eaf2d
--- /dev/null
+++ b/Assets/Icons/CheckBox.svg
@@ -0,0 +1 @@
+
diff --git a/Assets/Icons/CheckBox.svg.import b/Assets/Icons/CheckBox.svg.import
new file mode 100644
index 0000000..86ed12a
--- /dev/null
+++ b/Assets/Icons/CheckBox.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/CheckBox.svg-1e2c29f5292789351aa4d038fa3c0d3c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/Icons/CheckBox.svg"
+dest_files=[ "res://.import/CheckBox.svg-1e2c29f5292789351aa4d038fa3c0d3c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/Assets/Icons/FileList.svg b/Assets/Icons/FileList.svg
new file mode 100644
index 0000000..3ba4915
--- /dev/null
+++ b/Assets/Icons/FileList.svg
@@ -0,0 +1 @@
+
diff --git a/Assets/Icons/FileList.svg.import b/Assets/Icons/FileList.svg.import
new file mode 100644
index 0000000..5da1098
--- /dev/null
+++ b/Assets/Icons/FileList.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/FileList.svg-34fca98868db9409549a0f01e78fccd8.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/Icons/FileList.svg"
+dest_files=[ "res://.import/FileList.svg-34fca98868db9409549a0f01e78fccd8.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/Assets/Icons/PointLight2D.svg b/Assets/Icons/PointLight2D.svg
new file mode 100644
index 0000000..1a3222c
--- /dev/null
+++ b/Assets/Icons/PointLight2D.svg
@@ -0,0 +1 @@
+
diff --git a/Assets/Icons/PointLight2D.svg.import b/Assets/Icons/PointLight2D.svg.import
new file mode 100644
index 0000000..e14e545
--- /dev/null
+++ b/Assets/Icons/PointLight2D.svg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/PointLight2D.svg-87715192c15e76517f9b49009b4e9af6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Assets/Icons/PointLight2D.svg"
+dest_files=[ "res://.import/PointLight2D.svg-87715192c15e76517f9b49009b4e9af6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/Scenes/CommentGraphNode.tscn b/Scenes/CommentGraphNode.tscn
index 7e95281..ac0d6f0 100644
--- a/Scenes/CommentGraphNode.tscn
+++ b/Scenes/CommentGraphNode.tscn
@@ -1,25 +1,15 @@
-[gd_scene load_steps=20 format=2]
+[gd_scene load_steps=9 format=2]
[ext_resource path="res://Scripts/CommentGraphNode.gd" type="Script" id=1]
[ext_resource path="res://Assets/Icons/Remove.svg" type="Texture" id=2]
[ext_resource path="res://Assets/Icons/Add.svg" type="Texture" id=3]
-[ext_resource path="res://Assets/UserIcons/Up_right.svg" type="Texture" id=4]
-[ext_resource path="res://Assets/UserIcons/Down_right.svg" type="Texture" id=5]
-[ext_resource path="res://Assets/UserIcons/Right.svg" type="Texture" id=6]
-[ext_resource path="res://Assets/UserIcons/Simple-up.svg" type="Texture" id=7]
-[ext_resource path="res://Assets/UserIcons/Simple-down.svg" type="Texture" id=8]
-[ext_resource path="res://Assets/UserIcons/Double-up.svg" type="Texture" id=9]
-[ext_resource path="res://Assets/UserIcons/Double-right.svg" type="Texture" id=10]
-[ext_resource path="res://Assets/UserIcons/Double-down.svg" type="Texture" id=11]
-[ext_resource path="res://Assets/UserIcons/Disc.svg" type="Texture" id=12]
-[ext_resource path="res://Assets/UserIcons/Check.svg" type="Texture" id=13]
-[ext_resource path="res://Assets/UserIcons/Cross.svg" type="Texture" id=14]
-[ext_resource path="res://Assets/UserIcons/Question.svg" type="Texture" id=15]
-[ext_resource path="res://Assets/UserIcons/Exclamation.svg" type="Texture" id=16]
+[ext_resource path="res://Assets/Icons/PointLight2D.svg" type="Texture" id=4]
[ext_resource path="res://Resources/CommentNormalFrame.tres" type="StyleBox" id=17]
[ext_resource path="res://Resources/theme.tres" type="Theme" id=18]
[ext_resource path="res://Resources/CommentFocusFrame.tres" type="StyleBox" id=19]
+[sub_resource type="StyleBoxEmpty" id=1]
+
[node name="CommentNode" type="GraphNode"]
margin_right = 230.0
margin_bottom = 80.0
@@ -42,63 +32,44 @@ script = ExtResource( 1 )
[node name="VBoxContainer" type="VBoxContainer" parent="."]
margin_left = 16.0
margin_top = 24.0
-margin_right = 240.0
+margin_right = 214.0
margin_bottom = 74.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
-margin_right = 224.0
+margin_right = 198.0
margin_bottom = 24.0
size_flags_horizontal = 3
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"]
-margin_right = 128.0
+margin_right = 102.0
margin_bottom = 24.0
size_flags_horizontal = 3
-[node name="IconButton1" type="OptionButton" parent="VBoxContainer/HBoxContainer/HBoxContainer"]
-margin_right = 29.0
-margin_bottom = 24.0
-icon = ExtResource( 4 )
-flat = true
-expand_icon = true
-items = [ "", ExtResource( 4 ), false, 0, null, "", ExtResource( 6 ), false, 1, null, "", ExtResource( 5 ), false, 2, null, "", ExtResource( 9 ), false, 3, null, "", ExtResource( 10 ), false, 4, null, "", ExtResource( 11 ), false, 5, null, "", ExtResource( 13 ), false, 6, null, "", ExtResource( 15 ), false, 7, null, "", ExtResource( 16 ), false, 8, null, "", ExtResource( 14 ), false, 9, null, "", ExtResource( 12 ), false, 10, null, "", ExtResource( 7 ), false, 11, null, "", ExtResource( 8 ), false, 12, null ]
-selected = 0
-
-[node name="IconButton2" type="OptionButton" parent="VBoxContainer/HBoxContainer/HBoxContainer"]
-margin_left = 33.0
-margin_right = 62.0
+[node name="NewIconButton" type="Button" parent="VBoxContainer/HBoxContainer/HBoxContainer"]
+margin_right = 28.0
margin_bottom = 24.0
icon = ExtResource( 4 )
flat = true
-expand_icon = true
-items = [ "", ExtResource( 4 ), false, 0, null, "", ExtResource( 6 ), false, 1, null, "", ExtResource( 5 ), false, 2, null, "", ExtResource( 9 ), false, 3, null, "", ExtResource( 10 ), false, 4, null, "", ExtResource( 11 ), false, 5, null, "", ExtResource( 13 ), false, 6, null, "", ExtResource( 15 ), false, 7, null, "", ExtResource( 16 ), false, 8, null, "", ExtResource( 14 ), false, 9, null, "", ExtResource( 12 ), false, 10, null, "", ExtResource( 7 ), false, 11, null, "", ExtResource( 8 ), false, 12, null ]
-selected = 0
-[node name="IconButton3" type="OptionButton" parent="VBoxContainer/HBoxContainer/HBoxContainer"]
-margin_left = 66.0
-margin_right = 95.0
+[node name="DelIconButton" type="Button" parent="VBoxContainer/HBoxContainer/HBoxContainer"]
+margin_left = 32.0
+margin_right = 60.0
margin_bottom = 24.0
-icon = ExtResource( 4 )
+icon = ExtResource( 2 )
flat = true
-expand_icon = true
-items = [ "", ExtResource( 4 ), false, 0, null, "", ExtResource( 6 ), false, 1, null, "", ExtResource( 5 ), false, 2, null, "", ExtResource( 9 ), false, 3, null, "", ExtResource( 10 ), false, 4, null, "", ExtResource( 11 ), false, 5, null, "", ExtResource( 13 ), false, 6, null, "", ExtResource( 15 ), false, 7, null, "", ExtResource( 16 ), false, 8, null, "", ExtResource( 14 ), false, 9, null, "", ExtResource( 12 ), false, 10, null, "", ExtResource( 7 ), false, 11, null, "", ExtResource( 8 ), false, 12, null ]
-selected = 0
-[node name="IconButton4" type="OptionButton" parent="VBoxContainer/HBoxContainer/HBoxContainer"]
-margin_left = 99.0
-margin_right = 128.0
+[node name="IconBtnContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/HBoxContainer"]
+margin_left = 64.0
+margin_right = 102.0
margin_bottom = 24.0
-icon = ExtResource( 4 )
-flat = true
-expand_icon = true
-items = [ "", ExtResource( 4 ), false, 0, null, "", ExtResource( 6 ), false, 1, null, "", ExtResource( 5 ), false, 2, null, "", ExtResource( 9 ), false, 3, null, "", ExtResource( 10 ), false, 4, null, "", ExtResource( 11 ), false, 5, null, "", ExtResource( 13 ), false, 6, null, "", ExtResource( 15 ), false, 7, null, "", ExtResource( 16 ), false, 8, null, "", ExtResource( 14 ), false, 9, null, "", ExtResource( 12 ), false, 10, null, "", ExtResource( 7 ), false, 11, null, "", ExtResource( 8 ), false, 12, null ]
-selected = 0
+size_flags_horizontal = 3
+alignment = 1
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"]
-margin_left = 132.0
-margin_right = 224.0
+margin_left = 106.0
+margin_right = 198.0
margin_bottom = 24.0
[node name="AddButton" type="Button" parent="VBoxContainer/HBoxContainer/HBoxContainer2"]
@@ -120,20 +91,24 @@ margin_right = 92.0
margin_bottom = 24.0
rect_min_size = Vector2( 28, 24 )
hint_tooltip = "Frame background color"
-color = Color( 0.498039, 0.498039, 0.498039, 0.498039 )
+color = Color( 0.360784, 0.360784, 0.360784, 1 )
+edit_alpha = false
[node name="UserText" type="TextEdit" parent="VBoxContainer"]
margin_top = 28.0
-margin_right = 224.0
+margin_right = 198.0
margin_bottom = 50.0
rect_min_size = Vector2( 0, 20 )
size_flags_horizontal = 3
size_flags_vertical = 3
+custom_styles/normal = SubResource( 1 )
wrap_enabled = true
[connection signal="close_request" from="." to="." method="_on_CommentNode_close_request"]
[connection signal="dragged" from="." to="." method="_on_CommentNode_dragged"]
[connection signal="resize_request" from="." to="." method="_on_CommentNode_resize_request"]
+[connection signal="pressed" from="VBoxContainer/HBoxContainer/HBoxContainer/NewIconButton" to="." method="_on_NewIconButton_pressed"]
+[connection signal="pressed" from="VBoxContainer/HBoxContainer/HBoxContainer/DelIconButton" to="." method="_on_DelIconButton_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/HBoxContainer2/AddButton" to="." method="_on_AddButton_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/HBoxContainer2/SubButton" to="." method="_on_SubButton_pressed"]
[connection signal="color_changed" from="VBoxContainer/HBoxContainer/HBoxContainer2/ColorPicker" to="." method="_on_ColorPicker_color_changed"]
diff --git a/Scenes/DisplayDialog.tscn b/Scenes/DisplayDialog.tscn
index dc8d66b..a999baa 100644
--- a/Scenes/DisplayDialog.tscn
+++ b/Scenes/DisplayDialog.tscn
@@ -24,7 +24,6 @@ use_filter = true
font_data = SubResource( 1 )
[node name="DisplayDialog" type="WindowDialog"]
-visible = true
anchor_right = 1.0
anchor_bottom = 1.0
margin_right = -88.0
@@ -65,6 +64,7 @@ anchor_bottom = 1.0
custom_colors/font_color = Color( 1, 0.976471, 0.87451, 1 )
custom_colors/font_outline_modulate = Color( 0, 0, 0, 1 )
custom_colors/font_color_shadow = Color( 0, 0, 0, 1 )
+custom_constants/line_spacing = -2
custom_constants/shadow_as_outline = 1
custom_fonts/font = SubResource( 2 )
align = 1
diff --git a/Scenes/IconButton.tscn b/Scenes/IconButton.tscn
new file mode 100644
index 0000000..ff7d048
--- /dev/null
+++ b/Scenes/IconButton.tscn
@@ -0,0 +1,33 @@
+[gd_scene load_steps=16 format=2]
+
+[ext_resource path="res://Assets/UserIcons/Up_right.svg" type="Texture" id=1]
+[ext_resource path="res://Assets/UserIcons/Down_right.svg" type="Texture" id=2]
+[ext_resource path="res://Assets/UserIcons/Right.svg" type="Texture" id=3]
+[ext_resource path="res://Assets/UserIcons/Simple-up.svg" type="Texture" id=4]
+[ext_resource path="res://Assets/UserIcons/Simple-down.svg" type="Texture" id=5]
+[ext_resource path="res://Assets/UserIcons/Double-up.svg" type="Texture" id=6]
+[ext_resource path="res://Assets/UserIcons/Double-right.svg" type="Texture" id=7]
+[ext_resource path="res://Assets/UserIcons/Double-down.svg" type="Texture" id=8]
+[ext_resource path="res://Assets/UserIcons/Disc.svg" type="Texture" id=9]
+[ext_resource path="res://Assets/UserIcons/Check.svg" type="Texture" id=10]
+[ext_resource path="res://Assets/UserIcons/Cross.svg" type="Texture" id=11]
+[ext_resource path="res://Assets/UserIcons/Question.svg" type="Texture" id=12]
+[ext_resource path="res://Assets/UserIcons/Exclamation.svg" type="Texture" id=13]
+[ext_resource path="res://Scripts/IconButton.gd" type="Script" id=14]
+
+[sub_resource type="ImageTexture" id=1]
+flags = 0
+flags = 0
+
+[node name="IconButton" type="OptionButton"]
+margin_right = 48.0
+margin_bottom = 42.0
+rect_min_size = Vector2( 48, 24 )
+custom_icons/arrow = SubResource( 1 )
+icon = ExtResource( 1 )
+flat = true
+icon_align = 1
+expand_icon = true
+items = [ "", ExtResource( 1 ), false, 0, null, "", ExtResource( 3 ), false, 1, null, "", ExtResource( 2 ), false, 2, null, "", ExtResource( 6 ), false, 3, null, "", ExtResource( 7 ), false, 4, null, "", ExtResource( 8 ), false, 5, null, "", ExtResource( 10 ), false, 6, null, "", ExtResource( 12 ), false, 7, null, "", ExtResource( 13 ), false, 8, null, "", ExtResource( 11 ), false, 9, null, "", ExtResource( 9 ), false, 10, null, "", ExtResource( 4 ), false, 11, null, "", ExtResource( 5 ), false, 12, null ]
+selected = 0
+script = ExtResource( 14 )
diff --git a/Scenes/ImageGraphNode.tscn b/Scenes/ImageGraphNode.tscn
index 0682a29..87c65c7 100644
--- a/Scenes/ImageGraphNode.tscn
+++ b/Scenes/ImageGraphNode.tscn
@@ -77,6 +77,7 @@ anchor_bottom = 1.0
custom_colors/font_color = Color( 1, 0.976471, 0.87451, 1 )
custom_colors/font_outline_modulate = Color( 0, 0, 0, 1 )
custom_colors/font_color_shadow = Color( 0, 0, 0, 1 )
+custom_constants/line_spacing = -1
custom_constants/shadow_as_outline = 1
custom_fonts/font = SubResource( 2 )
align = 1
diff --git a/Scripts/CommentGraphNode.gd b/Scripts/CommentGraphNode.gd
index 28767f9..b10c617 100644
--- a/Scripts/CommentGraphNode.gd
+++ b/Scripts/CommentGraphNode.gd
@@ -6,11 +6,16 @@ const LEFT_MARGIN: = 16.0 # graph space
const TOP_MARGIN: = 80.0 # graph space
const RIGHT_MARGIN: = 16.0 # graph space
const BOTTOM_MARGIN: = 16.0 # graph space
-const FOCUS_COLOR_LIGHTEN: = 0.5
+const MAX_ICONBUTTON_COUNT: = 6
+const FOCUS_COLOR_S_FACTOR: = 1.2
+const FOCUS_COLOR_V_FACTOR: = 1.3
var img_nodes: = [] # array of ImageGraphNode
var old_offset: Vector2
+onready var iconButton = preload("res://Scenes/IconButton.tscn")
+
+onready var iconbutton_container: = $VBoxContainer/HBoxContainer/HBoxContainer/IconBtnContainer
onready var colorpicker: = $VBoxContainer/HBoxContainer/HBoxContainer2/ColorPicker
onready var user_text: = $VBoxContainer/UserText
@@ -20,6 +25,7 @@ onready var user_text: = $VBoxContainer/UserText
# rect_size is in graph space
func _ready():
+ assert(iconbutton_container)
assert(colorpicker)
assert(user_text)
old_offset = offset
@@ -46,11 +52,17 @@ func get_extra_data() -> Dictionary:
"title": get_title(),
"color": colorpicker.color,
"text": user_text.text,
- "img_node_names": [] # filled hereafter
+ "img_node_names": [], # filled below
+ "icon_buttons": [], # filled below
}
+
for node in img_nodes:
extra_data["img_node_names"].push_back(node.name)
+ for icon_button in iconbutton_container.get_children():
+ assert(icon_button is IconButton)
+ extra_data["icon_buttons"].push_back(icon_button.get_selected_id())
+
return extra_data
@@ -60,10 +72,17 @@ func set_extra_data(extra_data: Dictionary, old_to_new: Dictionary, update_size:
set_title(extra_data["title"])
set_color(extra_data["color"])
user_text.text = extra_data["text"]
+
img_nodes.clear()
for node_name in extra_data["img_node_names"]:
if old_to_new.has(node_name): # user might have copied a comment node without all of its image nodes
img_nodes.push_back(get_node("../" + old_to_new[node_name]))
+
+ for selected_id in extra_data["icon_buttons"]:
+ var icon_button = iconButton.instance()
+ iconbutton_container.add_child(icon_button)
+ icon_button.select(selected_id)
+
if update_size:
update_size_options()
if not img_nodes.empty():
@@ -82,7 +101,7 @@ func set_color(color: Color):
# Focused
custom_styles = get("custom_styles/commentfocus")
- var focus_color: Color = color.lightened(FOCUS_COLOR_LIGHTEN)
+ var focus_color: Color = color.from_hsv(color.h, color.s * FOCUS_COLOR_S_FACTOR, color.v * FOCUS_COLOR_V_FACTOR, 1.0)
custom_styles.bg_color = focus_color
custom_styles.border_color = focus_color
@@ -190,3 +209,18 @@ func _on_CommentNode_offset_changed():
func _on_CommentNode_dragged(from, to):
if img_nodes.size() > 0:
update_size()
+
+
+func _on_NewIconButton_pressed():
+ if iconbutton_container.get_child_count() >= MAX_ICONBUTTON_COUNT:
+ return
+ var icon_button = iconButton.instance()
+ iconbutton_container.add_child(icon_button)
+
+
+func _on_DelIconButton_pressed():
+ if iconbutton_container.get_child_count() == 0:
+ return
+ var icon_button = iconbutton_container.get_child(iconbutton_container.get_child_count()-1)
+ assert(icon_button is IconButton)
+ iconbutton_container.remove_child(icon_button)
diff --git a/Scripts/GraphEdit.gd b/Scripts/GraphEdit.gd
index b3c097c..d91c467 100644
--- a/Scripts/GraphEdit.gd
+++ b/Scripts/GraphEdit.gd
@@ -310,7 +310,7 @@ func resize_selected_img_nodes_to_custom_img_node_size():
# Creates a new image node and adds it to the graph, centered on the given offset (in graph space).
func add_new_image_node(ofs: Vector2, exclusive_select: bool = true, open_image_file: bool = true) -> ImageGraphNode:
- var node = imageGraphNode.instance()
+ var node: ImageGraphNode = imageGraphNode.instance()
add_child(node, true) # /!\ before set_offset
node.set_offset(ofs - node.rect_size / 2)
node.set_bg_color(img_node_bg_color)
diff --git a/Scripts/IconButton.gd b/Scripts/IconButton.gd
new file mode 100644
index 0000000..09e4241
--- /dev/null
+++ b/Scripts/IconButton.gd
@@ -0,0 +1,2 @@
+extends OptionButton
+class_name IconButton
diff --git a/project.godot b/project.godot
index 09d1e10..082b67e 100644
--- a/project.godot
+++ b/project.godot
@@ -34,6 +34,11 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://Scripts/GraphNodeData.gd"
}, {
+"base": "OptionButton",
+"class": "IconButton",
+"language": "GDScript",
+"path": "res://Scripts/IconButton.gd"
+}, {
"base": "GraphEdit",
"class": "ImageGraph",
"language": "GDScript",
@@ -50,6 +55,7 @@ _global_script_class_icons={
"DisplayDialog": "",
"GraphData": "",
"GraphNodeData": "",
+"IconButton": "",
"ImageGraph": "",
"ImageGraphNode": ""
}