Initial Commit

This commit is contained in:
Mario Steele 2026-02-23 18:38:03 -06:00
commit 48a5e71e00
1136 changed files with 64347 additions and 0 deletions

View file

@ -0,0 +1 @@
<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 3 10 10M3 13 13 3" fill="none" stroke="#e0e0e0" stroke-width="2"/></svg>

After

Width:  |  Height:  |  Size: 168 B

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://4juherhkw8hp"
path="res://.godot/imported/Close.svg-9cdf2c31c5bc249987a101663dde96f2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/Close.svg"
dest_files=["res://.godot/imported/Close.svg-9cdf2c31c5bc249987a101663dde96f2.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg1"
sodipodi:docname="LTabBar.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="35.664698"
inkscape:cx="8.6920685"
inkscape:cy="10.416463"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="m 3,11.5 c 0,1.108 0.907,1.818 2,2 l 6,1 V 16 h 2 V 2 h -2 v 1.5 l -6,1 C 3.907,4.682 3,5.392 3,6.5 Z"
fill="#8eef97"
id="path1"
style="fill:#bfbfbf;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cod0nie30hnjp"
path="res://.godot/imported/LTabBar.svg-0e9371d55bcb56b674582e235e5d8a1d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/LTabBar.svg"
dest_files=["res://.godot/imported/LTabBar.svg-0e9371d55bcb56b674582e235e5d8a1d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg1"
sodipodi:docname="RTabBar.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="35.664698"
inkscape:cx="8.6920685"
inkscape:cy="10.416463"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="m 13,11.5 c 0,1.108 -0.907,1.818 -2,2 l -6,1 V 16 H 3 V 2 h 2 v 1.5 l 6,1 c 1.093,0.182 2,0.892 2,2 z"
fill="#8eef97"
id="path1"
style="fill:#bfbfbf;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://di3qxejijgp0e"
path="res://.godot/imported/RTabBar.svg-1cf63dac5b4ec3a67a7cdab390c157d7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/RTabBar.svg"
dest_files=["res://.godot/imported/RTabBar.svg-1cf63dac5b4ec3a67a7cdab390c157d7.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg1"
sodipodi:docname="TabBar.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="35.664698"
inkscape:cx="8.6920685"
inkscape:cy="10.430482"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M5.5 4c-1.108 0-1.818.907-2 2l-1 6H1v2h14v-2h-1.5l-1-6c-.182-1.093-.892-2-2-2z"
fill="#8eef97"
id="path1"
style="fill:#bfbfbf;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dceedsu8mfraw"
path="res://.godot/imported/TabBar.svg-e83cf2d6da8a41e35756355b8a0f3b2b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/TabBar.svg"
dest_files=["res://.godot/imported/TabBar.svg-e83cf2d6da8a41e35756355b8a0f3b2b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://r6u1jtnbr4eg"
path="res://.godot/imported/atop.png-fdfd8a2738a7960f4b5badd36ef62418.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/atop.png"
dest_files=["res://.godot/imported/atop.png-fdfd8a2738a7960f4b5badd36ef62418.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View file

@ -0,0 +1,9 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
<svg fill="#ffffff" width="64px" height="64px" viewBox="0 0 24.00 24.00" xmlns="http://www.w3.org/2000/svg" stroke="#ffffff" stroke-width="0.00024000000000000003" transform="rotate(0)">
<g id="SVGRepo_bgCarrier" stroke-width="0"/>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/>
<g id="SVGRepo_iconCarrier">
<path d="M17 11H7V7l-5 5 5 5v-4h10v4l5-5-5-5z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 591 B

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cractge21enk"
path="res://.godot/imported/expand.svg-c8a40c528bdc9ff1c7945508158c04ee.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/expand.svg"
dest_files=["res://.godot/imported/expand.svg-c8a40c528bdc9ff1c7945508158c04ee.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cxds5tr6aq5v3"
path="res://.godot/imported/file_in.png-349fab3e88dcbece78de5e93090cc9f9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/file_in.png"
dest_files=["res://.godot/imported/file_in.png-349fab3e88dcbece78de5e93090cc9f9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View file

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Expand icon by Arthur Shlain from Usefulicons.com -->
<svg
xml:space="preserve"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 16 16"
width="16"
height="16"
id="svg4"
sodipodi:docname="fill_expand.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs4" /><sodipodi:namedview
id="namedview4"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="16"
inkscape:cx="7.84375"
inkscape:cy="21.71875"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" /><g
style="fill:#bfbfbf;fill-opacity:1"
id="g4"
transform="matrix(0.2,0,0,0.2,-2,-2)"><path
d="M 10,40 H 25 V 25 H 40 V 10 H 10 Z"
stroke="none"
id="path1"
style="fill:#bfbfbf;fill-opacity:1" /><path
d="M 60,10 V 25 H 75 V 40 H 90 V 10 Z"
stroke="none"
id="path2"
style="fill:#bfbfbf;fill-opacity:1" /><path
d="M 75,75 H 60 V 90 H 90 V 57.5 H 75 Z"
stroke="none"
id="path3"
style="fill:#bfbfbf;fill-opacity:1" /><path
d="M 25,60 H 10 V 90 H 40 V 75 H 25 Z"
stroke="none"
id="path4"
style="fill:#bfbfbf;fill-opacity:1" /></g></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cejhhnje48450"
path="res://.godot/imported/fill_expand.svg-82bbfe3ae93c5fe880e9ec053c7ac4d3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/fill_expand.svg"
dest_files=["res://.godot/imported/fill_expand.svg-82bbfe3ae93c5fe880e9ec053c7ac4d3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b0vjxv8swip1d"
path="res://.godot/imported/github_CodeNameTwister.svg-d4436ff9173932734b4a3b29793961a3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/github_CodeNameTwister.svg"
dest_files=["res://.godot/imported/github_CodeNameTwister.svg-d4436ff9173932734b4a3b29793961a3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 33.866666 33.866666"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="minus_row.svg"
inkscape:export-filename="minus_split.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
inkscape:zoom="2.8756734"
inkscape:cx="48.510377"
inkscape:cy="74.24348"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"><path
style="fill:#00cccc;fill-opacity:1;stroke:none;stroke-width:0.988482;stroke-dasharray:none;stroke-opacity:1"
d="M 0.75775301,16.20492 C 0.8945574,15.980569 1.1973461,15.730474 1.4306169,15.649156 1.7365614,15.542503 6.0591616,15.501304 16.943127,15.501304 c 16.254612,0 15.689359,-0.02338 16.174412,0.669123 0.273543,0.390539 0.273543,1.148111 0,1.53865 -0.485083,0.692551 0.08213,0.669119 -16.198126,0.669119 -16.54951947,0 -15.7908994,0.03593 -16.20653607,-0.767808 C 0.44270362,17.087926 0.45504728,16.701341 0.75775301,16.20492 Z M 11.454897,26.463052 c 0.258919,-0.417352 0.68252,-0.630854 1.253402,-0.631724 0.357576,-4.94e-4 0.576643,0.166826 1.497614,1.144217 0.593325,0.629673 1.078802,1.188995 1.078838,1.242937 3.4e-5,0.05394 0.05891,0.09808 0.13083,0.09808 0.08381,0 0.130766,-1.214622 0.130766,-3.382332 0,-3.193068 0.01473,-3.401079 0.263584,-3.717418 0.390604,-0.496573 1.041257,-0.674891 1.604247,-0.439657 0.86717,0.362323 0.878226,0.415177 0.878928,4.20123 l 4.94e-4,3.40356 1.208972,-1.2761 c 1.151898,-1.215852 1.234574,-1.276046 1.75119,-1.274989 0.456283,9.89e-4 0.606542,0.07437 0.948068,0.463351 0.570794,0.6501 0.548142,1.171653 -0.08454,1.946524 -1.064585,1.303862 -4.299797,4.762574 -4.583026,4.899641 -0.408287,0.197588 -0.652127,0.183369 -1.267461,-0.07391 -0.389274,-0.162763 -1.013155,-0.769785 -2.42058,-2.355196 C 12.803354,29.53651 11.788268,28.361259 11.590482,28.099593 11.178361,27.554367 11.13112,26.984734 11.45476,26.463053 Z M 11.852155,5.6387719 c 1.064585,-1.3038585 4.2998,-4.76257578 4.58303,-4.8996436 0.870902,-0.42146391 1.349886,-0.0757078 3.88419,2.8038383 2.168501,2.4639109 2.224005,2.5415661 2.261755,3.1644726 0.03272,0.5403486 -0.013,0.6902816 -0.29743,0.9747023 C 21.904796,8.0610513 21.433245,8.1912838 20.928744,8.0563609 20.733786,8.0042185 20.122623,7.4512421 19.505177,6.7683297 L 18.423239,5.5716638 v 3.2036545 c 0,3.4383547 -0.06701,3.8679537 -0.669118,4.2896897 -0.390539,0.273543 -1.148111,0.273543 -1.53865,0 -0.602361,-0.421909 -0.669124,-0.850757 -0.669124,-4.2982302 v -3.21219 L 14.693994,6.5318947 C 14.225201,7.0694113 13.687656,7.6303203 13.499449,7.7783653 12.89196,8.2562171 11.89759,8.0505289 11.54812,7.3747286 11.233866,6.7670299 11.316586,6.2947185 11.852155,5.6387719 Z"
id="path1" /><path
style="fill:none;fill-opacity:1;stroke:#da1c1c;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="M 1.8633322,2.0363279 32.087411,32.006423"
id="path2" /></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cy5kd5rqu50mo"
path="res://.godot/imported/minus_row.svg-544028da056c25554a7fabef78831360.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/minus_row.svg"
dest_files=["res://.godot/imported/minus_row.svg-544028da056c25554a7fabef78831360.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
width="16"
height="16"
viewBox="0 0 0.32 0.32"
fill="#000000"
class="bi bi-pin-angle"
version="1.1"
id="svg1"
sodipodi:docname="pin.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="22.627417"
inkscape:cx="9.1039998"
inkscape:cy="11.777747"
inkscape:window-width="1825"
inkscape:window-height="1046"
inkscape:window-x="84"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="m 0.1940456,0.00154404 c 0.003023,-5.28e-6 0.005924,0.0011914 0.008064,0.00332643 L 0.31486466,0.1176257 c 0.004447,0.004448 0.004447,0.0116575 0,0.0161051 -0.0109328,0.0109329 -0.02442,0.013394 -0.0342365,0.013394 -0.004032,0 -0.007631,-4.0973e-4 -0.0104794,-8.8737e-4 l -0.0713879,0.0713879 c 0.001879,0.007572 0.003099,0.0152924 0.003645,0.0230749 0.001049,0.0159909 -7.2813e-4,0.0384279 -0.0164008,0.0540998 -0.004448,0.004446 -0.011657,0.004446 -0.0161046,0 l -0.0644414,-0.0644197 -0.0724823,0.0724823 c -0.004442,0.004442 -0.0277677,0.0205469 -0.0322095967,0.0161052 C -0.00367481,0.31452583 0.01242979,0.29117753 0.01687179,0.28675853 l 0.0724823,-0.0724828 -0.0644186,-0.0644414 c -0.004447,-0.004448 -0.004447,-0.0116575 0,-0.0161051 0.015672,-0.0156712 0.038109,-0.0174705 0.0540998,-0.0164017 0.007783,5.4545e-4 0.0155032,0.001765 0.0230749,0.003645 l 0.0713889,-0.07136622 c -5.9575e-4,-0.003469 -9.0041e-4,-0.0069817 -9.1079e-4,-0.01050143 0,-0.0097954 0.00246,-0.02328011 0.0134168,-0.0342365 0.002135,-0.00212849 0.005026,-0.00332392 0.00804,-0.00332434 z m 0.002779,0.04810897 v -4.557e-5 z m 0,-4.557e-5 v 4.557e-5 c 0.001341,0.0040864 2.6639e-4,0.0085798 -0.002779,0.01161677 L 0.1135223,0.14177015 c -0.003051,0.003038 -0.007555,0.004096 -0.01164,0.002733 h -4.557e-5 l -3.184e-4,-9.114e-5 c -0.002167,-6.4878e-4 -0.004355,-0.001226 -0.00656,-0.00173 -0.00573,-0.001337 -0.0115569,-0.002221 -0.0174259,-0.002643 -0.009613,-6.3637e-4 -0.0190433,1.8269e-4 -0.0267652,0.003418 l 0.1255113,0.12548867 c 0.003212,-0.007746 0.004032,-0.0171518 0.003394,-0.0267652 -5.8029e-4,-0.008138 -0.002047,-0.0161888 -0.004374,-0.0240088 l -9.109e-5,-2.9501e-4 v -2.277e-5 c -0.001372,-0.004091 -3.1393e-4,-0.008607 0.002733,-0.0116629 l 0.0805456,-0.0805253 c 0.003169,-0.003188 0.007916,-0.004215 0.0121193,-0.00262 l 0.002187,5.0105e-4 c 0.001981,3.8632e-4 0.004738,7.7498e-4 0.007837,7.7498e-4 0.002596,0 0.005238,-2.5052e-4 0.007812,-9.1076e-4 l -0.0921411,-0.0921173 c -6.6026e-4,0.0025739 -9.1079e-4,0.0052385 -9.1079e-4,0.0078123 1.095e-5,0.0035398 4.8566e-4,0.0070629 0.001412,0.01047936 z"
id="path1"
style="fill:#bfbfbf;fill-opacity:1;stroke:none;stroke-width:0.02;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccsccccccccccccccccccccccccccccccccccccccccsccccc" />
<path
style="fill:none;fill-opacity:1;stroke:none;stroke-width:0.000662336;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;paint-order:stroke markers fill"
d="m 8.847733e-4,0.31609514 c 1.114e-5,-0.003708 0.003321997,-0.0107257 0.009189997,-0.0194771 0.003542,-0.005283 0.0139747,-0.0162761 0.0420059,-0.0442638 0.0205112,-0.0204794 0.0372932,-0.0376333 0.0372932,-0.0381198 0,-4.864e-4 -0.0147728,-0.0156533 -0.0328285,-0.0337042 -0.0180556,-0.0180508 -0.0332812,-0.0339128 -0.0338346,-0.0352487 -0.001553,-0.003748 -2.8146e-4,-0.008159 0.003395,-0.0117817 0.014436,-0.0142218 0.0372471,-0.018876 0.0676725,-0.0138072 l 0.008909,0.001484 0.0353653,-0.03535721 0.0353653,-0.03535722 -6.22e-5,-0.0097732 c -6.815e-5,-0.01083383 0.001188,-0.01658836 0.005478,-0.02508566 0.005492,-0.01087891 0.0128671,-0.0156869672 0.0193468,-0.01261216 0.001639,7.7775e-4 0.0287382,0.02724195 0.0608717,0.05944521 0.0474202,0.04752318 0.0580139,0.05856399 0.0584493,0.06091577 8.396e-4,0.004536 -0.001564,0.00924 -0.006739,0.0131897 -0.009699,0.007402 -0.0180834,0.009959 -0.0318805,0.009722 l -0.009215,-1.582e-4 -0.0356682,0.0356603 -0.0356682,0.0356602 0.001711,0.008481 c 0.002269,0.01125 0.002436,0.0311233 3.406e-4,0.0404626 -0.003012,0.0134196 -0.0125061,0.0283783 -0.0194712,0.030677 -0.002202,7.268e-4 -0.003822,7.44e-4 -0.005886,6.2e-5 -0.001953,-6.438e-4 -0.013168,-0.011262 -0.0357015,-0.0338015 -0.0180695,-0.0180743 -0.0332439,-0.0328624 -0.0337209,-0.0328624 -4.7696e-4,0 -0.017828,0.0169032 -0.0385579,0.0375626 -0.0228158,0.0227382 -0.0398392,0.0389953 -0.0431347,0.0411928 -0.008274,0.005518 -0.0170129,0.009733 -0.0201854,0.009738 -0.002631,3.96e-6 -0.002846997,-2.122e-4 -0.002839337,-0.002843 z M 0.17776183,0.2663091 c 5.1564e-4,-0.001479 0.001405,-0.006032 0.001977,-0.010117 0.001211,-0.008655 9.44e-5,-0.0221019 -0.002762,-0.0332703 -0.003305,-0.0129211 -0.007375,-0.00738 0.0409353,-0.0557275 0.0234676,-0.0234857 0.0438048,-0.043172 0.0451936,-0.0437473 0.001932,-8.0026e-4 0.003554,-8.085e-4 0.006905,-3.52e-5 0.005009,0.001156 0.017943,0.001365 0.0186011,3.001e-4 5.964e-4,-9.65e-4 -0.0918149,-0.09327603 -0.0925957,-0.09249522 -9.7106e-4,9.7106e-4 -7.2422e-4,0.01402934 3.455e-4,0.0182776 7.0182e-4,0.0027872 7.0196e-4,0.0046268 4.7e-7,0.0067523 -0.001355,0.0041058 -0.0844391,0.08708087 -0.088087,0.08797146 -0.001631,3.9815e-4 -0.005466,-6.756e-5 -0.0105146,-0.001277 -0.0112791,-0.002702 -0.0225878,-0.003914 -0.0307569,-0.003297 -0.007074,5.3422e-4 -0.0161823,0.002711 -0.0161823,0.003868 0,7.8118e-4 0.12464918,0.12548637 0.12543001,0.12548637 3.1556e-4,0 9.9564e-4,-0.00121 0.001511,-0.002689 z"
id="path2" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.000468342;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;paint-order:stroke markers fill"
d="m 0.11415736,0.206175 c -0.034162,-0.0341689 -0.0621128,-0.0623141 -0.0621128,-0.0625448 0,-7.0156e-4 0.00618,-0.002251 0.0120818,-0.00303 0.009153,-0.001207 0.0197559,-1.984e-4 0.0338084,0.003217 0.006898,0.001677 0.008099,0.00181 0.0105328,0.001172 0.002495,-6.5429e-4 0.006632,-0.004598 0.0450708,-0.0429603 0.0262861,-0.02623378 0.0426619,-0.04303155 0.0432156,-0.04432914 0.001115,-0.0026127 0.001101,-0.0055361 -5.021e-5,-0.01030228 -9.2315e-4,-0.0038232 -0.001162,-0.01217371 -4.0233e-4,-0.01409058 3.3736e-4,-8.5174e-4 0.0100126,0.0085063 0.0458695,0.0443657 0.0405222,0.04052506 0.0452841,0.0454874 0.0439837,0.04583553 -0.002574,6.8916e-4 -0.0100197,4.1518e-4 -0.0138499,-5.0966e-4 -0.004981,-0.001203 -0.007569,-0.001142 -0.0105328,2.464e-4 -0.001689,7.9112e-4 -0.0158353,0.0145533 -0.0444084,0.043202 -0.038066,0.0381668 -0.0419964,0.0422942 -0.0426505,0.0447878 -6.383e-4,0.002434 -5.047e-4,0.003634 0.001172,0.0105328 0.002317,0.009532 0.003039,0.0140173 0.003546,0.0220358 4.3796e-4,0.006917 -4.298e-4,0.0156764 -0.002081,0.0210097 l -0.00108,0.003487 z"
id="path4" />
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://7rel5pr2g7d2"
path="res://.godot/imported/pin.svg-fc2020fc902e599cc597f694f431fc67.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/pin.svg"
dest_files=["res://.godot/imported/pin.svg-fc2020fc902e599cc597f694f431fc67.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 33.866666 33.866666"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="plus_row.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
inkscape:zoom="2.8756734"
inkscape:cx="50.944589"
inkscape:cy="89.544244"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"><path
style="fill:#00cccc;fill-opacity:1;stroke:none;stroke-width:0.988482;stroke-dasharray:none;stroke-opacity:1"
d="M 0.75775301,16.20492 C 0.8945574,15.980569 1.1973461,15.730474 1.4306169,15.649156 1.7365614,15.542503 6.0591616,15.501304 16.943127,15.501304 c 16.254612,0 15.689359,-0.02338 16.174412,0.669123 0.273543,0.390539 0.273543,1.148111 0,1.53865 -0.485083,0.692551 0.08213,0.669119 -16.198126,0.669119 -16.54951947,0 -15.7908994,0.03593 -16.20653607,-0.767808 C 0.44270362,17.087926 0.45504728,16.701341 0.75775301,16.20492 Z M 11.454897,26.463052 c 0.258919,-0.417352 0.68252,-0.630854 1.253402,-0.631724 0.357576,-4.94e-4 0.576643,0.166826 1.497614,1.144217 0.593325,0.629673 1.078802,1.188995 1.078838,1.242937 3.4e-5,0.05394 0.05891,0.09808 0.13083,0.09808 0.08381,0 0.130766,-1.214622 0.130766,-3.382332 0,-3.193068 0.01473,-3.401079 0.263584,-3.717418 0.390604,-0.496573 1.041257,-0.674891 1.604247,-0.439657 0.86717,0.362323 0.878226,0.415177 0.878928,4.20123 l 4.94e-4,3.40356 1.208972,-1.2761 c 1.151898,-1.215852 1.234574,-1.276046 1.75119,-1.274989 0.456283,9.89e-4 0.606542,0.07437 0.948068,0.463351 0.570794,0.6501 0.548142,1.171653 -0.08454,1.946524 -1.064585,1.303862 -4.299797,4.762574 -4.583026,4.899641 -0.408287,0.197588 -0.652127,0.183369 -1.267461,-0.07391 -0.389274,-0.162763 -1.013155,-0.769785 -2.42058,-2.355196 C 12.803354,29.53651 11.788268,28.361259 11.590482,28.099593 11.178361,27.554367 11.13112,26.984734 11.45476,26.463053 Z M 11.852155,5.6387719 c 1.064585,-1.3038585 4.2998,-4.76257578 4.58303,-4.8996436 0.870902,-0.42146391 1.349886,-0.0757078 3.88419,2.8038383 2.168501,2.4639109 2.224005,2.5415661 2.261755,3.1644726 0.03272,0.5403486 -0.013,0.6902816 -0.29743,0.9747023 C 21.904796,8.0610513 21.433245,8.1912838 20.928744,8.0563609 20.733786,8.0042185 20.122623,7.4512421 19.505177,6.7683297 L 18.423239,5.5716638 v 3.2036545 c 0,3.4383547 -0.06701,3.8679537 -0.669118,4.2896897 -0.390539,0.273543 -1.148111,0.273543 -1.53865,0 -0.602361,-0.421909 -0.669124,-0.850757 -0.669124,-4.2982302 v -3.21219 L 14.693994,6.5318947 C 14.225201,7.0694113 13.687656,7.6303203 13.499449,7.7783653 12.89196,8.2562171 11.89759,8.0505289 11.54812,7.3747286 11.233866,6.7670299 11.316586,6.2947185 11.852155,5.6387719 Z"
id="path1" /></g></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cj6sg45m64fiv"
path="res://.godot/imported/plus_row.svg-c644e3f245eec8d807df6e16bc34686c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/plus_row.svg"
dest_files=["res://.godot/imported/plus_row.svg-c644e3f245eec8d807df6e16bc34686c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32.032799"
height="32.52734"
viewBox="0 0 8.4753445 8.6061919"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:export-filename="sep_bottom.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
showguides="false"><inkscape:page
x="0"
y="0"
width="8.4753447"
height="8.6061916"
id="page2"
margin="0"
bleed="0" /></sodipodi:namedview><defs
id="defs1" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g9"
style="fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:1.12937;stroke-opacity:1"
transform="matrix(0,-1.0495645,-0.74698268,0,117.95725,112.58273)"><path
style="display:inline;fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:4.51751;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
d="m 389.81575,591.16994 c -0.002,-1.87146 -0.0395,-5.61322 -0.0825,-8.31503 -0.0871,-5.46872 -0.0618,-5.27544 -0.71227,-5.44766 -0.54122,-0.14329 -3.42685,-0.2145 -4.67888,-0.11546 -1.06557,0.0843 -1.1524,0.1057 -1.34735,0.33236 -0.41528,0.48279 -0.25605,1.17389 0.58065,2.52011 0.48456,0.77965 0.53548,0.90958 0.53548,1.36644 0,0.47359 -0.0478,0.5823 -0.77113,1.75567 l -0.77112,1.25081 -1.96417,-2.94225 c -2.11509,-3.16833 -3.80205,-5.80833 -3.89137,-6.08977 -0.076,-0.23945 0.69307,-1.50082 3.45547,-5.6674 1.24908,-1.88402 2.30049,-3.45706 2.33646,-3.49564 0.0718,-0.0771 1.29172,1.8065 1.51313,2.3364 0.27621,0.66107 0.23334,0.7995 -0.77937,2.51685 -0.47658,0.80818 -0.59411,1.553 -0.30197,1.91362 0.26111,0.32232 0.72261,0.37808 3.14838,0.38044 2.40813,0.002 3.14493,-0.0754 3.37841,-0.35625 0.20726,-0.24934 0.25216,-1.61982 0.32421,-9.89519 l 0.0611,-7.01082 h 1.21875 1.21876 v 19.18271 19.1827 h -1.23318 -1.23317 z"
id="path8"
transform="scale(0.26458333)" /><path
style="display:inline;fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:4.51751;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
d="m 400.69022,575.38988 v -19.18271 h 1.23317 1.23318 v 19.18271 19.1827 h -1.23318 -1.23317 z"
id="path9"
transform="scale(0.26458333)" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dt830c42xmul5"
path="res://.godot/imported/sep_bottom.svg-61090b97968673a2d1c2316fdbd96a52.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/sep_bottom.svg"
dest_files=["res://.godot/imported/sep_bottom.svg-61090b97968673a2d1c2316fdbd96a52.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32.52734"
height="32.032799"
viewBox="0 0 8.6061919 8.4753445"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:export-filename="sep_right.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
showguides="false"><inkscape:page
x="0"
y="0"
width="8.6061916"
height="8.4753447"
id="page2"
margin="0"
bleed="0" /></sodipodi:namedview><defs
id="defs1" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0.06542295,-0.06542216)"><g
id="g9"
style="fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:1.12937;stroke-opacity:1"
transform="matrix(1.0495645,0,0,0.74698268,-104.04196,-109.41648)"><path
style="display:inline;fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:4.51751;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
d="m 389.81575,591.16994 c -0.002,-1.87146 -0.0395,-5.61322 -0.0825,-8.31503 -0.0871,-5.46872 -0.0618,-5.27544 -0.71227,-5.44766 -0.54122,-0.14329 -3.42685,-0.2145 -4.67888,-0.11546 -1.06557,0.0843 -1.1524,0.1057 -1.34735,0.33236 -0.41528,0.48279 -0.25605,1.17389 0.58065,2.52011 0.48456,0.77965 0.53548,0.90958 0.53548,1.36644 0,0.47359 -0.0478,0.5823 -0.77113,1.75567 l -0.77112,1.25081 -1.96417,-2.94225 c -2.11509,-3.16833 -3.80205,-5.80833 -3.89137,-6.08977 -0.076,-0.23945 0.69307,-1.50082 3.45547,-5.6674 1.24908,-1.88402 2.30049,-3.45706 2.33646,-3.49564 0.0718,-0.0771 1.29172,1.8065 1.51313,2.3364 0.27621,0.66107 0.23334,0.7995 -0.77937,2.51685 -0.47658,0.80818 -0.59411,1.553 -0.30197,1.91362 0.26111,0.32232 0.72261,0.37808 3.14838,0.38044 2.40813,0.002 3.14493,-0.0754 3.37841,-0.35625 0.20726,-0.24934 0.25216,-1.61982 0.32421,-9.89519 l 0.0611,-7.01082 h 1.21875 1.21876 v 19.18271 19.1827 h -1.23318 -1.23317 z"
id="path8"
transform="scale(0.26458333)" /><path
style="display:inline;fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:4.51751;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
d="m 400.69022,575.38988 v -19.18271 h 1.23317 1.23318 v 19.18271 19.1827 h -1.23318 -1.23317 z"
id="path9"
transform="scale(0.26458333)" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://wp32fwv4flno"
path="res://.godot/imported/sep_left.svg-a3dbf802dac574852ac4942fe902046b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/sep_left.svg"
dest_files=["res://.godot/imported/sep_left.svg-a3dbf802dac574852ac4942fe902046b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32.52734"
height="32.032799"
viewBox="0 0 8.6061919 8.4753445"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:export-filename="sep_bottom.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
showguides="false"><inkscape:page
x="0"
y="0"
width="8.6061916"
height="8.4753447"
id="page2"
margin="0"
bleed="0" /></sodipodi:namedview><defs
id="defs1" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0.06541915,-0.06542216)"><g
id="g9"
style="fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:1.12937;stroke-opacity:1"
transform="matrix(-1.0495645,0,0,0.74698268,112.51731,-109.41648)"><path
style="display:inline;fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:4.51751;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
d="m 389.81575,591.16994 c -0.002,-1.87146 -0.0395,-5.61322 -0.0825,-8.31503 -0.0871,-5.46872 -0.0618,-5.27544 -0.71227,-5.44766 -0.54122,-0.14329 -3.42685,-0.2145 -4.67888,-0.11546 -1.06557,0.0843 -1.1524,0.1057 -1.34735,0.33236 -0.41528,0.48279 -0.25605,1.17389 0.58065,2.52011 0.48456,0.77965 0.53548,0.90958 0.53548,1.36644 0,0.47359 -0.0478,0.5823 -0.77113,1.75567 l -0.77112,1.25081 -1.96417,-2.94225 c -2.11509,-3.16833 -3.80205,-5.80833 -3.89137,-6.08977 -0.076,-0.23945 0.69307,-1.50082 3.45547,-5.6674 1.24908,-1.88402 2.30049,-3.45706 2.33646,-3.49564 0.0718,-0.0771 1.29172,1.8065 1.51313,2.3364 0.27621,0.66107 0.23334,0.7995 -0.77937,2.51685 -0.47658,0.80818 -0.59411,1.553 -0.30197,1.91362 0.26111,0.32232 0.72261,0.37808 3.14838,0.38044 2.40813,0.002 3.14493,-0.0754 3.37841,-0.35625 0.20726,-0.24934 0.25216,-1.61982 0.32421,-9.89519 l 0.0611,-7.01082 h 1.21875 1.21876 v 19.18271 19.1827 h -1.23318 -1.23317 z"
id="path8"
transform="scale(0.26458333)" /><path
style="display:inline;fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:4.51751;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
d="m 400.69022,575.38988 v -19.18271 h 1.23317 1.23318 v 19.18271 19.1827 h -1.23318 -1.23317 z"
id="path9"
transform="scale(0.26458333)" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d1ee2fk3y8n83"
path="res://.godot/imported/sep_right.svg-a91956bf42da3469be85043a09fd95d6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/sep_right.svg"
dest_files=["res://.godot/imported/sep_right.svg-a91956bf42da3469be85043a09fd95d6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32.032799"
height="32.52734"
viewBox="0 0 8.4753445 8.6061919"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:export-filename="sep_left.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
showguides="false"><inkscape:page
x="0"
y="0"
width="8.4753447"
height="8.6061916"
id="page2"
margin="0"
bleed="0" /></sodipodi:namedview><defs
id="defs1" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g9"
style="fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:1.12937;stroke-opacity:1"
transform="matrix(0,1.0495645,-0.74698268,0,117.95725,-103.97654)"><path
style="display:inline;fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:4.51751;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
d="m 389.81575,591.16994 c -0.002,-1.87146 -0.0395,-5.61322 -0.0825,-8.31503 -0.0871,-5.46872 -0.0618,-5.27544 -0.71227,-5.44766 -0.54122,-0.14329 -3.42685,-0.2145 -4.67888,-0.11546 -1.06557,0.0843 -1.1524,0.1057 -1.34735,0.33236 -0.41528,0.48279 -0.25605,1.17389 0.58065,2.52011 0.48456,0.77965 0.53548,0.90958 0.53548,1.36644 0,0.47359 -0.0478,0.5823 -0.77113,1.75567 l -0.77112,1.25081 -1.96417,-2.94225 c -2.11509,-3.16833 -3.80205,-5.80833 -3.89137,-6.08977 -0.076,-0.23945 0.69307,-1.50082 3.45547,-5.6674 1.24908,-1.88402 2.30049,-3.45706 2.33646,-3.49564 0.0718,-0.0771 1.29172,1.8065 1.51313,2.3364 0.27621,0.66107 0.23334,0.7995 -0.77937,2.51685 -0.47658,0.80818 -0.59411,1.553 -0.30197,1.91362 0.26111,0.32232 0.72261,0.37808 3.14838,0.38044 2.40813,0.002 3.14493,-0.0754 3.37841,-0.35625 0.20726,-0.24934 0.25216,-1.61982 0.32421,-9.89519 l 0.0611,-7.01082 h 1.21875 1.21876 v 19.18271 19.1827 h -1.23318 -1.23317 z"
id="path8"
transform="scale(0.26458333)" /><path
style="display:inline;fill:#84b8d3;fill-opacity:1;stroke:#000000;stroke-width:4.51751;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
d="m 400.69022,575.38988 v -19.18271 h 1.23317 1.23318 v 19.18271 19.1827 h -1.23318 -1.23317 z"
id="path9"
transform="scale(0.26458333)" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cffqinddvan8k"
path="res://.godot/imported/sep_up.svg-e6cbe5b85256148fcb7520abb21a4912.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/sep_up.svg"
dest_files=["res://.godot/imported/sep_up.svg-e6cbe5b85256148fcb7520abb21a4912.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
width="16"
height="16"
viewBox="0 0 0.64 0.64"
id="icon"
version="1.1"
sodipodi:docname="split_cminus.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
inkscape:export-filename="split_rminus.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="22.627417"
inkscape:cx="4.5519999"
inkscape:cy="8.1980193"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="icon">
<inkscape:page
x="0"
y="0"
width="0.63999999"
height="0.63999999"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<style
id="style1">.cls-1{fill:none;}</style>
</defs>
<title
id="title1">split-screen</title>
<path
d="M 0.18934054,0.07454552 V 0.5654545 H 0.06233516 V 0.07454552 h 0.12700536 m 0,-0.0545455 H 0.06233516 C 0.0389541,0.02000002 0.02,0.04442088 0.02000003,0.07454552 V 0.5654545 C 0.02,0.59557913 0.03895409,0.61999999 0.06233515,0.62 h 0.12700534 c 0.0233811,5e-8 0.0423352,-0.0244208 0.0423352,-0.0545455 V 0.07454552 c 3e-8,-0.03012466 -0.0189541,-0.05454553 -0.0423352,-0.0545455 z"
id="path1"
style="fill:#00cccc;fill-opacity:1;stroke-width:0.0255591;stroke-dasharray:none"
sodipodi:nodetypes="ccccccsccscccc" />
<path
d="M 0.57766491,0.07454552 V 0.5654545 H 0.45065951 V 0.07454552 h 0.12700538 m 0,-0.0545455 H 0.45065951 a 0.04233513,0.05454544 0 0 0 -0.0423351,0.0545455 V 0.5654545 A 0.04233513,0.05454544 0 0 0 0.45065951,0.62 H 0.57766488 A 0.04233513,0.05454544 0 0 0 0.61999998,0.5654545 V 0.07454552 a 0.04233513,0.05454544 0 0 0 -0.0423351,-0.0545455 z"
id="path2"
style="fill:#00cccc;stroke-width:0.0240271;fill-opacity:1" />
<metadata
id="metadata2">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>split-screen</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
style="fill:#ca0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.115505;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="M 0.5,0.32 H 0.14"
id="path3"
sodipodi:nodetypes="cc" />
</svg>

After

Width:  |  Height:  |  Size: 3 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c1b7aoplxr0x7"
path="res://.godot/imported/split_cminus.svg-824cba903437f8f9e5c3e4d4b77f9d32.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_cminus.svg"
dest_files=["res://.godot/imported/split_cminus.svg-824cba903437f8f9e5c3e4d4b77f9d32.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=8.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
width="16"
height="16"
viewBox="0 0 0.64 0.64"
id="icon"
version="1.1"
sodipodi:docname="split_cminus_tool.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
inkscape:export-filename="split_cminus.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="17.192308"
inkscape:cx="10.615212"
inkscape:cy="10.324385"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="icon"
showguides="true">
<inkscape:page
x="0"
y="0"
width="0.63999999"
height="0.63999999"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<style
id="style1">.cls-1{fill:none;}</style>
</defs>
<title
id="title1">split-screen</title>
<rect
x="-0.40000001"
y="0.12"
width="0.16"
height="0.40000001"
id="rect1-9-5"
style="fill:#bfbfbf;stroke-width:0.0440636;fill-opacity:1"
ry="0"
transform="rotate(-90)" />
<metadata
id="metadata2">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>split-screen</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
id="rect2"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bfbfbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:222;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;paint-order:markers stroke fill;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
d="M 0,0.64099132 H 0.08 V 0 H 0 Z m 0.56,0 H 0.64 V 0.00198264 H 0.56 Z"
sodipodi:nodetypes="cccccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d3s0q8570ppjv"
path="res://.godot/imported/split_cminus_tool.svg-f99ac5c50ace36891a5cb7eabb24b1e1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_cminus_tool.svg"
dest_files=["res://.godot/imported/split_cminus_tool.svg-f99ac5c50ace36891a5cb7eabb24b1e1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
width="16"
height="16"
viewBox="0 0 0.64 0.64"
id="icon"
version="1.1"
sodipodi:docname="split_cplus.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
inkscape:export-filename="split_cminus.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="15.40167"
inkscape:cx="10.096308"
inkscape:cy="22.952057"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="icon"
showguides="false">
<inkscape:page
x="0"
y="0"
width="0.63999999"
height="0.63999999"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<style
id="style1">.cls-1{fill:none;}</style>
</defs>
<title
id="title1">split-screen</title>
<path
d="M 0.18934054,0.07454552 V 0.5654545 H 0.06233516 V 0.07454552 h 0.12700536 m 0,-0.0545455 H 0.06233516 A 0.04233513,0.05454544 0 0 0 0.02000003,0.07454552 V 0.5654545 A 0.04233513,0.05454544 0 0 0 0.06233515,0.62 H 0.18934049 A 0.04233513,0.05454544 0 0 0 0.23167569,0.5654545 V 0.07454552 a 0.04233513,0.05454544 0 0 0 -0.0423352,-0.0545455 z"
id="path1"
style="fill:#00cccc;fill-opacity:1;stroke-width:0.0255591;stroke-dasharray:none" />
<rect
x="0.28"
y="-0.47999999"
width="0.079999998"
height="0.31999999"
id="rect1-9-5-1"
style="fill:#00ff00;stroke-width:0.0262951"
ry="0"
transform="scale(1,-1)" />
<path
d="M 0.57766491,0.07454552 V 0.5654545 H 0.45065951 V 0.07454552 h 0.12700538 m 0,-0.0545455 H 0.45065951 a 0.04233513,0.05454544 0 0 0 -0.0423351,0.0545455 V 0.5654545 A 0.04233513,0.05454544 0 0 0 0.45065951,0.62 H 0.57766488 A 0.04233513,0.05454544 0 0 0 0.61999998,0.5654545 V 0.07454552 a 0.04233513,0.05454544 0 0 0 -0.0423351,-0.0545455 z"
id="path2"
style="fill:#00cccc;stroke-width:0.0240271;fill-opacity:1" />
<rect
x="-0.35999998"
y="0.16"
width="0.079999998"
height="0.31999999"
id="rect1-9-5"
style="fill:#00ff00;stroke-width:0.0278683"
ry="0"
transform="rotate(-90)" />
<metadata
id="metadata2">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>split-screen</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bvyjqo1dus1xu"
path="res://.godot/imported/split_cplus.svg-ebac7c53bed9debcb76e6d75b7c90c62.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_cplus.svg"
dest_files=["res://.godot/imported/split_cplus.svg-ebac7c53bed9debcb76e6d75b7c90c62.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=8.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
width="16"
height="16"
viewBox="0 0 0.64 0.64"
id="icon"
version="1.1"
sodipodi:docname="split_cplus_tool.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
inkscape:export-filename="split_cminus.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="12.156797"
inkscape:cx="5.3879324"
inkscape:cy="18.467035"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="icon"
showguides="true">
<inkscape:page
x="0"
y="0"
width="0.63999999"
height="0.63999999"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<style
id="style1">.cls-1{fill:none;}</style>
</defs>
<title
id="title1">split-screen</title>
<rect
x="0.23999999"
y="-0.51999998"
width="0.16"
height="0.40000001"
id="rect1-9-5-1"
style="fill:#bfbfbf;stroke-width:0.0415762;fill-opacity:1"
ry="0"
transform="scale(1,-1)" />
<rect
x="-0.40000001"
y="0.12"
width="0.16"
height="0.40000001"
id="rect1-9-5"
style="fill:#bfbfbf;stroke-width:0.0440636;fill-opacity:1"
ry="0"
transform="rotate(-90)" />
<metadata
id="metadata2">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>split-screen</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
id="rect2"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bfbfbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:222;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;paint-order:markers stroke fill;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
d="M 0,0 H 0.08 V 0.64099132 H 0 Z M 0.56,0 H 0.64 V 0.63900868 H 0.56 Z"
sodipodi:nodetypes="cccccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://6pq6vesk5ycg"
path="res://.godot/imported/split_cplus_tool.svg-7b219b19dedaa176071ebc738b2f9a3a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_cplus_tool.svg"
dest_files=["res://.godot/imported/split_cplus_tool.svg-7b219b19dedaa176071ebc738b2f9a3a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="16"
height="16"
viewBox="0 0 16 16"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="split_minus_tool.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
inkscape:zoom="14.137143"
inkscape:cx="4.1380355"
inkscape:cy="-9.7968875"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="path1" /><defs
id="defs1" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"><rect
style="fill:#bfbfbf;stroke:none;stroke-width:0.204805;stroke-linecap:square;stroke-miterlimit:222;paint-order:markers stroke fill;stroke-opacity:1;fill-opacity:1"
id="rect1"
width="15.858188"
height="1.7801051"
x="0.10240262"
y="7.1099482" /><rect
style="fill:#bfbfbf;fill-opacity:1;stroke:none;stroke-width:0.204805;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
id="rect1-5"
width="15.858188"
height="1.7801051"
x="3.2292936"
y="-0.89022058"
transform="rotate(45)" /><g
id="path1"><path
d="M 7.5590551,5.5027554 V 3.1465628 H 8.3149606 V 5.5027554 Z M 7.1413247,2.8535038 H 6.2443238 L 7.9356569,0.80209075 9.6296919,2.8535038 H 8.7407963 L 7.9370079,1.8019398 Z"
id="text3"
style="font-size:10.6667px;font-family:'Witch Magic';-inkscape-font-specification:'Witch Magic';fill:none;fill-opacity:1;stroke:#bfbfbf;stroke-width:1.02097;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
aria-label="-&gt;"
sodipodi:nodetypes="cccccccccccc" /><path
d="m 8.3785029,10.497244 v 2.356195 h -0.755905 v -2.356195 z m 0.417731,2.649254 H 9.6932348 L 8.0019019,15.19791 6.3078659,13.146498 h 0.888896 l 0.803789,1.051563 z"
id="text3-8"
style="font-size:10.6667px;font-family:'Witch Magic';-inkscape-font-specification:'Witch Magic';fill:none;fill-opacity:1;stroke:#bfbfbf;stroke-width:1.02097;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill"
aria-label="-&gt;"
sodipodi:nodetypes="cccccccccccc" /></g><rect
style="fill:#bfbfbf;stroke:#8a8a8a;stroke-width:1.88976;stroke-linecap:square;stroke-miterlimit:222;paint-order:markers stroke fill"
id="rect2"
width="0"
height="0"
x="0"
y="0" /></g></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://btm5y6ifmbles"
path="res://.godot/imported/split_minus_tool.svg-ba276ee9ec33f679733c2cb056acafa5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_minus_tool.svg"
dest_files=["res://.godot/imported/split_minus_tool.svg-ba276ee9ec33f679733c2cb056acafa5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="16"
height="16"
viewBox="0 0 16 16"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="split_plus_tool.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
inkscape:zoom="14.137143"
inkscape:cx="-0.38904608"
inkscape:cy="4.2087712"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="path1" /><defs
id="defs1" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"><rect
style="fill:#bfbfbf;stroke:none;stroke-width:0.204805;stroke-linecap:square;stroke-miterlimit:222;paint-order:markers stroke fill;stroke-opacity:1;fill-opacity:1"
id="rect1"
width="15.858188"
height="1.7801051"
x="0.10240262"
y="7.1099482" /><g
id="path1"
style="stroke-width:1.0015748;stroke-dasharray:none"><path
d="M 7.5590551,5.5027554 V 3.1465628 H 8.3149606 V 5.5027554 Z M 7.1413247,2.8535038 H 6.2443238 L 7.9356569,0.80209075 9.6296919,2.8535038 H 8.7407963 L 7.9370079,1.8019398 Z"
id="text3"
style="font-size:10.6667px;font-family:'Witch Magic';-inkscape-font-specification:'Witch Magic';fill:none;fill-opacity:1;stroke:#bfbfbf;stroke-width:1.0015748;stroke-linecap:square;stroke-miterlimit:222;stroke-opacity:1;paint-order:markers stroke fill;stroke-dasharray:none"
aria-label="-&gt;"
sodipodi:nodetypes="cccccccccccc" /><path
d="m 8.3785029,10.497244 v 2.356195 h -0.755905 v -2.356195 z m 0.417731,2.649254 H 9.6932348 L 8.0019019,15.19791 6.3078659,13.146498 h 0.888896 l 0.803789,1.051563 z"
id="text3-8"
style="font-size:10.6667px;font-family:'Witch Magic';-inkscape-font-specification:'Witch Magic';fill:none;fill-opacity:1;stroke:#bfbfbf;stroke-width:1.00157;stroke-linecap:square;stroke-miterlimit:222;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
aria-label="-&gt;"
sodipodi:nodetypes="cccccccccccc" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bg17j5ifvqsi8"
path="res://.godot/imported/split_plus_tool.svg-8993d76480b248c74e5ceef08c49f018.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_plus_tool.svg"
dest_files=["res://.godot/imported/split_plus_tool.svg-8993d76480b248c74e5ceef08c49f018.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
width="16"
height="16"
viewBox="0 0 0.64 0.64"
id="icon"
version="1.1"
sodipodi:docname="split_rminus.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
inkscape:export-filename="split_rminus.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="21"
inkscape:cx="3.3809524"
inkscape:cy="17.404762"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="icon">
<inkscape:page
x="0"
y="0"
width="0.63999999"
height="0.63999999"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<style
id="style1">.cls-1{fill:none;}</style>
</defs>
<title
id="title1">split-screen</title>
<path
d="M 0.56545451,0.18934056 H 0.07454553 V 0.06233518 h 0.49090898 v 0.12700536 m 0.0545455,0 V 0.06233518 A 0.05454544,0.04233513 0 0 0 0.56545451,0.02000005 H 0.07454553 A 0.05454544,0.04233513 0 0 0 0.02,0.06233517 v 0.12700534 a 0.05454544,0.04233513 0 0 0 0.05454553,0.0423352 h 0.49090898 a 0.05454544,0.04233513 0 0 0 0.0545455,-0.0423352 z"
id="path1"
style="fill:#00cccc;fill-opacity:1;stroke-width:0.0255591;stroke-dasharray:none" />
<path
d="M 0.56545451,0.57766493 H 0.07454553 v -0.1270054 h 0.49090898 v 0.12700538 m 0.0545455,0 V 0.45065953 A 0.05454544,0.04233513 0 0 0 0.56545451,0.40832438 H 0.07454553 A 0.05454544,0.04233513 0 0 0 0.02,0.45065953 V 0.5776649 A 0.05454544,0.04233513 0 0 0 0.07454553,0.62 h 0.49090898 a 0.05454544,0.04233513 0 0 0 0.0545455,-0.0423351 z"
id="path2"
style="fill:#00cccc;stroke-width:0.0240271;fill-opacity:1" />
<metadata
id="metadata2">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>split-screen</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
style="fill:#ca0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.115505;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="M 0.5,0.32 H 0.14"
id="path3"
sodipodi:nodetypes="cc" />
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bvjk4po8w2m2j"
path="res://.godot/imported/split_rminus.svg-bf378fc258a09d6e64dbccad6e9eee51.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_rminus.svg"
dest_files=["res://.godot/imported/split_rminus.svg-bf378fc258a09d6e64dbccad6e9eee51.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=8.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
width="16"
height="16"
viewBox="0 0 0.64 0.64"
id="icon"
version="1.1"
sodipodi:docname="split_rminus_tool.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
inkscape:export-filename="split_cminus.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="17.192308"
inkscape:cx="8.4630871"
inkscape:cy="10.324385"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="icon"
showguides="true">
<inkscape:page
x="0"
y="0"
width="0.63999999"
height="0.63999999"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<style
id="style1">.cls-1{fill:none;}</style>
</defs>
<title
id="title1">split-screen</title>
<rect
x="-0.40000001"
y="0.12"
width="0.16"
height="0.40000001"
id="rect1-9-5"
style="fill:#bfbfbf;stroke-width:0.0440636;fill-opacity:1"
ry="0"
transform="rotate(-90)" />
<metadata
id="metadata2">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>split-screen</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
id="rect2"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bfbfbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:222;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;paint-order:markers stroke fill;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
d="m 0.64049566,4.9566e-4 v 0.08 H -4.9566e-4 v -0.08 z m 0,0.56 v 0.08 H 0.00148698 v -0.08 z"
sodipodi:nodetypes="cccccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d1yp7jd6hvabl"
path="res://.godot/imported/split_rminus_tool.svg-d7a9fa38184b6bc3008e9a11b0f95fb6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_rminus_tool.svg"
dest_files=["res://.godot/imported/split_rminus_tool.svg-d7a9fa38184b6bc3008e9a11b0f95fb6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
width="16"
height="16"
viewBox="0 0 0.64 0.64"
id="icon"
version="1.1"
sodipodi:docname="split_rplus.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
inkscape:export-filename="split_cplus.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="22.627417"
inkscape:cx="6.9826795"
inkscape:cy="8.4631843"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="icon">
<inkscape:page
x="0"
y="0"
width="0.63999999"
height="0.63999999"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<style
id="style1">.cls-1{fill:none;}</style>
</defs>
<title
id="title1">split-screen</title>
<path
d="M 0.5654545,0.18934055 H 0.07454552 V 0.06233517 H 0.5654545 v 0.12700536 m 0.0545455,0 V 0.06233517 A 0.05454544,0.04233513 0 0 0 0.5654545,0.02000004 H 0.07454552 A 0.05454544,0.04233513 0 0 0 0.02000002,0.06233516 V 0.1893405 a 0.05454544,0.04233513 0 0 0 0.0545455,0.0423352 H 0.5654545 A 0.05454544,0.04233513 0 0 0 0.62,0.18934053 Z"
id="path1"
style="fill:#00cccc;fill-opacity:1;stroke-width:0.0255591;stroke-dasharray:none" />
<path
d="M 0.5654545,0.57766492 H 0.07454552 V 0.45065952 H 0.5654545 V 0.5776649 m 0.0545455,0 V 0.45065952 A 0.05454544,0.04233513 0 0 0 0.5654545,0.40832442 H 0.07454552 a 0.05454544,0.04233513 0 0 0 -0.0545455,0.0423351 v 0.12700537 a 0.05454544,0.04233513 0 0 0 0.0545455,0.0423351 H 0.5654545 A 0.05454544,0.04233513 0 0 0 0.62,0.5776649 Z"
id="path2"
style="fill:#00cccc;stroke-width:0.0240271;fill-opacity:1" />
<metadata
id="metadata2">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>split-screen</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<rect
x="0.27999997"
y="-0.47999999"
width="0.079999998"
height="0.31999999"
id="rect1-9-5-1-8"
style="fill:#00ff00;stroke-width:0.0262951"
ry="0"
transform="scale(1,-1)" />
<rect
x="-0.35999998"
y="0.16"
width="0.079999998"
height="0.31999999"
id="rect1-9-5-2"
style="fill:#00ff00;stroke-width:0.0278683"
ry="0"
transform="rotate(-90)" />
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://1sqajw0mikdj"
path="res://.godot/imported/split_rplus.svg-83f950338217237725eab50ab336295c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_rplus.svg"
dest_files=["res://.godot/imported/split_rplus.svg-83f950338217237725eab50ab336295c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=8.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
width="16"
height="16"
viewBox="0 0 0.64 0.64"
id="icon"
version="1.1"
sodipodi:docname="split_rplus_tool.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
inkscape:export-filename="split_cminus.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="17.192308"
inkscape:cx="8.4630871"
inkscape:cy="10.324385"
inkscape:window-width="1803"
inkscape:window-height="1046"
inkscape:window-x="106"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="icon"
showguides="true">
<inkscape:page
x="0"
y="0"
width="0.63999999"
height="0.63999999"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<style
id="style1">.cls-1{fill:none;}</style>
</defs>
<title
id="title1">split-screen</title>
<rect
x="0.23999999"
y="-0.51999998"
width="0.16"
height="0.40000001"
id="rect1-9-5-1"
style="fill:#bfbfbf;stroke-width:0.0415762;fill-opacity:1"
ry="0"
transform="scale(1,-1)" />
<rect
x="-0.40000001"
y="0.12"
width="0.16"
height="0.40000001"
id="rect1-9-5"
style="fill:#bfbfbf;stroke-width:0.0440636;fill-opacity:1"
ry="0"
transform="rotate(-90)" />
<metadata
id="metadata2">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>split-screen</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
id="rect2"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bfbfbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:222;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;paint-order:markers stroke fill;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
d="m 0.64049566,4.9566e-4 v 0.08 H -4.9566e-4 v -0.08 z m 0,0.56 v 0.08 H 0.00148698 v -0.08 z"
sodipodi:nodetypes="cccccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://den018oksgm5m"
path="res://.godot/imported/split_rplus_tool.svg-850c12c31af7c3823ebfb1d707c5d314.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/script_splitter/assets/split_rplus_tool.svg"
dest_files=["res://.godot/imported/split_rplus_tool.svg-850c12c31af7c3823ebfb1d707c5d314.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,201 @@
@tool
extends RefCounted
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const Builder = preload("./../core/builder.gd")
const Context = preload("./../core/contex/window.gd")
const SSPContext = preload("./../core/contex/ssp_window.gd")
var _plugin : EditorPlugin = null
var _builder : Builder = null
signal add_row(value : Resource)
signal add_column(value : Resource)
signal remove_row(value : Resource)
signal remove_column(value : Resource)
signal left_tab_close(value : Resource)
signal right_tab_close(value : Resource)
signal others_tab_close(value : Resource)
const ICON_ADD_COLUMN : Texture2D = preload("./../assets/split_cplus.svg")
const ICON_ADD_ROW : Texture2D = preload("./../assets/split_rplus.svg")
const ICON_REMOVE_COLUMN : Texture2D = preload("./../assets/split_cminus.svg")
const ICON_REMOVE_ROW : Texture2D = preload("./../assets/split_rminus.svg")
const L_TAB_BAR : Texture2D = preload("./../assets/LTabBar.svg")
const R_TAB_BAR : Texture2D = preload("./../assets/RTabBar.svg")
const TAB_BAR: Texture2D = preload("./../assets/TabBar.svg")
var _context_add_split_column : Context = null
var _context_add_split_row : Context = null
var _context_remove_split_column : Context = null
var _context_remove_split_row : Context = null
var _context_editor_split : SSPContext = null
var _editor_context_add_split_column : Context = null
var _editor_context_add_split_row : Context = null
var _editor_context_remove_split_column : Context = null
var _editor_context_remove_split_row : Context = null
var _editor_context_left_tab_close : Context = null
var _editor_context_right_tab_close : Context = null
var _editor_context_botH_tab_close : Context = null
func get_honey_splitter() -> SSPContext:
return _context_editor_split
# Traduction?
func _tr(message : String) -> String:
# ...
return message.capitalize()
func init_1() -> void:
_context_add_split_column = Context.new(_tr("SPLIT_COLUMN"), _add_column_split, _can_split, ICON_ADD_COLUMN)
_context_add_split_row = Context.new(_tr("SPLIT_ROW"), _add_row_split, _can_split, ICON_ADD_ROW)
_context_remove_split_column = Context.new(_tr("MERGE_SPLITTED_COLUMN"), _remove_column_split, _can_merge_column, ICON_REMOVE_COLUMN)
_context_remove_split_row = Context.new(_tr("MERGE_SPLITTED_ROW"), _remove_row_split, _can_merge_row, ICON_REMOVE_ROW)
_context_editor_split = SSPContext.new()
_editor_context_add_split_column = Context.new(_tr("SPLIT_COLUMN"), _add_column_split, _can_split, ICON_ADD_COLUMN)
_editor_context_add_split_row = Context.new(_tr("SPLIT_ROW"), _add_row_split, _can_split, ICON_ADD_ROW)
_editor_context_remove_split_column = Context.new(_tr("MERGE_SPLITTED_COLUMN"), _remove_column_split, _can_merge_column, ICON_REMOVE_COLUMN)
_editor_context_remove_split_row = Context.new(_tr("MERGE_SPLITTED_ROW"), _remove_row_split, _can_merge_row, ICON_REMOVE_ROW)
_editor_context_left_tab_close = Context.new(_tr("CLOSE_LEFT_TABS"), _left_tab_close, _can_left_tab_close, L_TAB_BAR)
_editor_context_botH_tab_close = Context.new(_tr("CLOSE_OTHERS_TABS"), _others_tab_close, _can_others_tab_close, TAB_BAR)
_editor_context_right_tab_close = Context.new(_tr("CLOSE_RIGHT_TABS"), _right_tab_close, _can_right_tab_close, R_TAB_BAR)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR_CODE, _context_add_split_column)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR_CODE, _context_add_split_row)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR_CODE, _context_remove_split_column)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR_CODE, _context_remove_split_row)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR_CODE, _context_editor_split)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR, _editor_context_add_split_column)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR, _editor_context_add_split_row)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR, _editor_context_remove_split_column)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR, _editor_context_remove_split_row)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR, _editor_context_left_tab_close)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR, _editor_context_right_tab_close)
_plugin.add_context_menu_plugin(EditorContextMenuPlugin.CONTEXT_SLOT_SCRIPT_EDITOR, _editor_context_botH_tab_close)
func _get_value(value : Variant) -> PackedStringArray:
if value is PackedStringArray:
return value
elif value is Array:
var packed : PackedStringArray = []
for x : Variant in value:
if x is Resource:
packed.append(x.resource_path)
return packed
elif x is String:
packed.append(x)
return packed
elif value is Resource:
var packed : PackedStringArray = [value.resource_path]
return packed
return []
func _get_resource(value : Variant) -> Variant:
if value is Resource:
return value
elif value is Node:
return value
var packed : PackedStringArray = []
if value is Array:
for x : Variant in value:
if x is String:
packed.append(x)
break
elif value is PackedStringArray:
packed = value
if packed.size() == 0:
return null
return packed[0]
func _can_split(value : Variant = null) -> bool:
return _plugin.builder.can_split(_get_value(value))
func _can_merge_column(value : Variant = null) -> bool:
return _plugin.builder.can_merge_column(_get_value(value))
func _can_merge_row(value : Variant = null) -> bool:
return _plugin.builder.can_merge_row(_get_value(value))
func _can_left_tab_close(value : Variant = null) -> bool:
return _plugin.builder.can_left_tab_close(_get_value(value))
func _can_right_tab_close(value : Variant = null) -> bool:
return _plugin.builder.can_right_tab_close(_get_value(value))
func _can_others_tab_close(value : Variant = null) -> bool:
return _plugin.builder.can_others_tab_close(_get_value(value))
func _left_tab_close(value : Variant = null) -> void:
left_tab_close.emit(_get_resource(value))
func _right_tab_close(value : Variant = null) -> void:
right_tab_close.emit(_get_resource(value))
func _others_tab_close(value : Variant = null) -> void:
others_tab_close.emit(_get_resource(value))
func _add_column_split(value : Variant = null) -> void:
add_column.emit(_get_resource(value))
func _add_row_split(value : Variant = null) -> void:
add_row.emit(_get_resource(value))
func _remove_column_split(value : Variant = null) -> void:
remove_column.emit(_get_resource(value))
func _remove_row_split(value : Variant = null) -> void:
remove_row.emit(_get_resource(value))
func init_0() -> void:
for x : Variant in [
_context_add_split_column,
_context_add_split_row,
_context_remove_split_column,
_context_remove_split_row,
_context_editor_split,
_editor_context_add_split_column,
_editor_context_add_split_row,
_editor_context_remove_split_column,
_editor_context_remove_split_row
]:
if is_instance_valid(x):
_plugin.remove_context_menu_plugin(x)
func _init(plugin : EditorPlugin, builder : Builder) -> void:
_plugin = plugin
_builder = builder
func event(event : InputEvent) -> bool:
if event.is_pressed():
if event is InputEventKey:
if event.keycode == KEY_1 and event.ctrl_pressed:
_plugin.builder.multi_split(2, false)
pass
if event.keycode == KEY_2 and event.ctrl_pressed:
_plugin.builder.multi_split(4, false)
pass
return false

View file

@ -0,0 +1 @@
uid://dxipxeq42djlp

View file

@ -0,0 +1,205 @@
@tool
extends RefCounted
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const SplitterContainer = preload("./../../../script_splitter/core/ui/splitter/splitter_container.gd")
const NControl = preload("./../../core/util/control.gd")
const IoBar = preload("./../../core/ui/splitter/io/io_bar.gd")
signal update()
signal focus_by_tab(root : TabContainer, index : int)
signal remove_by_tab(root : TabContainer, index : int)
signal change_container(container : TabContainer)
signal exiting()
@warning_ignore("unused_signal")
signal rmb_click(index : int, TabContainer)
@warning_ignore("unused_signal")
signal swap_tab(from : Container, index : int, to : Container)
@warning_ignore("unused_signal")
signal same_swap_tab(from : Container, index : int, type : StringName)
var _editor_container : TabContainer = null
var _editor_splitter_container : SplitterContainer = null
var _current_container : TabContainer = null:
set(e):
if _current_container != e:
change_container.emit(e)
_current_container = e
var _frm : int = 0
var _io_bar : Node = null
func on_focus(root : TabContainer, index : int) -> void:
focus_by_tab.emit(root, index)
func on_remove(root : TabContainer, index : int) -> void:
remove_by_tab.emit(root, index)
func get_io_bar() -> IoBar:
if !is_instance_valid(_io_bar):
_io_bar = IoBar.new()
return _io_bar
func get_container(control : Control) -> Container:
if control is SplitterContainer.SplitterEditorContainer.Editor:
return _editor_splitter_container.get_base_container(control)
return null
func get_container_item(control : Control) -> Control:
if control is SplitterContainer.SplitterEditorContainer.Editor:
return _editor_splitter_container.get_base_container_item(control)
return null
func _init(container : TabContainer) -> void:
_editor_container = container
_editor_splitter_container = SplitterContainer.new()
_editor_splitter_container.initialize(_editor_container, self)
_editor_splitter_container.visible = false
_editor_container.child_entered_tree.connect(_on_update)
_editor_container.child_exiting_tree.connect(_on_update)
_editor_container.tree_exiting.connect(_on_exiting)
func is_active() -> bool:
if _frm > 0:
_frm -= 1
return false
return is_instance_valid(_editor_container) and _editor_container.is_inside_tree()
func _on_exiting() -> void:
_frm = 3
exiting.emit()
func initialize_editor_container() -> void:
_editor_splitter_container.initialize_editor_contianer()
func _on_update(__ : Node) -> void:
update.emit()
func set_current_container(container : TabContainer) -> void:
if _editor_splitter_container.set_current_editor(container):
_current_container = container
func get_editor_container() -> TabContainer:
return _editor_container
func get_root_container() -> SplitterContainer.SplitterRoot:
return _editor_splitter_container.get_root()
func get_editor_root_container(node : Node) -> SplitterContainer.BaseContainerItem:
if node is SplitterContainer.SplitterRoot:
node = node.get_parent()
return node
return null
func get_editors() -> Array[Node]:
return _editor_container.get_children()
func get_current_editor() -> Control:
return _editor_splitter_container.get_current_editor()
func tool_created() -> void:
_editor_container.visible = false
_editor_splitter_container.visible = true
func new_column() -> Control:
_current_container = _editor_splitter_container.create_new_column()
return _current_container
func new_row() -> Control:
_current_container = _editor_splitter_container.create_new_row()
return _current_container
func update_split_container() -> void:
for x : Node in Engine.get_main_loop().get_nodes_in_group(&"__ST_CS__"):
if x.has_method(&"update"):
x.call(&"update")
func get_all_containers() -> Array[Node]:
if !_editor_splitter_container:
return []
return _editor_splitter_container.get_tree().get_nodes_in_group(&"__SP_BR__")
func get_current_containers() -> Array[Node]:
if !is_instance_valid(_current_container):
return []
var c : Control = _editor_splitter_container.get_base_container(_current_container)
if is_instance_valid(c):
return c.get_children()
return []
func get_all_splitters() -> Array[Node]:
if !_editor_splitter_container:
return []
return _editor_splitter_container.get_tree().get_nodes_in_group(&"__SC_SPLITTER__")
func get_current_splitters() -> Array[Node]:
if !is_instance_valid(_current_container):
return []
var c : Control = _editor_splitter_container.get_base_container_item(_current_container)
if is_instance_valid(c):
c = c.get_parent()
if c:
return c.get_children()
return []
func garbage() -> void:
var control : Node = get_current_editor()
var nodes : Array[Node] = get_all_splitters()
var total : int = nodes.size()
if total > 2:
total = 0
for x : Node in nodes:
if !x.is_queued_for_deletion():
total += 1
if total > 1:
for x : Node in nodes:
if total < 2:
break
if x.get_child_count() == 0:
if control == x:
control = null
if !x.is_queued_for_deletion():
x.queue_free()
total -= 1
if control == null:
for x : Node in _editor_splitter_container.get_tree().get_nodes_in_group(&"__SC_SPLITTER__"):
if x is Control and !x.is_queued_for_deletion():
control = x
break
func reset() -> void:
_editor_container.visible = true
if _editor_container.child_entered_tree.is_connected(_on_update):
_editor_container.child_entered_tree.disconnect(_on_update)
if _editor_container.child_exiting_tree.is_connected(_on_update):
_editor_container.child_exiting_tree.disconnect(_on_update)
_editor_splitter_container.reset()
_editor_splitter_container.queue_free()
func get_current_container() -> TabContainer:
return _current_container
func move_container(from : int, to : int) -> bool:
if _editor_container.get_child_count() > from and from > -1:
_editor_container.move_child(_editor_container.get_child(from), to)
return true
return false

View file

@ -0,0 +1 @@
uid://iyslc58y0lp1

View file

@ -0,0 +1,311 @@
@tool
extends RefCounted
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const SplitterList = preload("./../../core/ui/splitter/splitter_list.gd")
signal item_selected(item : int)
signal move_item(from : int, to : int)
signal updated()
var _editor_list : ItemList = null
var _script_list : ItemList = null
var _script_filesearch : LineEdit = null
var _editor_filesearch : LineEdit = null
var _update_list_queue : bool = false
var _array_list : Array = []
var _selet_queue : int = -1
var _selecting : bool = false
var update_selections_callback : Callable
func _notification(what: int) -> void:
if what == NOTIFICATION_PREDELETE:
if is_instance_valid(_editor_list):
_editor_list.visible = true
if _editor_list.item_selected.is_connected(_item_selected):
_editor_list.item_selected.disconnect(_item_selected)
if _editor_list.property_list_changed.is_connected(_on_property):
_editor_list.property_list_changed.disconnect(_on_property)
if is_instance_valid(_editor_filesearch):
_editor_filesearch.visible = true
if is_instance_valid(_script_filesearch):
_script_filesearch.queue_free()
if is_instance_valid(_script_list):
_script_list.queue_free()
func _on_sc_item_selected(index : int) -> void:
if _script_list.item_count > index and index > -1:
index = _get_script_selected(index)
if index == -1:
return
select(index)
func _on_sc_item_activate(index : int) -> void:
if _script_list.item_count > index:
index = _get_script_selected(index)
if index > -1 and index < _editor_list.item_count:
_editor_list.item_activated.emit(index)
func _on_property() -> void:
_script_list.update()
func _on_sc_item_clicked(index: int, at_position: Vector2, mouse_button_index: int) -> void:
if _script_list.item_count > index:
index = _get_script_selected(index)
if index == -1:
return
_editor_list.item_clicked.emit(index, at_position, mouse_button_index)
_script_list.update()
func _get_script_selected(index : int) -> int:
if _editor_list.item_count == _script_list.item_count:
return index
var tp : String = _script_list.get_item_tooltip(index)
var cindx : int = -1
if !tp.is_empty():
for x : int in _editor_list.item_count:
if tp == _editor_list.get_item_tooltip(x):
cindx = x
break
else:
tp = _script_list.get_item_text(index)
for x : int in _editor_list.item_count:
if tp == _editor_list.get_item_text(x):
cindx = x
break
return cindx
#func set_handler(manager : Object) -> void:
#_script_list.set_handler(manager)
#
func _init(list : ItemList) -> void:
_editor_list = list
_editor_list.item_selected.connect(_item_selected)
_editor_list.property_list_changed.connect(_on_property)
var parent: Node = _editor_list.get_parent()
_script_list = list.duplicate()
_script_list.set_script(SplitterList)
_script_list.set_reference(_update_list)
_script_list.set_list(_editor_list)
_script_list.item_selected.connect(_on_sc_item_selected)
_script_list.item_activated.connect(_on_sc_item_activate)
_script_list.item_clicked.connect(_on_sc_item_clicked)
if _script_list.has_signal(&"move_item_by_index"):
_script_list.connect(&"move_item_by_index", _on_move_item_by_index)
#_editor_list.draw.connect(_on_update_list)
_script_list.add_to_group(&"__SP_LT__")
_array_list = [_editor_list, _script_list]
list.visible = false
var filesearch : Object = parent.get_child(0)
if filesearch is LineEdit:
_editor_filesearch = filesearch
var txt : String = filesearch.text
if !txt.is_empty():
filesearch.set(&"text", "")
_script_filesearch = filesearch.duplicate()
_script_filesearch.text_changed.connect(_on_update_list_search)
filesearch.visible = false
parent.add_child(_script_list)
parent.move_child(_script_list, 0)
parent.add_child(_script_filesearch)
parent.move_child(_script_filesearch, 0)
_script_list.update()
func _on_update_list() -> void:
if _update_list_queue:
return
if !is_instance_valid(_script_list) or !is_instance_valid(_editor_list):
return
_update_list_queue = true
var filtered : bool = false
if is_instance_valid(_script_filesearch):
filtered = !_script_filesearch.text.is_empty()
var item_list : ItemList = _editor_list
_script_list.clear()
if filtered:
_on_update_list_search(_script_filesearch.text)
else:
for x : int in item_list.item_count:
var indx : int = _script_list.item_count
_script_list.add_item(item_list.get_item_text(x), item_list.get_item_icon(x), true)
_script_list.set_item_metadata(indx, item_list.get_item_metadata(x))
_script_list.set_item_tooltip(indx, item_list.get_item_tooltip(x))
_script_list.set_item_icon_modulate(indx, item_list.get_item_icon_modulate(x))
_script_list.set_item_custom_fg_color(indx, item_list.get_item_custom_fg_color(x))
update_list_selection()
set_deferred(&"_update_list_queue", false)
func _on_update_list_search(txt : String) -> void:
if txt.is_empty():
_on_update_list()
return
if !is_instance_valid(_script_list):
return
_script_list.clear()
var rgx : RegEx = RegEx.create_from_string("(?i).*{0}.*".format([txt]))
if !is_instance_valid(rgx) or !rgx.is_valid():
return
var item_list : ItemList = _editor_list
for x : int in item_list.item_count:
var _txt : String = item_list.get_item_text(x)
if rgx.search(_txt) != null:
var indx : int = _script_list.add_item(item_list.get_item_text(x), item_list.get_item_icon(x), true)
_script_list.set_item_metadata(indx, item_list.get_item_metadata(x))
_script_list.set_item_tooltip(indx, item_list.get_item_tooltip(x))
_script_list.set_item_icon_modulate(indx, item_list.get_item_icon_modulate(x))
_script_list.set_item_custom_fg_color(indx, item_list.get_item_custom_fg_color(x))
update_list_selection()
func update_list_selection() -> void:
if update_selections_callback.is_valid():
update_selections_callback.call(_array_list)
func _item_selected(i : int) -> void:
item_selected.emit(i)
func _update_list() -> void:
updated.emit()
_on_update_list()
func get_editor_list() -> ItemList:
return _editor_list
func get_selected_id() -> int:
for x : int in range(_editor_list.item_count):
if _editor_list.is_selected(x):
return x
return -1
func remove(index : int) -> void:
if _editor_list.item_count > index and index > -1:
_editor_list.item_clicked.emit(index, _editor_list.get_local_mouse_position(), MOUSE_BUTTON_MIDDLE)
func item_count() -> int:
return _editor_list.item_count
func _select() -> void:
if _selet_queue > -1 and _editor_list.item_count > _selet_queue:
_editor_list.select(_selet_queue, true)
_editor_list.item_selected.emit(_selet_queue)
_update_list.call_deferred()
_selecting = false
func update_list() -> void:
_on_update_list()
func select(i : int) -> void:
if i > -1 and _editor_list.item_count > i:
_selet_queue = i
if _selecting:
return
_selecting = true
_select.call_deferred()
func is_selected(i : int) -> bool:
if _editor_list.item_count > i and i > -1:
return _editor_list.is_selected(i)
return false
func get_item_tooltip(item : int) -> String:
if _editor_list.item_count > item and item > -1:
return _editor_list.get_item_tooltip(item)
return ""
func get_item_icon(item : int) -> Texture2D:
if _editor_list.item_count > item and item > -1:
return _editor_list.get_item_icon(item)
return null
func get_item_icon_modulate(item : int) -> Color:
if _editor_list.item_count > item and item > -1:
return _editor_list.get_item_icon_modulate(item)
return Color.WHITE
func get_item_text(item : int) -> String:
if _editor_list.item_count > item and item > -1:
return _editor_list.get_item_text(item)
return ""
func reset() -> void:
if is_instance_valid(_editor_list):
_editor_list.visible = true
if _editor_list.draw.is_connected(_on_update_list):
_editor_list.draw.disconnect(_on_update_list)
if _editor_list.item_selected.is_connected(_item_selected):
_editor_list.item_selected.disconnect(_item_selected)
if _editor_list.property_list_changed.is_connected(_on_property):
_editor_list.property_list_changed.disconnect(_on_property)
if is_instance_valid(_editor_filesearch):
_editor_filesearch.visible = true
if is_instance_valid(_script_filesearch):
_script_filesearch.queue_free()
if is_instance_valid(_script_list):
_script_list.queue_free()
func _on_move_item_by_index(from : int, to : int) -> void:
if from == to:
return
for x : ItemList in [_script_list, _editor_list]:
if !is_instance_valid(x):
return
for y : int in [from, to]:
if x.item_count <= y or y < 0:
return
var values : Array[int] = [from, to]
for v : int in range(0, values.size(), 1):
if _script_list.get_item_tooltip(v) != _editor_list.get_item_tooltip(v):
var value = -1
var st : String = _script_list.get_item_tooltip(from)
for x : int in _editor_list.item_count:
if st == _editor_list.get_item_tooltip(x):
value = x
break
if value == -1:
return
values[v] = value
move_item.emit(values[0], values[1])

View file

@ -0,0 +1 @@
uid://ors5ojuayup4

View file

@ -0,0 +1,249 @@
@tool
extends RefCounted
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const EditorManager = preload("./../core/editor/godot/manager.gd")
const BaseContainer = preload("./../core/base/container.gd")
const BaseList = preload("./../core/base/list.gd")
var _plugin : EditorPlugin = null
var _editor_manager : EditorManager = null
#region _REF_
var _item_list : ItemList = null:
get:#
if !is_instance_valid(_item_list):
var script_editor: ScriptEditor = EditorInterface.get_script_editor()
var items : Array[Node] = script_editor.find_children("*", "ItemList", true, false)
if items.size() > 0:
_item_list = items[0]
else:
push_warning("[Script-Splitter] Can not find item list!")
return _item_list
#endregion
func get_editor_manager() -> EditorManager:
return _editor_manager
func handle(id : StringName) -> void:
_editor_manager.io.execute(id)
func refresh_warnings() -> void:
_editor_manager.refresh_warnings.execute()
func can_split(values : Variant) -> bool:
var current : Node = null
if values is PackedStringArray and values.size() > 0:
var root : Node = _plugin.get_tree().root
if root.has_node(values[0]):
current = root.get_node(values[0])
elif values is Node:
current = values
return _editor_manager.get_current_totaL_editors(current) > 1
func can_merge_column(values : Variant) -> bool:
var current : Node = null
if values is PackedStringArray and values.size() > 0:
var root : Node = _plugin.get_tree().root
if root.has_node(values[0]):
current = root.get_node(values[0])
elif values is Node:
current = values
return _editor_manager.get_current_total_splitters(current) > 1
func can_merge_row(_values : Variant) -> bool:
return _editor_manager.get_total_split_container(true) > 1
func can_left_tab_close(values : Variant) -> bool:
if values is PackedStringArray and values.size() > 0:
var root : Node = _plugin.get_tree().root
if root.has_node(values[0]):
values = root.get_node(values[0])
else:
values = values[0]
var node : Node = _editor_manager.get_control_tool_by_current(values)
return node and node.get_index() > 0
func can_right_tab_close(values : Variant) -> bool:
if values is PackedStringArray and values.size() > 0:
var root : Node = _plugin.get_tree().root
if root.has_node(values[0]):
values = root.get_node(values[0])
else:
values = values[0]
var node : Node = _editor_manager.get_control_tool_by_current(values)
return node and node.get_index() < node.get_parent().get_child_count() - 1
func can_others_tab_close(values : Variant) -> bool:
return can_left_tab_close(values) and can_right_tab_close(values)
func update(_delta : float) -> void:
if _editor_manager.update():
_plugin.set_process(false)
func multi_split(number : int, as_row : bool) -> void:
var total : int = _editor_manager.get_current_total_splitters(null)
if total == number:
return
var container : Node = _editor_manager.get_current_root()
if !as_row:
if total < number:
number = number - total
while number > 0:
if !can_split(container):
return
_editor_manager.split_column.execute(container)
number -= 1
else:
number = total - number
while number > 0:
if !can_merge_column(container):
return
_editor_manager.merge_tool.execute([_editor_manager.get_current_tool(container), false])
number -= 1
if !as_row:
if total < number:
number = number - total
while number > 0:
if !can_split(container):
return
_editor_manager.split_row.execute(container)
number -= 1
else:
number = total - number
while number > 0:
if !can_merge_column(container):
return
_editor_manager.merge_tool.execute([_editor_manager.get_current_tool(container), true])
number -= 1
func init_0() -> void:
if is_instance_valid(_editor_manager):
_editor_manager.reset()
_editor_manager = null
var editor : ScriptEditor = EditorInterface.get_script_editor()
if editor:
if editor.editor_script_changed.is_connected(_on_change):
editor.editor_script_changed.disconnect(_on_change)
func _on_change(__ : Variant = null) -> void:
_queue_update()
func connect_callbacks(
on_column : Signal,
on_row : Signal,
out_column : Signal,
out_row : Signal,
left_tab_close : Signal,
right_tab_close : Signal,
others_tab_close : Signal,
do_connect : bool = true) -> void:
for x : Array in [
[on_column, _editor_manager.split_column.execute],
[on_row, _editor_manager.split_row.execute],
[out_column, _editor_manager.unsplit_column],
[out_row, _editor_manager.unsplit_row],
[left_tab_close, _editor_manager.left_tab_close],
[right_tab_close, _editor_manager.right_tab_close],
[others_tab_close, _editor_manager.others_tab_close]
]:
if !x[0].is_null():
if do_connect:
if !x[0].is_connected(x[1]):
x[0].connect(x[1])
else:
if x[0].is_connected(x[1]):
x[0].disconnect(x[1])
func _nws() -> void:
print("[Script Splitter] New Splitter System!\nNow use controls in toolbar for split columns and rows as you like!\nPlease provide feedback on the Github issues tab [https://github.com/CodeNameTwister/Script-Splitter]")
func swap_by_src(from : String, to : String, as_left : bool) -> void:
_editor_manager.swap_tab.execute([from, to, as_left])
func reset_by_control(control : Node) -> void:
if _editor_manager:
_editor_manager.reset_by_control(control)
func _clean_settings() -> void:
var e : EditorSettings = EditorInterface.get_editor_settings()
if e.has_setting("plugin/script_spliter/rows"):
_nws()
e.set_setting("plugin/script_spliter/rows", null)
e.set_setting("plugin/script_spliter/columns", null)
e.set_setting("plugin/script_spliter/save_rows_columns_count_on_exit", null)
e.set_setting("plugin/script_spliter/window/use_highlight_selected", null)
e.set_setting("plugin/script_spliter/window/highlight_selected_color", null)
e.set_setting("plugin/script_spliter/editor/split/reopen_last_closed_editor_on_add_split", null)
e.set_setting("plugin/script_spliter/editor/split/remember_last_used_editor_buffer_size", null)
e.set_setting("plugin/script_spliter/behavior/auto_create_split_by_config", null)
e.set_setting("plugin/script_spliter/editor/list/colorize_actives", null)
for x : String in [
"plugin/script_spliter/behaviour/refresh_warnings_on_save"
,"plugin/script_spliter/editor/out_focus_color_value"
,"plugin/script_spliter/editor/out_focus_color_enabled"
,"plugin/script_spliter/editor/minimap_for_unfocus_window"
,"plugin/script_spliter/editor/behaviour/expand_on_focus"
,"plugin/script_spliter/editor/behaviour/can_expand_on_same_focus"
,"plugin/script_spliter/editor/behaviour/smooth_expand"
,"plugin/script_spliter/editor/behaviour/smooth_expand_time"
,"plugin/script_spliter/editor/behaviour/swap_by_double_click_separator_button"
,"plugin/script_spliter/editor/behaviour/back_and_forward/handle_back_and_forward"
,"plugin/script_spliter/editor/behaviour/back_and_forward/history_size"
,"plugin/script_spliter/editor/behaviour/back_and_forward/using_as_next_and_back_tab"
,"plugin/script_spliter/editor/behaviour/back_and_forward/use_native_handler_when_there_are_no_more_tabs"
,"plugin/script_spliter/editor/behaviour/back_and_forward/backward_key_button_input"
,"plugin/script_spliter/editor/behaviour/back_and_forward/forward_key_button_input"
,"plugin/script_spliter/editor/behaviour/back_and_forward/backward_mouse_button_input"
,"plugin/script_spliter/editor/behaviour/back_and_forward/forward_mouse_button_input"
,"plugin/script_spliter/editor/list/selected_color"
,"plugin/script_spliter/editor/list/others_color"
,"plugin/script_spliter/editor/tabs/use_old_behaviour"
,"plugin/script_spliter/line/size"
,"plugin/script_spliter/line/color"
,"plugin/script_spliter/line/draggable"
,"plugin/script_spliter/line/expand_by_double_click"
,"plugin/script_spliter/line/button/size"
,"plugin/script_spliter/line/button/modulate"
,"plugin/script_spliter/behavior/create_all_open_editors"
]:
if e.has_setting(x):
e.set_setting(x.replace("/script_spliter/", "/script_splitter/"), e.get_setting(x))
e.set_setting(x, null)
for x : int in range(1, 11, 1):
e.set_setting(str("plugin/script_spliter/input/split_type_" , x), null)
#for x : int in range(1, 11, 1):
#e.set_setting(str("plugin/script_splitter/input/split_type_" , x), null)
func init_1(plugin : EditorPlugin, tab_container : TabContainer, item_list : ItemList) -> void:
if !is_instance_valid(plugin) or !is_instance_valid(tab_container):
printerr("Error, can`t initalize plugin, not valid references!")
return
_clean_settings()
_plugin = plugin
_plugin.set_process(true)
_editor_manager = EditorManager.new(BaseContainer.new(tab_container), BaseList.new(item_list))
_editor_manager.update_request.connect(_queue_update)
var editor : ScriptEditor = EditorInterface.get_script_editor()
if editor:
if !editor.editor_script_changed.is_connected(_on_change):
editor.editor_script_changed.connect(_on_change)
func _queue_update() -> void:
_plugin.set_process(true)

View file

@ -0,0 +1 @@
uid://dge4wucvh6qnb

View file

@ -0,0 +1,264 @@
@tool
extends EditorContextMenuPlugin
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4f
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const PLUS_SPLIT = preload("./../../assets/plus_row.svg")
const MINUS_SPLIT = preload("./../../assets/minus_row.svg")
const SspEditor = preload("./../../core/ui/splitter/editor/ssp_editor.gd")
var _vsplits : Array[VSplitContainer] = []
func _translate(_str : String) -> String:
# ...
return _str
func _popup_menu(_paths : PackedStringArray) -> void:
var sc : ScriptEditor = EditorInterface.get_script_editor()
if !is_instance_valid(sc.get_current_script()):
return
var ed : ScriptEditorBase = sc.get_current_editor()
var be : Control = ed.get_base_editor()
if be is CodeEdit:
if !(be.get_parent() is VSplitContainer):
add_context_menu_item(_translate("Sub-Split"), _on_sub_split, PLUS_SPLIT)
else:
add_context_menu_item(_translate("Remove Sub-Split"), _out_sub_split, MINUS_SPLIT)
func is_handled(cnt : Node) -> bool:
return cnt is CodeEdit and cnt.get_parent() is VSplitContainer
func split() -> void:
_on_sub_split(null)
func merge(value : Node) -> void:
_out_sub_split(value)
func _out_sub_split(value : Variant = null) -> void:
var be : Control = null
if value is CodeEdit:
be = value
else:
var sc : ScriptEditor = EditorInterface.get_script_editor()
var ed : ScriptEditorBase = sc.get_current_editor()
be= ed.get_base_editor()
if be is CodeEdit:
if !is_handled(be):
return
var parent : Node = be.get_parent()
var index : int = be.get_index()
if !is_instance_valid(parent):
return
if parent.get_child_count() > index + 1:
var c : Node = parent.get_child(index + 1)
if c is CodeEdit:
_on_focus(c, be)
c.queue_free()
parent.remove_child(c)
else:
if index > 0 and parent.get_child_count() > index:
var c : Node = parent.get_child(index - 1)
if c is CodeEdit:
_on_focus(c, be)
c.queue_free()
parent.remove_child(c)
if parent.get_child_count() == 1:
var p : Node = parent.get_parent()
if p:
for y : Node in parent.get_children():
if y.is_queued_for_deletion():
continue
if y.has_meta(&"RM"):
continue
if y is CodeEdit:
if y.text_changed.is_connected(_on_text_change):
y.text_changed.disconnect(_on_text_change)
parent.remove_child(y)
p.add_child(y)
if p.get_child_count() > 1:
p.move_child(y, 0)
_vsplits.erase(parent)
parent.queue_free()
for x : Node in Engine.get_main_loop().get_nodes_in_group(&"__SCRIPT_SPLITTER__"):
if x.has_method(&"_io_call"):
x.call(&"_io_call", &"")
func _on_sub_split(__ : Variant = null) -> void:
var sc : ScriptEditor = EditorInterface.get_script_editor()
var ed : ScriptEditorBase = sc.get_current_editor()
var be : Control = ed.get_base_editor()
if be is CodeEdit:
var parent : Node = be.get_parent()
if is_handled(be) or !is_instance_valid(parent):
return
var z : int = 0
for x : Node in parent.get_children():
if x is CodeEdit:
z += 1
if z < 2:
var vsplit : VSplitContainer = null
if be.get_parent() is VSplitContainer:
vsplit = be.get_parent()
else:
vsplit = VSplitContainer.new()
var p : Node = be.get_parent()
if p:
p.remove_child(be)
parent.add_child(vsplit)
parent.move_child(vsplit, 0)
vsplit.add_child(be)
vsplit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
vsplit.size_flags_vertical= Control.SIZE_EXPAND_FILL
_vsplits.append(vsplit)
var ne : CodeEdit = be.duplicate(0)
ne.set_meta(&"RM", true)
ne.set_script(SspEditor)
ne.focus_mode = Control.FOCUS_CLICK
ne.mouse_filter = Control.MOUSE_FILTER_PASS
ne.selecting_enabled = false
var nodes : Array[Node] = be.get_parent().get_parent().get_parent().find_children("*","MenuButton",true,false)
for n : Node in nodes:
if n is MenuButton:
var mp : PopupMenu = n.get_popup()
if mp and "%" in (n.get_popup().get_item_text(0)):
if n.draw.is_connected(_on_update):
n.draw.disconnect(_on_update)
n.draw.connect(_on_update.bind(be,ne,n))
be.text_changed.connect(_on_text_change.bind(be, ne))
ne.focus_entered.connect(_on_focus.bind(ne, be))
ne.gui_input.connect(_on_gui.bind(ne, be))
_on_text_change(be, ne)
vsplit.add_child(ne)
for x : Node in Engine.get_main_loop().get_nodes_in_group(&"__SCRIPT_SPLITTER__"):
if x.has_method(&"_io_call"):
x.call(&"_io_call", &"")
func _on_gui(e : InputEvent, f : CodeEdit, t : CodeEdit) -> void:
if t.has_focus():
if e.is_pressed():
if e is InputEventMouseButton:
if e.button_index == MOUSE_BUTTON_LEFT:
return
_on_focus(f, t)
else:
if e.is_pressed():
if e is InputEventMouseButton:
if e.button_index != MOUSE_BUTTON_RIGHT:
return
_on_focus(f, t)
func _on_update(f : Variant, t : Variant, r : Variant) -> void:
if is_instance_valid(f) and is_instance_valid(t):
t.set(&"theme_override_font_sizes/font_size", f.get(&"theme_override_font_sizes/font_size"))
return
if is_instance_valid(r):
if r.draw.is_connected(_on_update):
r.draw.disconnect(_on_update)
func _on_focus(f : CodeEdit, t : CodeEdit) -> void:
if !is_instance_valid(f) or !is_instance_valid(t):
return
if f.text != t.text:
var sv : float = f.scroll_vertical
var sh : int = f.scroll_horizontal
f.set(&"text", t.text)
f.scroll_vertical = sv
f.scroll_horizontal = sh
var sv0 : float = f.scroll_vertical
var sh0 : int = f.scroll_horizontal
var sv1 : float = t.scroll_vertical
var sh1 : int = t.scroll_horizontal
t.scroll_vertical = sv0
t.scroll_horizontal = sh0
f.scroll_vertical = sv1
f.scroll_horizontal = sh1
var index : int = t.get_index()
var p : Node = f.get_parent()
p.remove_child(f)
p.add_child(f)
t.grab_focus()
if p.get_child_count() > index or index == -1:
p.move_child(f, index)
func _on_text_change(ca : CodeEdit, cb : CodeEdit) -> void:
if cb.has_method(&"set_text_reference"):
cb.call(&"set_text_reference", ca.text)
return
var sv : float = cb.scroll_vertical
var sh : int = cb.scroll_horizontal
cb.set(&"text", ca.text)
cb.scroll_vertical = sv
cb.scroll_horizontal = sh
func _reorder(index : int, cd : CodeEdit, line : int, column : int) -> void:
if cd.get_caret_count() <= index:
cd.add_caret(mini(cd.get_line_count(), line), column)
return
cd.set_caret_line(mini(cd.get_line_count(), line), false, true, 0, index)
cd.set_caret_column(column, false, index)
func _notification(what: int) -> void:
if what == NOTIFICATION_PREDELETE:
for x : Node in _vsplits:
if !is_instance_valid(x):
continue
var p : Node = x.get_parent()
for y : Node in x.get_children():
if y.is_queued_for_deletion():
continue
if y.has_meta(&"RM"):
continue
if y is CodeEdit:
for cn : Dictionary in y.text_changed.get_connections():
var callable : Callable = cn["callable"]
if !callable.is_valid():
y.text_changed.disconnect(callable)
for n : Node in x.get_parent().get_parent().get_parent().find_children("*","MenuButton",true,false):
if n is MenuButton:
var mp : PopupMenu = n.get_popup()
if mp and "%" in (n.get_popup().get_item_text(0)):
for cn : Dictionary in n.draw.get_connections():
var callable : Callable = cn["callable"]
if !callable.is_valid():
n.draw.disconnect(callable)
x.remove_child(y)
p.add_child(y)
if p.get_child_count() > 1:
p.move_child(y, 0)
x.queue_free()

View file

@ -0,0 +1 @@
uid://cdn4c7qori2ry

View file

@ -0,0 +1,34 @@
@tool
extends EditorContextMenuPlugin
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
var CONTEXT : String = "CUSTOM"
var ICON : Texture = null
var SHORTCUT : Shortcut = null
var CALLABLE : Callable
var VALIDATOR : Callable
func _init(context : String, handle : Callable, validator : Callable, icon : Texture, input_key : Array[InputEvent] = []):
CONTEXT = context
CALLABLE = handle
ICON = icon
VALIDATOR = validator
if input_key.size() > 0:
SHORTCUT = Shortcut.new()
SHORTCUT.events = input_key
add_menu_shortcut(SHORTCUT, handle)
func _popup_menu(paths : Variant) -> void:
if VALIDATOR.is_valid():
if !VALIDATOR.call(paths):
return
if SHORTCUT:
add_context_menu_item_from_shortcut(CONTEXT, SHORTCUT, ICON)
else:
if CALLABLE.is_valid():
add_context_menu_item(CONTEXT, CALLABLE, ICON)

View file

@ -0,0 +1 @@
uid://cblflkellpdqg

View file

@ -0,0 +1,23 @@
@tool
extends RefCounted
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const MickeyTool = preload("./../../core/editor/tools/magic/mickey_tool.gd")
const ToolDB = preload("./../../core/editor/database/tool_db.gd")
const Manager = preload("./../../core/editor/godot/manager.gd")
var _tool_db : ToolDB = null
var _manager : Manager = null
func _init(manager : Manager, tool_db : ToolDB) -> void:
_manager = manager
_tool_db = tool_db
func execute(_value : Variant = null) -> bool:
return false

View file

@ -0,0 +1 @@
uid://b5denwbu6twf4

View file

@ -0,0 +1,104 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const EditorTool = preload("./../../../core/editor/tools/editor_tool.gd")
const HelperEditorTool = preload("./../../../core/editor/tools/helper_editor_tool.gd")
const ScriptEditorTool = preload("./../../../core/editor/tools/script_editor_tool.gd")
const TextEditorTool = preload("./../../../core/editor/tools/text_editor_tool.gd")
var _tools : Array[EditorTool] = [
ScriptEditorTool.new(),
HelperEditorTool.new(),
TextEditorTool.new()
]
func execute(value : Variant = null) -> bool:
if !is_instance_valid(value) or !(value is Control):
return true
var control : Control = value
if !control.is_node_ready() or !control.is_inside_tree():
return false
for x : MickeyTool in _tool_db.get_tools():
if x.has(control):
x.set_queue_free(false)
return true
var index : int = control.get_index()
if !_manager.is_valid_item_index(index):
return false
var root : Node = _get_root()
if is_instance_valid(root):
var mt : MickeyTool = _tools[0].build(control)
var is_editor : bool = _is_editor(mt, control)
if !is_editor:
for z : int in range(1, _tools.size(), 1):
var x : EditorTool = _tools[z]
mt = x.build(control)
if mt != null:
break
if mt != null:
mt.focus.connect(_manager.focus_tool)
mt.new_symbol.connect(_manager.set_symbol)
mt.clear.connect(_manager.clear_editors)
mt.ochorus(root)
_tool_db.append(mt)
_manager.tool_created()
_manager.update_metadata(mt)
mt.trigger_focus()
return false
if is_editor:
return true
printerr("Error!, Can not build control for ", control.name)
return false
func _is_editor(mt : MickeyTool, control : Control) -> bool:
if is_instance_valid(mt):
return true
if control is ScriptEditorBase:
var sce : ScriptEditor = EditorInterface.get_script_editor()
if sce and control in sce.get_open_script_editors():
if control.name.begins_with("@"):
if !("Script" in control.name):
return false
return true
return _manager.get_editor_list().get_item_tooltip(control.get_index()).is_empty()
return false
func _get_root() -> Node:
var root : Node = _manager.get_current_root()
if !is_instance_valid(root):
var splitters : Array[Node] = _manager.get_base_container().get_all_splitters()
if splitters.size() == 0:
for x : MickeyTool in _tool_db.get_tools():
x.reset()
_manager.get_base_container().initialize_editor_container()
root = _manager.get_current_root()
else:
for x : Node in splitters:
if is_instance_valid(x) and !x.is_queued_for_deletion():
root = x
break
return root

View file

@ -0,0 +1 @@
uid://bsrituhgnfbm

View file

@ -0,0 +1,162 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const BaseContainer = preload("./../../../core/base/container.gd")
const SpliterItem = preload("./../../../core/ui/multi_split_container/split_container_item.gd")
func execute(value : Variant = null) -> bool:
if value is Array:
if value.size() == 3:
if value[0] is Container and value[1] is int and value[2] is StringName:
var from : Container = value[0]
var index : int = value[1]
var type : StringName = value[2]
if from is BaseContainer.SplitterContainer.SplitterEditorContainer.Editor:
for x : MickeyTool in _tool_db.get_tools():
if x.is_valid():
if x.get_root() == from and x.get_control().get_index() == index:
if type == &"LEFT":
var c : Node = _manager.get_base_container().get_container_item(x.get_root())
var cindex : int = 0
if !c:
return false
cindex = c.get_index()
_manager.split_column.execute(x)
if !c.is_node_ready():
await c.ready
c = _manager.get_base_container().get_container_item(x.get_root())
if is_instance_valid(c):
if cindex > -1 and cindex < c.get_parent().get_child_count() and c.get_index() != cindex:
c.get_parent().move_child.call_deferred(c, cindex)
elif type == &"RIGHT":
var c : Node = _manager.get_base_container().get_container_item(x.get_root())
var cindex : int = 0
if !c:
return false
cindex = c.get_index() + 1
_manager.split_column.execute(x)
if !c.is_node_ready():
await c.ready
c = _manager.get_base_container().get_container_item(x.get_root())
if is_instance_valid(c):
if cindex > -1 and cindex < c.get_parent().get_child_count() and c.get_index() != cindex:
c.get_parent().move_child.call_deferred(c, cindex)
elif type == &"TOP":
var c : Node = _manager.get_base_container().get_container(x.get_root())
var cindex : int = 0
if !c:
return false
var root : Node = c.get_parent()
if !root:
return false
cindex = root.get_index()
_manager.split_row.execute(x)
if !c.is_node_ready():
await c.ready
c = _manager.get_base_container().get_container_item(x.get_root())
if is_instance_valid(c):
var row : Node = c
for __ : int in range(0, 2, 1):
row = c.get_parent()
if !is_instance_valid(row):
break
if is_instance_valid(row):
var has : bool = false
for ___ : int in range(0, 3, 1):
if has:
break
for __ : int in range(0, 3, 1):
await Engine.get_main_loop().process_frame
if is_instance_valid(row) and is_instance_valid(c):
var _root : Node = c.get_parent()
if row.has_node(_root.get_path()) :
has = true
break
if has and c and cindex > -1:
for __ : int in range(0, 2, 1):
c = c.get_parent()
if !c:
return false
root = c.get_parent()
if root and cindex < root.get_child_count() and c.get_index() != cindex:
root.move_child(c, cindex)
return true
elif type == &"BOTTOM":
_manager.split_row.execute(x)
var c : Node = _manager.get_base_container().get_container(x.get_root())
var cindex : int = 0
if !c:
return false
if !c.is_node_ready():
await c.ready
cindex = c.get_index() + 1
if c.get_index() < c.get_parent().get_child_count() - 1:
if is_instance_valid(c):
var row : Node = c
for __ : int in range(0, 2, 1):
row = c.get_parent()
if !is_instance_valid(row):
break
if is_instance_valid(row):
var z : int = c.get_index()
if z > 0:
var has : bool = false
for ___ : int in range(0, 3, 1):
if has:
break
for __ : int in range(0, 3, 1):
await Engine.get_main_loop().process_frame
if is_instance_valid(row) and is_instance_valid(c):
var _root : Node = c.get_parent()
if row.has_node(_root.get_path()) and _root is SpliterItem:
has = true
break
if has and c and cindex > -1:
for __ : int in range(0, 2, 1):
c = c.get_parent()
if !c:
return false
var root : Node = c.get_parent()
if root and cindex < root.get_child_count() and c.get_index() != cindex:
root.move_child(c, cindex)
return true
return false

View file

@ -0,0 +1 @@
uid://dgqwhcax1guja

View file

@ -0,0 +1,24 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#Override app function.
func execute(value : Variant = null) -> bool:
if value is Array:
if value.size() > 1:
if value[0] is TabContainer and value[1] is int:
var control : TabContainer = value[0]
var index : int = value[1]
for x : MickeyTool in _tool_db.get_tools():
if is_instance_valid(x):
if x.get_root() == control:
if x.get_control().get_index() == index:
x.trigger_focus()
return true
return false

View file

@ -0,0 +1 @@
uid://bipvmrq4th30m

View file

@ -0,0 +1,114 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const BaseList = preload("./../../../core/base/list.gd")
var unfocus_enabled : bool = true
var unfocus_color : Color = Color.DARK_GRAY
func _init(manager : Manager, tool_db : ToolDB) -> void:
super(manager, tool_db)
_setup()
func _notification(what: int) -> void:
if what == NOTIFICATION_PREDELETE:
var settings : EditorSettings = EditorInterface.get_editor_settings()
if settings.settings_changed.is_connected(_on_change):
settings.settings_changed.disconnect(_on_change)
func _on_change() -> void:
var dt : Array = ["plugin/script_splitter/editor/out_focus_color_enabled","plugin/script_splitter/editor/out_focus_color_value"]
var settings : EditorSettings = EditorInterface.get_editor_settings()
var changes : PackedStringArray = settings.get_changed_settings()
for c in changes:
if c in dt:
_setup()
var current : Node = _manager.get_base_container().get_current_container()
for x : MickeyTool in _tool_db.get_tools():
if x.is_valid():
var root : Control = x.get_root()
if root.modulate != Color.WHITE:
if unfocus_enabled:
root.modulate = unfocus_color
else:
root.modulate = Color.WHITE
elif unfocus_enabled:
if is_instance_valid(current):
if x.get_root() != current:
root.modulate = unfocus_color
break
func _setup() -> void:
var settings : EditorSettings = EditorInterface.get_editor_settings()
if !settings.settings_changed.is_connected(_on_change):
settings.settings_changed.connect(_on_change)
for x : Array in [
["unfocus_enabled", "plugin/script_splitter/editor/out_focus_color_enabled"]
,["unfocus_color", "plugin/script_splitter/editor/out_focus_color_value"]
]:
if settings.has_setting(x[1]):
set(x[0], settings.get_setting(x[1]))
else:
settings.set_setting(x[1], get(x[0]))
func execute(value : Variant = null) -> bool:
if value is ScriptEditorBase:
var control : Control = value.get_base_editor()
for x : MickeyTool in _tool_db.get_tools():
if x.has(control):
value = x
break
if value is MickeyTool:
var index : int = value.get_index()
var editor_list : BaseList = _manager.get_editor_list()
if editor_list.item_count() > index and index > -1:
var control : Node = value.get_control()
var root : Node = value.get_root()
if root is TabContainer:
var base : Manager.BaseContainer = _manager.get_base_container()
var _index : int = control.get_index()
if root.current_tab != _index and _index > -1 and _index < root.get_tab_count():
if root.has_method(&"set_tab"):
root.call(&"set_tab", _index)
else:
root.set(&"current_tab", _index)
var container : Control = base.get_current_container()
if is_instance_valid(container) and unfocus_enabled:
container.modulate = unfocus_color
base.set_current_container(root)
if is_instance_valid(root):
root.modulate = Color.WHITE
var new_container : Node = base.get_container(root)
if is_instance_valid(new_container) and new_container.has_method(&"expand_splited_container"):
new_container.call(&"expand_splited_container", base.get_container_item(root))
if is_instance_valid(container):
container = base.get_container(container)
if is_instance_valid(container) and container != new_container and container.has_method(&"expand_splited_container"):
container.call(&"expand_splited_container", null)
var grant_conainer : Node = base.get_editor_root_container(new_container)
if is_instance_valid(grant_conainer):
var parent : Node = grant_conainer.get_parent()
if is_instance_valid(parent) and parent.has_method(&"expand_splited_container"):
parent.call(&"expand_splited_container", base.get_editor_root_container(new_container))
if !editor_list.is_selected(index):
editor_list.select(index)
_manager.io.update()
_manager.get_editor_list().updated.emit()
return false

View file

@ -0,0 +1 @@
uid://bk4jykdijx7sj

View file

@ -0,0 +1,256 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const BaseList = preload("./../../../core/base/list.gd")
const EDITOR = preload("./../../../core/ui/window/editor.tscn")
var expanded : bool = false
var _updating : bool = false
func update() -> void:
if _updating:
return
_updating = true
_update.call_deferred()
func _update() -> void:
var base : Manager.BaseContainer = _manager.get_base_container()
var container : Node = base.get_current_container()
if is_instance_valid(container):
if expanded:
var cb : Node = base.get_container_item(container)
var ct : Array[Node] = container.get_tree().get_nodes_in_group(&"__SP_BR__")
for x : Node in container.get_tree().get_nodes_in_group(&"__SP_IC__"):
var v : bool = cb == x
for y : Node in x.get_children():
if y is Control:
y.visible = v
for __ : int in range(0, 2, 1):
for x : Node in ct:
if x is Control:
var v : bool = false
for y : Node in x.get_children():
if y is Control and y.visible:
v = true
break
x.visible = v
var can_split : bool = _can_split(container)
var can_merge_column : bool = _can_merge_column(base)
var can_merge_row : bool = _can_merge_row(base)
var can_sub_split : int = _sub()
var can_make_float : bool = (container.get_parent() is VBoxContainer)
for x : Node in (Engine.get_main_loop()).get_nodes_in_group(&"__script_splitter__IO__"):
x.enable(&"SPLIT_COLUMN",can_split)
x.enable(&"MERGE_COLUMN",can_merge_column)
x.enable(&"SPLIT_ROW",can_split)
x.enable(&"MERGE_ROW",can_merge_row)
x.enable(&"SPLIT_SUB", can_sub_split == 0)
x.enable(&"MERGE_SPLIT_SUB", can_sub_split == 1)
x.enable(&"MAKE_FLOATING", can_make_float)
_updating = false
func _can_split(container : Node) -> bool:
return container != null and container.get_child_count() > 1
func _can_merge_column(base : Manager.BaseContainer) -> bool:
return base != null and base.get_current_splitters().size() > 1
func _can_merge_row(base : Manager.BaseContainer) -> bool:
return base != null and base.get_all_containers().size() > 1
func _sub() -> int:
var sc : ScriptEditor = EditorInterface.get_script_editor()
if !is_instance_valid(sc.get_current_script()):
return -1
var ed : ScriptEditorBase = sc.get_current_editor()
var be : Control = ed.get_base_editor()
if be is CodeEdit:
if be.get_parent() is VSplitContainer:
return 1
return 0
return -1
func _on_pin(btn : Button) -> void:
var st : String = btn.get_meta(&"I")
if st.is_empty():
btn.queue_free()
return
var bl : Manager.BaseList = _manager.get_editor_list()
for x : int in bl.item_count():
if st == bl.get_item_tooltip(x):
bl.select(x)
return
func _make_pin(tree : SceneTree, fn : String, tp : String, icn : Texture2D, mod : Color) -> void:
if mod == Color.BLACK:
mod = Color.WHITE
for x : Node in tree.get_nodes_in_group(&"__SP_PIN_ROOT__"):
var btn : Button = Button.new()
btn.text = fn
btn.icon = icn
btn.set_meta(&"I", tp)
btn.pressed.connect(_on_pin.bind(btn))
btn.add_to_group(&"__SP_B_PIN__")
btn.set(&"theme_override_colors/icon_normal_color", mod)
btn.set(&"theme_override_colors/icon_focus_color", mod)
btn.set(&"theme_override_colors/icon_pressed_color", mod)
btn.set(&"theme_override_colors/icon_hover_color", mod)
btn.set(&"theme_override_colors/icon_hover_pressed_color", mod)
btn.set(&"theme_override_colors/icon_disabled_color", mod)
btn.set(&"theme_override_font_sizes/font_size", 12.0)
x.add_child(btn)
func _remove_pin(tree : SceneTree, tp : String) -> bool:
for x : Node in tree.get_nodes_in_group(&"__SP_PIN_ROOT__"):
if x.has_meta(&"I"):
if x.get_meta(&"I") == tp:
x.queue_free()
return true
return false
func execute(value : Variant = null) -> bool:
if value == null:
update()
return true
if value is StringName:
if value.is_empty():
update()
return true
var base : Manager.BaseContainer = _manager.get_base_container()
var container : Node = base.get_current_container()
var id : StringName = value
match id:
&"EXPAND":
if is_instance_valid(container):
var ct : Array[Node] = container.get_tree().get_nodes_in_group(&"__SP_BR__")
if expanded:
for x : Node in container.get_tree().get_nodes_in_group(&"__SP_IC__"):
for y : Node in x.get_children():
if y is Control:
y.visible = true
for x : Node in ct:
if x is Control:
x.visible = true
else:
var cb : Node = base.get_container_item(container)
for x : Node in container.get_tree().get_nodes_in_group(&"__SP_IC__"):
var v : bool = cb == x
for y : Node in x.get_children():
if y is Control:
y.visible = v
for __ : int in range(0, 2, 1):
for x : Node in ct:
if x is Control:
var v : bool = false
for y : Node in x.get_children():
if y is Control and y.visible:
v = true
break
x.visible = v
expanded = !expanded
for x : Node in container.get_tree().get_nodes_in_group(&"__script_splitter__IO__"):
if x.has_method(&"get_button"):
var button : Button = x.call(&"get_button", id)
if is_instance_valid(button):
if expanded:
button.modulate = Color.GREEN
else:
button.modulate = Color.WHITE
return true
&"PIN":
for x : MickeyTool in _tool_db.get_tools():
if x.get_root() == container:
if container is TabContainer:
if container.current_tab == x.get_control().get_index():
var list : Manager.BaseList = _manager.get_editor_list()
var idx : int = x.get_index()
if list.item_count() > idx and idx > -1:
var nm : String = list.get_item_text(idx)
var ps : String = list.get_item_tooltip(idx)
if _remove_pin(container.get_tree(), ps):
return true
_make_pin(container.get_tree(), nm, ps, list.get_item_icon(idx), list.get_item_icon_modulate(idx))
&"SPLIT_COLUMN":
if _can_split(container):
_manager.split_column.execute()
&"SPLIT_ROW":
if _can_split(container):
_manager.split_row.execute()
&"MERGE_COLUMN":
if _can_merge_column(base):
_manager.merge_tool.execute([null, false])
&"MERGE_ROW":
if _can_merge_row(base):
_manager.merge_tool.execute([null, true])
&"SPLIT_SUB":
if _sub() == 0:
for x : Node in Engine.get_main_loop().get_nodes_in_group(&"__SCRIPT_SPLITTER__"):
x.script_split()
break
&"MERGE_SPLIT_SUB":
if _sub() == 1:
for x : Node in Engine.get_main_loop().get_nodes_in_group(&"__SCRIPT_SPLITTER__"):
x.script_merge()
break
&"MAKE_FLOATING":
if (container.get_parent() is VBoxContainer):
for x : ToolDB.MickeyTool in _tool_db.get_tools():
if x.has(container):
var y : Node = (_manager._base_container._editor_container.get_parent())
var new_window : Window = EDITOR.instantiate()
y.add_child(new_window)
var root : Node = new_window.call(&"get_root")
root.initialize(null, _manager.get_base_container())
root.initialize_editor_contianer()
var _root : Node = x.get_root()
x.ochorus(root.call(&"get_current_editor"))
if _root.get_child_count() < 1:
var item : Node = _manager.get_base_container().get_container_item(_root)
if item.get_child_count() == 1:
var cont : Node = _manager.get_base_container().get_container(_root)
if cont.get_child_count() == 1:
cont.queue_free()
else:
item.queue_free()
else:
if _root.get_parent() is VBoxContainer:
_root.get_parent().queue_free()
else:
_root.queue_free()
new_window.setup()
new_window.update()
_manager.update()
return false
return false

View file

@ -0,0 +1 @@
uid://dqgve5bbg0w1m

View file

@ -0,0 +1,91 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
func _get_tool(value : Variant) -> MickeyTool:
var container : MickeyTool = null
if value == null:
container = _tool_db.get_by_reference(_manager.get_base_container().get_current_container())
elif value is Node:
container = _tool_db.get_by_reference(value)
elif value is Resource:
var list : ItemList = _manager.get_editor_list().get_editor_list()
var pth : String = value.resource_path
for x : int in list.item_count:
if pth == list.get_item_tooltip(x):
container = _tool_db.get_tool_id(x)
break
elif value is String:
var list : ItemList = _manager.get_editor_list().get_editor_list()
var pth : String = value
for x : int in list.item_count:
if pth == list.get_item_tooltip(x):
container = _tool_db.get_tool_id(x)
break
return container
func execute(value : Variant = null) -> bool:
if value is Array:
var mk : MickeyTool = _get_tool(value[0])
if is_instance_valid(mk) and value[1] is bool:
if mk and mk.is_valid():
var root : Node = mk.get_root()
var control : Node = root
if control.is_in_group(&"__SC_SPLITTER__"):
var cbase : Manager.BaseContainer = _manager.get_base_container()
if value[1]:
control = cbase.get_container(control)
for x : MickeyTool in _tool_db.get_tools():
if x.is_valid():
var node : Control = x.get_root()
if control == cbase.get_container(node):
x.reset()
control.queue_free()
else:
for x : MickeyTool in _tool_db.get_tools():
if x.is_valid():
var node : Control = x.get_root()
if node:
if node == control:
x.reset()
else:
x.reset()
var base : Manager.BaseContainer = _manager.get_base_container()
if root == base.get_current_container():
var nodes : Array[Node] = control.get_tree().get_nodes_in_group(&"__SC_SPLITTER__")
var container : Node = base.get_container_item(root)
for n : Node in nodes:
if n == root:
continue
var _container : Node = base.get_container_item(n)
if _container.get_parent() == container.get_parent():
var i0 : int = _container.get_index()
var i1 : int = container.get_index()
if i0 == i1 - 1 or i0 == i1 + 1:
base.set_current_container(n)
return true
var z : int = nodes.find(root)
if z != -1:
if z == 0:
if nodes.size() > 1:
base.set_current_container(nodes[1])
else:
if nodes.size() > 1:
base.set_current_container(nodes[z - 1])
return true
#if control.get_child_count() == 0 or root.get_child_count() == 0:
#control.queue_free()
return false

View file

@ -0,0 +1 @@
uid://cf43swgi3ydv8

View file

@ -0,0 +1,77 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
var _refreshing : bool = true
func _init(manager : Manager, tool_db : ToolDB) -> void:
super(manager, tool_db)
_setup()
func _notification(what: int) -> void:
if what == NOTIFICATION_PREDELETE:
var settings : EditorSettings = EditorInterface.get_editor_settings()
if settings.settings_changed.is_connected(_on_change):
settings.settings_changed.disconnect(_on_change)
func _on_change() -> void:
var dt : Array = ["plugin/script_splitter/behaviour/refresh_warnings_on_save"]
var settings : EditorSettings = EditorInterface.get_editor_settings()
var changes : PackedStringArray = settings.get_changed_settings()
for c in changes:
if c in dt:
_setup()
break
func _setup() -> void:
var settings : EditorSettings = EditorInterface.get_editor_settings()
if !settings.settings_changed.is_connected(_on_change):
settings.settings_changed.connect(_on_change)
for x : Array in [
["_refreshing", "plugin/script_splitter/behaviour/refresh_warnings_on_save"]
]:
if settings.has_setting(x[1]):
set(x[0], settings.get_setting(x[1]))
else:
settings.set_setting(x[1], get(x[0]))
func execute(_value : Variant = null) -> bool:
if !_refreshing:
return true
var sp : Array[Node] = Engine.get_main_loop().get_nodes_in_group(&"__SC_SPLITTER__")
var current : Control = _manager.get_base_container().get_current_container()
var ctool : MickeyTool = null
var ltool : MickeyTool = null
if sp.size() < 2:
return true
for x : Variant in _tool_db.get_tools():
if is_instance_valid(x):
if x.is_valid():
var i : int = sp.find(x.get_root())
var container : Node = sp[i]
if container is TabContainer:
var indx : int = x.get_control().get_index()
if container.current_tab == indx:
if container == current:
ctool = x
ltool = x
_manager.select_editor_by_index(x.get_index())
if is_instance_valid(ctool) and ctool != ltool:
_manager.select_editor_by_index(ctool.get_index())
return true

View file

@ -0,0 +1 @@
uid://c0wasvo7fwcqr

View file

@ -0,0 +1,26 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
func execute(value : Variant = null) -> bool:
if value is Array:
var control : Control = value[0]
var index : int = value[1]
if index < 0:
return false
for x : MickeyTool in _tool_db.get_tools():
if x.get_root() == control and x.get_control().get_index() == index:
var _index : int = x.get_index()
x.reset()
_manager.get_editor_list().remove(_index)
return true
return false

View file

@ -0,0 +1 @@
uid://bht1hix6hophq

View file

@ -0,0 +1,21 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
func execute(value : Variant = null) -> bool:
if value is Array:
if value[0] is Control and value[1] is int:
if value[1] < 0:
return false
for x : MickeyTool in _tool_db.get_tools():
if x.get_index() == value[1]:
if x.is_valid():
x.ochorus(value[0])
return true
return false

View file

@ -0,0 +1 @@
uid://ckvujn0hnsm11

View file

@ -0,0 +1,30 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
func execute(value : Variant = null) -> bool:
if value is Array:
var idx : int = value[0]
var node : Node = value[1]
if idx < 0:
return false
for x : MickeyTool in _tool_db.get_tools():
if x.get_root() == node:
if x.get_control().get_index() == idx:
var list : Manager.BaseList = _manager.get_editor_list()
var indx : int = x.get_index()
if list.item_count() > indx and indx > -1:
var el : ItemList = list.get_editor_list()
el.item_clicked.emit(indx,el.get_local_mouse_position(), MOUSE_BUTTON_RIGHT)
return true
return false

View file

@ -0,0 +1 @@
uid://dj5eoum4nippb

View file

@ -0,0 +1,30 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
func execute(value : Variant = null) -> bool:
if value is int:
if value < 0:
return false
for x : MickeyTool in _tool_db.get_tools():
if x.get_index() == value:
var root : Variant = x.get_root()
if is_instance_valid(root):
if root is TabContainer:
if !(root.get_window().has_focus()):
root.get_window().grab_focus()
var index : int = x.get_control().get_index()
if root.current_tab != index and index > -1 and root.get_tab_count() > index:
if root.has_method(&"set_tab"):
root.call(&"set_tab", index)
else:
root.current_tab = index
return true
return false

View file

@ -0,0 +1 @@
uid://bej35a842s2yd

View file

@ -0,0 +1,46 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
func execute(value : Variant = null) -> bool:
var _tool : MickeyTool = null
if value == null:
value = _manager.get_base_container().get_current_container()
elif value is Resource:
var list : ItemList = _manager.get_editor_list().get_editor_list()
var pth : String = value.resource_path
for x : int in list.item_count:
if pth == list.get_item_tooltip(x):
_tool = _tool_db.get_tool_id(x)
break
elif value is String:
var list : ItemList = _manager.get_editor_list().get_editor_list()
var pth : String = value
for x : int in list.item_count:
if pth == list.get_item_tooltip(x):
_tool = _tool_db.get_tool_id(x)
break
elif value is MickeyTool:
_tool = value
if _tool == null:
if value is MickeyTool:
_tool = value
elif value is Node:
_tool = _tool_db.get_by_reference(value)
if is_instance_valid(_tool) and _tool.is_valid():
if _manager._focus_tool.unfocus_enabled:
_tool.get_root().modulate = _manager._focus_tool.unfocus_color
var idx : int = _tool.get_index()
if idx > -1 and _manager.get_editor_list().item_count() > idx:
_manager.move_tool(_manager.get_base_container().new_column(), idx)
_manager.io.update()
return true
return false

View file

@ -0,0 +1 @@
uid://bomyp1t030hd

View file

@ -0,0 +1,45 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
func execute(value : Variant = null) -> bool:
var _tool : MickeyTool = null
if value == null:
value = _manager.get_base_container().get_current_container()
elif value is Resource:
var list : ItemList = _manager.get_editor_list().get_editor_list()
var pth : String = value.resource_path
for x : int in list.item_count:
if pth == list.get_item_tooltip(x):
_tool = _tool_db.get_tool_id(x)
break
elif value is String:
var list : ItemList = _manager.get_editor_list().get_editor_list()
var pth : String = value
for x : int in list.item_count:
if pth == list.get_item_tooltip(x):
_tool = _tool_db.get_tool_id(x)
break
if _tool == null:
if value is MickeyTool:
_tool = value
elif value is Node:
_tool = _tool_db.get_by_reference(value)
if is_instance_valid(_tool) and _tool.is_valid():
if _manager._focus_tool.unfocus_enabled:
_tool.get_root().modulate = _manager._focus_tool.unfocus_color
var idx : int = _tool.get_index()
if idx > -1 and _manager.get_editor_list().item_count() > idx:
_manager.move_tool(_manager.get_base_container().new_row(), idx)
_manager.io.update()
return true
return false

View file

@ -0,0 +1 @@
uid://bg2573oxujrny

View file

@ -0,0 +1,79 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const BaseContainer = preload("./../../../core/base/container.gd")
var _last_tool : MickeyTool = null
func execute(value : Variant = null) -> bool:
if value is Array:
if value.size() == 3:
if value[0] is Container and value[1] is int and value[2] is Container:
var from : Container = value[0]
var index : int = value[1]
var to : Container = value[2]
if from == to:
return false
if from is BaseContainer.SplitterContainer.SplitterEditorContainer.Editor and to is BaseContainer.SplitterContainer.SplitterEditorContainer.Editor:
for x : MickeyTool in _tool_db.get_tools():
if x.is_valid():
if x.get_root() == from and x.get_control().get_index() == index:
if _last_tool == x:
return false
_last_tool = x
x.ochorus(to)
_manager.clear_editors()
set_deferred(&"_last_tool", null)
return true
else:
if value[0] is String and value[1] is String and value[2] is bool:
var base : Manager.BaseList = _manager.get_editor_list()
var from : String = value[0]
var left : bool = value[2]
var to : String = value[1]
var fm : MickeyTool = null
var tm : MickeyTool = null
if from == to:
return false
for x : MickeyTool in _tool_db.get_tools():
if !x.is_valid():
continue
var t : String = base.get_item_tooltip(x.get_index())
if from == t:
fm = x
elif to == t:
tm = x
if is_instance_valid(fm) and is_instance_valid(tm) and fm != tm:
var froot : Node = fm.get_root()
var troot : Node = tm.get_root()
if froot == troot:
if left:
if froot is TabContainer:
_manager.move_item_container(froot, fm.get_index(), maxi(tm.get_index() - 1, 0))
froot.move_child(fm.get_control(), maxi(tm.get_control().get_index() - 1,0))
else:
if froot is TabContainer:
_manager.move_item_container(froot, fm.get_index(), tm.get_index())
froot.move_child(fm.get_control(), tm.get_control().get_index())
else:
if froot.get_child_count() == 1:
if _manager.merge_tool.execute([tm.get_control(), froot.get_parent().get_child_count() == 1]):
fm.ochorus(troot)
#if froot.get_parent().get_child_count() == 1:
#froot.get_parent().queue_free()
#else:
#froot.queue_free()
#_manager.get_base_container().update_split_container()
else:
fm.ochorus(troot)
return true
return false

View file

@ -0,0 +1 @@
uid://cwgbj8fqlg6wm

View file

@ -0,0 +1,105 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
var LIST_VISIBLE_SELECTED_COLOR : Color = Color.from_string("7b68ee", Color.CORNFLOWER_BLUE)
var LIST_VISIBLE_OTHERS_COLOR : Color = Color.from_string("4835bb", Color.DARK_BLUE)
var _script_list_selection : bool = false
func _init(manager : Manager, tool_db : ToolDB) -> void:
super(manager, tool_db)
_setup()
func _notification(what: int) -> void:
if what == NOTIFICATION_PREDELETE:
var settings : EditorSettings = EditorInterface.get_editor_settings()
if settings.settings_changed.is_connected(_on_change):
settings.settings_changed.disconnect(_on_change)
func _on_change() -> void:
var dt : Array = [
"plugin/script_splitter/behaviour/refresh_warnings_on_saveplugin/script_splitter/editor/list/selected_color"
,"plugin/script_splitter/behaviour/refresh_warnings_on_saveplugin/script_splitter/editor/list/others_color"
]
var settings : EditorSettings = EditorInterface.get_editor_settings()
var changes : PackedStringArray = settings.get_changed_settings()
for c in changes:
if c in dt:
_setup()
break
func _setup() -> void:
var settings : EditorSettings = EditorInterface.get_editor_settings()
if !settings.settings_changed.is_connected(_on_change):
settings.settings_changed.connect(_on_change)
for x : Array in [
["LIST_VISIBLE_SELECTED_COLOR", "plugin/script_splitter/behaviour/refresh_warnings_on_saveplugin/script_splitter/editor/list/selected_color"]
,["LIST_VISIBLE_OTHERS_COLOR", "plugin/script_splitter/behaviour/refresh_warnings_on_saveplugin/script_splitter/editor/list/others_color"]
]:
if settings.has_setting(x[1]):
set(x[0], settings.get_setting(x[1]))
else:
settings.set_setting(x[1], get(x[0]))
func execute(value : Variant = null) -> bool:
if !value is Array or value.size() < 1:
return false
if _script_list_selection:
return true
_script_list_selection = true
var _editor_list : ItemList = value[0]
var _script_list : ItemList = value[1]
var selected : String = ""
var others_selected : PackedStringArray = []
var current : TabContainer = _manager.get_base_container().get_current_container()
for x : MickeyTool in _tool_db.get_tools():
if x.is_valid():
var _root : Node = x.get_root()
if _root.current_tab == x.get_control().get_index():
var idx : int = x.get_index()
if _editor_list.item_count > idx and idx > -1:
if _root == current:
selected = _editor_list.get_item_tooltip(idx)
else:
others_selected.append(_editor_list.get_item_tooltip(idx))
var color : Color = LIST_VISIBLE_SELECTED_COLOR
var color_ctn : Color = LIST_VISIBLE_SELECTED_COLOR
var others : Color = LIST_VISIBLE_OTHERS_COLOR
color.a = 0.5
others.a = 0.5
color_ctn.a = 0.25
for x : int in _script_list.item_count:
var mt : String = _script_list.get_item_tooltip(x)
if selected == mt:
_script_list.set_item_custom_bg_color(x, color)
_script_list.set_item_custom_fg_color(x, Color.WHITE)
_script_list.select(x, true)
elif others_selected.has(mt):
_script_list.set_item_custom_bg_color(x, others)
else:
_script_list.set_item_custom_bg_color(x, Color.TRANSPARENT)
_script_list.ensure_current_is_visible()
set_deferred(&"_script_list_selection", false)
return false

View file

@ -0,0 +1 @@
uid://d0fdvav3whi4t

View file

@ -0,0 +1,80 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
const BaseList = preload("./../../../core/base/list.gd")
var _buffer : Dictionary = {}
func execute(value : Variant = null) -> bool:
var list : BaseList = _manager.get_editor_list()
if is_instance_valid(value) and value is MickeyTool:
_update(value, list)
else:
var arr : Array[MickeyTool] = _tool_db.get_tools()
for x : int in range(arr.size() - 1, -1, -1):
var _tool : Variant = arr[x]
if !is_instance_valid(_tool):
arr.remove_at(x)
continue
_update(_tool, list)
var dict : Dictionary = {}
for x : ToolDB.MickeyTool in _tool_db.get_tools():
if !x.is_valid():
continue
var _root : Node = x.get_root_control()
if dict.has(_root):
continue
dict[_root] = true
if _root.has_method(&"update"):
_root.call_deferred(&"update")
return true
func _update(mk : MickeyTool, list : BaseList) -> void:
if !is_instance_valid(mk) or !mk.is_valid():
return
var index : int = mk.get_index()
if index > -1 and list.item_count() > index:
var icon : Texture2D = list.get_item_icon(index)
var modulate : Color = list.get_item_icon_modulate(index)
if icon and modulate != Color.WHITE and modulate != Color.BLACK:
var root : Node = mk.get_root()
var make : bool = true
if root.has_method(&"set_icon_color"):
make = root.call(&"set_icon_color", modulate)
if make:
if _buffer.has(icon):
icon = _buffer[icon]
else:
var new_icon : Texture2D = mod_image(icon, modulate)
_buffer[icon] = new_icon
icon = new_icon
mk.update_metadata(
list.get_item_text(index),
list.get_item_tooltip(index),
icon
)
func mod_image(icon: Texture2D, modulate_color: Color) -> Texture2D:
var image : Image = icon.get_image()
if image.get_format() != Image.FORMAT_RGBA8:
image.convert(Image.FORMAT_RGBA8)
var width : int = image.get_width()
var height : int = image.get_height()
for x : int in range(width):
for y : int in range(height):
var original_color: Color = image.get_pixel(x, y)
var modulated_color: Color = modulate_color
if original_color.a > 0.0:
modulated_color.a = original_color.a
image.set_pixel(x, y, modulated_color)
return ImageTexture.create_from_image(image)

View file

@ -0,0 +1 @@
uid://bk6hirh5yekc5

View file

@ -0,0 +1,63 @@
@tool
extends "./../../../core/editor/app.gd"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Splitter
# https://github.com/CodeNameTwister/Script-Splitter
#
# Script Splitter addon for godot 4
# author: "Twister"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
func execute(arr : Variant = null) -> bool:
var value : Variant = arr[0]
var type : int = arr[1]
var _tool : MickeyTool = null
if value == null:
value = _manager.get_base_container().get_current_container()
elif value is Resource:
var list : ItemList = _manager.get_editor_list().get_editor_list()
var pth : String = value.resource_path
for x : int in list.item_count:
if pth == list.get_item_tooltip(x):
_tool = _tool_db.get_tool_id(x)
break
elif value is String:
var list : ItemList = _manager.get_editor_list().get_editor_list()
var pth : String = value
for x : int in list.item_count:
if pth == list.get_item_tooltip(x):
_tool = _tool_db.get_tool_id(x)
break
if _tool == null:
if value is MickeyTool:
_tool = value
elif value is Node:
_tool = _tool_db.get_by_reference(value)
if is_instance_valid(_tool):
var root : Node = _tool.get_root()
var indx : int = _tool.get_control().get_index()
var index : PackedInt32Array = []
for x : MickeyTool in _tool_db.get_tools():
if x.get_root() == root:
if type < 0:
if x.get_control().get_index() < indx:
index.append(x.get_index())
elif type > 0:
if x.get_control().get_index() > indx:
index.append(x.get_index())
else:
if x.get_control().get_index() != indx:
index.append(x.get_index())
index.sort()
for z : int in range(index.size() - 1, -1, -1):
_manager.get_editor_list().remove(index[z])
return false

View file

@ -0,0 +1 @@
uid://c8c77dtgjpvxr

Some files were not shown because too many files have changed in this diff Show more