Update to c08687556803f36dc8116a82eae87cd3cdac5fd8

This commit is contained in:
JeremyStar™ 2024-05-10 15:45:09 +02:00
parent 9d49f4120e
commit 4ecacaec90
Signed by: JeremyStarTM
GPG key ID: E366BAEF67E4704D
44 changed files with 520 additions and 300 deletions

View file

@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://beqhfqbyme6in" uid="uid://beqhfqbyme6in"
path="res://.godot/imported/example.png-47be253adf4d5d94d259a060339b95e0.ctex" path="res://.godot/imported/example.png-79ae4e30d20a5d2033286350990a93fe.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://SUI/dist/example.png" source_file="res://addons/SUI/dist/example.png"
dest_files=["res://.godot/imported/example.png-47be253adf4d5d94d259a060339b95e0.ctex"] dest_files=["res://.godot/imported/example.png-79ae4e30d20a5d2033286350990a93fe.ctex"]
[params] [params]

6
dist/sui.png.import vendored
View file

@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://db6wn76fb2bnu" uid="uid://db6wn76fb2bnu"
path="res://.godot/imported/sui.png-06a43b445987005f6f28d7a54ee82d35.ctex" path="res://.godot/imported/sui.png-c2630d6c0f48be3e5128a131222590e3.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://SUI/dist/sui.png" source_file="res://addons/SUI/dist/sui.png"
dest_files=["res://.godot/imported/sui.png-06a43b445987005f6f28d7a54ee82d35.ctex"] dest_files=["res://.godot/imported/sui.png-c2630d6c0f48be3e5128a131222590e3.ctex"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://bvg3rkn8w7apl" uid="uid://bvg3rkn8w7apl"
path="res://.godot/imported/Bold.ttf-22cba54e4f49541df0f88d22919fa43c.fontdata" path="res://.godot/imported/Bold.ttf-9d02378de508f6c4574455afb9e0f76f.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/FiraCode/Bold.ttf" source_file="res://addons/SUI/fonts/FiraCode/Bold.ttf"
dest_files=["res://.godot/imported/Bold.ttf-22cba54e4f49541df0f88d22919fa43c.fontdata"] dest_files=["res://.godot/imported/Bold.ttf-9d02378de508f6c4574455afb9e0f76f.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://bvluo6uibvwwo" uid="uid://bvluo6uibvwwo"
path="res://.godot/imported/Light.ttf-b7c03199b472b55574b9b45080c68c17.fontdata" path="res://.godot/imported/Light.ttf-5358520cff11f8deca184a7167eaf2b7.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/FiraCode/Light.ttf" source_file="res://addons/SUI/fonts/FiraCode/Light.ttf"
dest_files=["res://.godot/imported/Light.ttf-b7c03199b472b55574b9b45080c68c17.fontdata"] dest_files=["res://.godot/imported/Light.ttf-5358520cff11f8deca184a7167eaf2b7.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://b1pxod4r5puw8" uid="uid://b1pxod4r5puw8"
path="res://.godot/imported/Medium.ttf-40e43fa0b24d32cf56e9d3d649b2df2c.fontdata" path="res://.godot/imported/Medium.ttf-86d1745537123a429e6bccd6d86eb8b0.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/FiraCode/Medium.ttf" source_file="res://addons/SUI/fonts/FiraCode/Medium.ttf"
dest_files=["res://.godot/imported/Medium.ttf-40e43fa0b24d32cf56e9d3d649b2df2c.fontdata"] dest_files=["res://.godot/imported/Medium.ttf-86d1745537123a429e6bccd6d86eb8b0.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://dmyes0lwt4sgw" uid="uid://dmyes0lwt4sgw"
path="res://.godot/imported/Regular.ttf-04045b5ea8a54f2ef953f12106a268da.fontdata" path="res://.godot/imported/Regular.ttf-52cf847b22463b3df20f23164c25ab4e.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/FiraCode/Regular.ttf" source_file="res://addons/SUI/fonts/FiraCode/Regular.ttf"
dest_files=["res://.godot/imported/Regular.ttf-04045b5ea8a54f2ef953f12106a268da.fontdata"] dest_files=["res://.godot/imported/Regular.ttf-52cf847b22463b3df20f23164c25ab4e.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://c2qswgll1vpc6" uid="uid://c2qswgll1vpc6"
path="res://.godot/imported/Retina.ttf-3255d7691679a4e571c84d2485e39ad1.fontdata" path="res://.godot/imported/Retina.ttf-1b39772f452475d30e5a51f5e07cc1ae.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/FiraCode/Retina.ttf" source_file="res://addons/SUI/fonts/FiraCode/Retina.ttf"
dest_files=["res://.godot/imported/Retina.ttf-3255d7691679a4e571c84d2485e39ad1.fontdata"] dest_files=["res://.godot/imported/Retina.ttf-1b39772f452475d30e5a51f5e07cc1ae.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://m6urwfj4pmcw" uid="uid://m6urwfj4pmcw"
path="res://.godot/imported/Jost-Black.ttf-d2b76427d7ff73b7de9d6cb2ebbbffd9.fontdata" path="res://.godot/imported/Jost-Black.ttf-2c635ee32d5da5865ec199bd682a2d50.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Black.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Black.ttf"
dest_files=["res://.godot/imported/Jost-Black.ttf-d2b76427d7ff73b7de9d6cb2ebbbffd9.fontdata"] dest_files=["res://.godot/imported/Jost-Black.ttf-2c635ee32d5da5865ec199bd682a2d50.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://c8pq1wpbkpcaj" uid="uid://c8pq1wpbkpcaj"
path="res://.godot/imported/Jost-BlackItalic.ttf-c46f41f0d59e6636f3e254b2a526b666.fontdata" path="res://.godot/imported/Jost-BlackItalic.ttf-7c2c0ed51407347a2a6fdca6b6852845.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-BlackItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-BlackItalic.ttf"
dest_files=["res://.godot/imported/Jost-BlackItalic.ttf-c46f41f0d59e6636f3e254b2a526b666.fontdata"] dest_files=["res://.godot/imported/Jost-BlackItalic.ttf-7c2c0ed51407347a2a6fdca6b6852845.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://b6kyv4fqc0h0r" uid="uid://b6kyv4fqc0h0r"
path="res://.godot/imported/Jost-Bold.ttf-530330f4d453cedaf0fa5c530f0e9499.fontdata" path="res://.godot/imported/Jost-Bold.ttf-89758df4d1e4651df1f9f59f663b9998.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Bold.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Bold.ttf"
dest_files=["res://.godot/imported/Jost-Bold.ttf-530330f4d453cedaf0fa5c530f0e9499.fontdata"] dest_files=["res://.godot/imported/Jost-Bold.ttf-89758df4d1e4651df1f9f59f663b9998.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://dyie3a0vo05m6" uid="uid://dyie3a0vo05m6"
path="res://.godot/imported/Jost-BoldItalic.ttf-ce61bd5c22a68649a11234fc3f5045a4.fontdata" path="res://.godot/imported/Jost-BoldItalic.ttf-5c2bdb46e5980b65ed9ca1075638d114.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-BoldItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-BoldItalic.ttf"
dest_files=["res://.godot/imported/Jost-BoldItalic.ttf-ce61bd5c22a68649a11234fc3f5045a4.fontdata"] dest_files=["res://.godot/imported/Jost-BoldItalic.ttf-5c2bdb46e5980b65ed9ca1075638d114.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://dmal2c285wyd5" uid="uid://dmal2c285wyd5"
path="res://.godot/imported/Jost-Book.ttf-fcca27ee59160551b9f968d4a28f3094.fontdata" path="res://.godot/imported/Jost-Book.ttf-e796e63ee3da21fdf38d9a3c4b3b676b.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Book.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Book.ttf"
dest_files=["res://.godot/imported/Jost-Book.ttf-fcca27ee59160551b9f968d4a28f3094.fontdata"] dest_files=["res://.godot/imported/Jost-Book.ttf-e796e63ee3da21fdf38d9a3c4b3b676b.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://cbwek1bifl4ug" uid="uid://cbwek1bifl4ug"
path="res://.godot/imported/Jost-BookItalic.ttf-1620829af2a0daf59631f59a0bbfa89e.fontdata" path="res://.godot/imported/Jost-BookItalic.ttf-b20af08f46b9a9385e74f352e8542f31.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-BookItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-BookItalic.ttf"
dest_files=["res://.godot/imported/Jost-BookItalic.ttf-1620829af2a0daf59631f59a0bbfa89e.fontdata"] dest_files=["res://.godot/imported/Jost-BookItalic.ttf-b20af08f46b9a9385e74f352e8542f31.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://ojsgind3ered" uid="uid://ojsgind3ered"
path="res://.godot/imported/Jost-Hairline.ttf-60a860c6f046fc64490aa060536a6c96.fontdata" path="res://.godot/imported/Jost-Hairline.ttf-d1dd71e771c1b42e0258e87923e65831.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Hairline.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Hairline.ttf"
dest_files=["res://.godot/imported/Jost-Hairline.ttf-60a860c6f046fc64490aa060536a6c96.fontdata"] dest_files=["res://.godot/imported/Jost-Hairline.ttf-d1dd71e771c1b42e0258e87923e65831.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://qni4pu0bm308" uid="uid://qni4pu0bm308"
path="res://.godot/imported/Jost-HairlineItalic.ttf-1f22e8ae5a4c4ea3cdc6663fef01e37c.fontdata" path="res://.godot/imported/Jost-HairlineItalic.ttf-fb69b6a296010f64da381646abf766ae.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-HairlineItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-HairlineItalic.ttf"
dest_files=["res://.godot/imported/Jost-HairlineItalic.ttf-1f22e8ae5a4c4ea3cdc6663fef01e37c.fontdata"] dest_files=["res://.godot/imported/Jost-HairlineItalic.ttf-fb69b6a296010f64da381646abf766ae.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://c6pvexxexmc7r" uid="uid://c6pvexxexmc7r"
path="res://.godot/imported/Jost-Heavy.ttf-b0c23db38ef7e5d8579dac98f7f0e1bc.fontdata" path="res://.godot/imported/Jost-Heavy.ttf-13a86b042195fc082920b8b1790b2121.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Heavy.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Heavy.ttf"
dest_files=["res://.godot/imported/Jost-Heavy.ttf-b0c23db38ef7e5d8579dac98f7f0e1bc.fontdata"] dest_files=["res://.godot/imported/Jost-Heavy.ttf-13a86b042195fc082920b8b1790b2121.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://dv5eppfnp0g1p" uid="uid://dv5eppfnp0g1p"
path="res://.godot/imported/Jost-HeavyItalic.ttf-e7fcb33dfb4a18e0f2c41c8c1568acf0.fontdata" path="res://.godot/imported/Jost-HeavyItalic.ttf-53870a664183e8ede629796746926a7d.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-HeavyItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-HeavyItalic.ttf"
dest_files=["res://.godot/imported/Jost-HeavyItalic.ttf-e7fcb33dfb4a18e0f2c41c8c1568acf0.fontdata"] dest_files=["res://.godot/imported/Jost-HeavyItalic.ttf-53870a664183e8ede629796746926a7d.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://lgdhrfvuirc8" uid="uid://lgdhrfvuirc8"
path="res://.godot/imported/Jost-Light.ttf-ba510b840fdc146937673fd2582f4389.fontdata" path="res://.godot/imported/Jost-Light.ttf-2dbed4b0da6ce9f06416069dec6915ed.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Light.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Light.ttf"
dest_files=["res://.godot/imported/Jost-Light.ttf-ba510b840fdc146937673fd2582f4389.fontdata"] dest_files=["res://.godot/imported/Jost-Light.ttf-2dbed4b0da6ce9f06416069dec6915ed.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://b71mb2nm3qhpc" uid="uid://b71mb2nm3qhpc"
path="res://.godot/imported/Jost-LightItalic.ttf-7f878179a0fd0bc18ca1d551eac1268b.fontdata" path="res://.godot/imported/Jost-LightItalic.ttf-702988867a5b4796d468dce0ad421d3a.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-LightItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-LightItalic.ttf"
dest_files=["res://.godot/imported/Jost-LightItalic.ttf-7f878179a0fd0bc18ca1d551eac1268b.fontdata"] dest_files=["res://.godot/imported/Jost-LightItalic.ttf-702988867a5b4796d468dce0ad421d3a.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://d3cdnrnmplqa2" uid="uid://d3cdnrnmplqa2"
path="res://.godot/imported/Jost-Medium.ttf-18a1c5f1f46710985bb7bd431a626c3b.fontdata" path="res://.godot/imported/Jost-Medium.ttf-f161b5eb0d0dc3093b24164ab7b49c5c.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Medium.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Medium.ttf"
dest_files=["res://.godot/imported/Jost-Medium.ttf-18a1c5f1f46710985bb7bd431a626c3b.fontdata"] dest_files=["res://.godot/imported/Jost-Medium.ttf-f161b5eb0d0dc3093b24164ab7b49c5c.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://c8pypsury6pp0" uid="uid://c8pypsury6pp0"
path="res://.godot/imported/Jost-MediumItalic.ttf-74fab0e71b9d6a783a4c23d09e5a8bc2.fontdata" path="res://.godot/imported/Jost-MediumItalic.ttf-01b4f8b1311e6c370cf8956be27a4d92.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-MediumItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-MediumItalic.ttf"
dest_files=["res://.godot/imported/Jost-MediumItalic.ttf-74fab0e71b9d6a783a4c23d09e5a8bc2.fontdata"] dest_files=["res://.godot/imported/Jost-MediumItalic.ttf-01b4f8b1311e6c370cf8956be27a4d92.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://gnouta0qju0p" uid="uid://gnouta0qju0p"
path="res://.godot/imported/Jost-Semi.ttf-0d5b54fce18b66b9a3efd1947bd643ee.fontdata" path="res://.godot/imported/Jost-Semi.ttf-9377052d79aeca7e001c2ca77cfcbe8e.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Semi.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Semi.ttf"
dest_files=["res://.godot/imported/Jost-Semi.ttf-0d5b54fce18b66b9a3efd1947bd643ee.fontdata"] dest_files=["res://.godot/imported/Jost-Semi.ttf-9377052d79aeca7e001c2ca77cfcbe8e.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://d2iwusq4f7oql" uid="uid://d2iwusq4f7oql"
path="res://.godot/imported/Jost-SemiItalic.ttf-c0398693734e1f928de1f3d879cec4ca.fontdata" path="res://.godot/imported/Jost-SemiItalic.ttf-68daaa58429e6ae8bd8151fd1bf4b7c6.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-SemiItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-SemiItalic.ttf"
dest_files=["res://.godot/imported/Jost-SemiItalic.ttf-c0398693734e1f928de1f3d879cec4ca.fontdata"] dest_files=["res://.godot/imported/Jost-SemiItalic.ttf-68daaa58429e6ae8bd8151fd1bf4b7c6.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://cgcmctm1yk74f" uid="uid://cgcmctm1yk74f"
path="res://.godot/imported/Jost-Thin.ttf-e0ab4e7fb89f79107d9e4dd6035aa171.fontdata" path="res://.godot/imported/Jost-Thin.ttf-cf88a1c2ba9d17fec2aa86a24e8ff592.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-Thin.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-Thin.ttf"
dest_files=["res://.godot/imported/Jost-Thin.ttf-e0ab4e7fb89f79107d9e4dd6035aa171.fontdata"] dest_files=["res://.godot/imported/Jost-Thin.ttf-cf88a1c2ba9d17fec2aa86a24e8ff592.fontdata"]
[params] [params]

View file

@ -3,12 +3,12 @@
importer="font_data_dynamic" importer="font_data_dynamic"
type="FontFile" type="FontFile"
uid="uid://boi4bwfisvegs" uid="uid://boi4bwfisvegs"
path="res://.godot/imported/Jost-ThinItalic.ttf-8c39a4954eac56e794cf73949a2e807e.fontdata" path="res://.godot/imported/Jost-ThinItalic.ttf-7838f2160d46284d888598d15fd30dc0.fontdata"
[deps] [deps]
source_file="res://SUI/fonts/Jost/Jost-ThinItalic.ttf" source_file="res://addons/SUI/fonts/Jost/Jost-ThinItalic.ttf"
dest_files=["res://.godot/imported/Jost-ThinItalic.ttf-8c39a4954eac56e794cf73949a2e807e.fontdata"] dest_files=["res://.godot/imported/Jost-ThinItalic.ttf-7838f2160d46284d888598d15fd30dc0.fontdata"]
[params] [params]

7
plugin.cfg Normal file
View file

@ -0,0 +1,7 @@
[plugin]
name="StarOpenSource UI"
description="StarOpenSource UI (SUI for short) is a collection of common ui elements for the Godot Engine."
author="The StarOpenSource Project & Contributors"
version=""
script="plugin.gd"

10
plugin.gd Normal file
View file

@ -0,0 +1,10 @@
@tool
extends EditorPlugin
func _enter_tree():
if !FileAccess.file_exists("res://CORE/.corebasepath") and !FileAccess.file_exists("res://addons/CORE/.corebasepath"):
printerr("The CORE Framework is not installed in your project.\nPlease install the CORE Framework for StarOpenSource UI to work.\nSee https://core.staropensource.de/category/getting-started/")
func _exit_tree():
print("Thank you for using StarOpenSource UI")

View file

@ -1,27 +1,23 @@
[gd_scene load_steps=4 format=3 uid="uid://1r7pvm0biuk7"] [gd_scene load_steps=3 format=3 uid="uid://1r7pvm0biuk7"]
[ext_resource type="Script" path="res://SUI/src/SuiHeader.gd" id="1_b3qg3"] [ext_resource type="Script" path="res://addons/SUI/src/SuiHeader.gd" id="2_bnj46"]
[ext_resource type="Script" path="res://SUI/src/SuiHeaderTool.gd" id="2_bnj46"] [ext_resource type="Theme" uid="uid://c08yxv1cirbxe" path="res://addons/SUI/themes/RichTextLabel.tres" id="3_877pi"]
[ext_resource type="Theme" uid="uid://c08yxv1cirbxe" path="res://SUI/themes/RichTextLabel.tres" id="3_877pi"]
[node name="SuiHeader" type="Control"] [node name="SuiHeader" type="Control"]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_right = -780.0 offset_right = -1278.0
offset_bottom = -490.0 offset_bottom = -765.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_b3qg3")
[node name="ToolScript" type="Node" parent="."]
script = ExtResource("2_bnj46") script = ExtResource("2_bnj46")
[node name="Text" type="RichTextLabel" parent="."] [node name="Text" type="RichTextLabel" parent="."]
layout_mode = 0 layout_mode = 0
offset_right = 170.0 offset_right = 162.0
offset_bottom = 50.0 offset_bottom = 45.0
theme = ExtResource("3_877pi") theme = ExtResource("3_877pi")
theme_override_font_sizes/normal_font_size = 35 theme_override_font_sizes/normal_font_size = 35
theme_override_font_sizes/bold_font_size = 35 theme_override_font_sizes/bold_font_size = 35

View file

@ -1,39 +1,32 @@
[gd_scene load_steps=5 format=3 uid="uid://cxg471hoqg6mr"] [gd_scene load_steps=3 format=3 uid="uid://cxg471hoqg6mr"]
[ext_resource type="Script" path="res://SUI/src/SuiIconButton.gd" id="1_ekv73"] [ext_resource type="Script" path="res://addons/SUI/src/SuiIconButton.gd" id="2_g6elc"]
[ext_resource type="Texture2D" uid="uid://beqhfqbyme6in" path="res://SUI/dist/example.png" id="2_c5w38"] [ext_resource type="Theme" uid="uid://prqv77t23rsq" path="res://addons/SUI/themes/Button.tres" id="3_knxki"]
[ext_resource type="Script" path="res://SUI/src/SuiIconButtonTool.gd" id="2_g6elc"]
[ext_resource type="Theme" uid="uid://prqv77t23rsq" path="res://SUI/themes/Button.tres" id="3_knxki"]
[node name="SuiIconButton" type="Control"] [node name="SuiIconButton" type="Control"]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_right = -900.0 offset_right = -1290.0
offset_bottom = -490.0 offset_bottom = -660.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_ekv73") script = ExtResource("2_g6elc")
image = ExtResource("2_c5w38")
ip_left = 8 ip_left = 8
ip_top = 5 ip_top = 5
ip_right = 8 ip_right = 8
ip_bottom = 5 ip_bottom = 5
[node name="ToolScript" type="Node" parent="."]
script = ExtResource("2_g6elc")
[node name="Button" type="Button" parent="."] [node name="Button" type="Button" parent="."]
layout_mode = 0 layout_mode = 0
offset_right = 50.0 offset_right = 150.0
offset_bottom = 50.0 offset_bottom = 150.0
theme = ExtResource("3_knxki") theme = ExtResource("3_knxki")
[node name="Icon" type="NinePatchRect" parent="."] [node name="Icon" type="NinePatchRect" parent="."]
layout_mode = 0 layout_mode = 0
offset_left = 8.0 offset_left = 8.0
offset_top = 5.0 offset_top = 5.0
offset_right = 42.0 offset_right = 150.0
offset_bottom = 45.0 offset_bottom = 150.0
texture = ExtResource("2_c5w38")

41
scenesrc/SuiScroller.tscn Normal file
View file

@ -0,0 +1,41 @@
[gd_scene load_steps=3 format=3 uid="uid://b31tqrkh73to2"]
[ext_resource type="Script" path="res://addons/SUI/src/SuiScroller.gd" id="1_dcfql"]
[ext_resource type="Theme" uid="uid://jg7l68yqa6n2" path="res://addons/SUI/themes/ScrollBar.tres" id="2_4lteo"]
[node name="SuiScroller" type="Control"]
clip_contents = true
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = -1053.33
offset_bottom = -563.333
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_dcfql")
[node name="HScrollBar" type="HScrollBar" parent="."]
modulate = Color(1, 1, 1, 0.501961)
layout_mode = 1
offset_top = 226.417
offset_right = 366.42
offset_bottom = 246.667
theme = ExtResource("2_4lteo")
max_value = 386.67
step = 1.0
page = 1.0
[node name="VScrollBar" type="VScrollBar" parent="."]
modulate = Color(1, 1, 1, 0.501961)
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -20.25
offset_bottom = 226.417
grow_horizontal = 0
theme = ExtResource("2_4lteo")
max_value = 246.667
step = 1.0
page = 1.0

View file

@ -1,26 +1,22 @@
[gd_scene load_steps=4 format=3 uid="uid://bso65vpjqc4g4"] [gd_scene load_steps=3 format=3 uid="uid://bso65vpjqc4g4"]
[ext_resource type="Script" path="res://SUI/src/SuiText.gd" id="1_1jc62"] [ext_resource type="Script" path="res://addons/SUI/src/SuiText.gd" id="2_87ovr"]
[ext_resource type="Script" path="res://SUI/src/SuiTextTool.gd" id="2_87ovr"] [ext_resource type="Theme" uid="uid://c08yxv1cirbxe" path="res://addons/SUI/themes/RichTextLabel.tres" id="3_fttgr"]
[ext_resource type="Theme" uid="uid://c08yxv1cirbxe" path="res://SUI/themes/RichTextLabel.tres" id="3_fttgr"]
[node name="SuiText" type="Control"] [node name="SuiText" type="Control"]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_right = -850.0 offset_right = -1345.0
offset_bottom = -503.0 offset_bottom = -773.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_1jc62")
[node name="ToolScript" type="Node" parent="."]
script = ExtResource("2_87ovr") script = ExtResource("2_87ovr")
[node name="Text" type="RichTextLabel" parent="."] [node name="Text" type="RichTextLabel" parent="."]
layout_mode = 0 layout_mode = 0
offset_right = 100.0 offset_right = 95.0
offset_bottom = 37.0 offset_bottom = 37.0
theme = ExtResource("3_fttgr") theme = ExtResource("3_fttgr")
theme_override_font_sizes/normal_font_size = 25 theme_override_font_sizes/normal_font_size = 25

View file

@ -1,34 +1,30 @@
[gd_scene load_steps=5 format=3 uid="uid://4hi8y7pu3w0v"] [gd_scene load_steps=4 format=3 uid="uid://4hi8y7pu3w0v"]
[ext_resource type="Script" path="res://SUI/src/SuiTextButton.gd" id="1_tjgbd"] [ext_resource type="Script" path="res://addons/SUI/src/SuiTextButton.gd" id="2_43xd1"]
[ext_resource type="Script" path="res://SUI/src/SuiTextButtonTool.gd" id="2_43xd1"] [ext_resource type="Theme" uid="uid://prqv77t23rsq" path="res://addons/SUI/themes/Button.tres" id="3_u0br7"]
[ext_resource type="Theme" uid="uid://prqv77t23rsq" path="res://SUI/themes/Button.tres" id="3_u0br7"] [ext_resource type="Theme" uid="uid://c08yxv1cirbxe" path="res://addons/SUI/themes/RichTextLabel.tres" id="4_vp57w"]
[ext_resource type="Theme" uid="uid://c08yxv1cirbxe" path="res://SUI/themes/RichTextLabel.tres" id="4_vp57w"]
[node name="SuiTextButton" type="Control"] [node name="SuiTextButton" type="Control"]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_right = -700.0 offset_right = -1224.0
offset_bottom = -490.0 offset_bottom = -757.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_tjgbd")
[node name="ToolScript" type="Node" parent="."]
script = ExtResource("2_43xd1") script = ExtResource("2_43xd1")
[node name="Button" type="Button" parent="."] [node name="Button" type="Button" parent="."]
layout_mode = 0 layout_mode = 0
offset_right = 250.0 offset_right = 216.0
offset_bottom = 50.0 offset_bottom = 53.0
theme = ExtResource("3_u0br7") theme = ExtResource("3_u0br7")
[node name="Text" type="RichTextLabel" parent="."] [node name="Text" type="RichTextLabel" parent="."]
layout_mode = 0 layout_mode = 0
offset_right = 250.0 offset_right = 216.0
offset_bottom = 50.0 offset_bottom = 53.0
mouse_filter = 2 mouse_filter = 2
theme = ExtResource("4_vp57w") theme = ExtResource("4_vp57w")
theme_override_font_sizes/normal_font_size = 35 theme_override_font_sizes/normal_font_size = 35

45
src/SuiBaseClass.gd Normal file
View file

@ -0,0 +1,45 @@
@tool
extends Control
class_name SuiBaseClass
## Reference to the [CORE] Object. Set by [method _ready].
var core: Core
## Reference to a [CoreLoggerInstance]. Must be set manually.
var logger: CoreLoggerInstance = null
@export_category("Debugging")
## Determines if the element should be updated automatically [b]while running in the editor[/b].
@export var editor_process: bool = true
## Determines if the element should be updated automatically [b]during your game/application's runtime[/b].
@export var runtime_process: bool = true
# +++ initialization and process methods +++
## Initializes the base class.[br]
## To run additional code in `_ready()`, use this example:
## [/codeblock]
## func _ready() -> void:
## super()
## # Your code here
## [/codeblock]
func _ready() -> void:
if !in_editor(): core = get_node("/root/CORE")
## Calls [method update_element] if allowed to execute
func _process(_delta: float):
if execute_process(): update_element()
# +++ element updating +++
## This method is intended to be extended by a child script.[br]
## Use this to implement your own element update logic.
func update_element() -> void: pass
# +++ etc +++
## Determines if [method _process] is allowed to execute-
func execute_process() -> bool:
if in_editor() and !editor_process: return false
elif !in_editor() and !runtime_process: return false
else: return true
## Determines if running inside or outside the editor-
func in_editor() -> bool:
return get_node_or_null("/root/CORE") == null

View file

@ -1,24 +1,14 @@
extends Control @tool
extends SuiBaseClass
@onready var logger: CoreLoggerInstance = get_node("/root/CORE").logger.get_instance("SUI/src/SuiHeader.gd")
@export_category("Base Configuration") @export_category("Base Configuration")
@export_subgroup("RichTextLabel") @export_subgroup("RichTextLabel")
## Enables support for BBCode.
@export var bbcode_support: bool = true @export var bbcode_support: bool = true
## The text you want to display.
@export_multiline var text: String = "[center]SuiHeader[/center]" @export_multiline var text: String = "[center]SuiHeader[/center]"
## The size your text should have.
@export var font_size: int = 35 @export var font_size: int = 35
@export_category("Debugging")
@export var editor_process: bool = true
@export var runtime_process: bool = true
func _ready() -> void:
# Free unused children
logger.diag("<" + name + "> Freeing ToolScript")
get_child(0).queue_free()
func _process(_delta: float) -> void:
if !runtime_process: return
update_element()
func update_element() -> void: func update_element() -> void:
# Update sizes # Update sizes

View file

@ -1,19 +0,0 @@
@tool
extends Node
func _process(_delta: float):
if !get_parent().editor_process: return
var parent: Control = get_parent()
var text: RichTextLabel = parent.get_node("Text")
# Update sizes
text.size = parent.size
# Update RichTextLabel stuff
text.bbcode_enabled = parent.bbcode_support
text.text = parent.text
text.add_theme_font_size_override("normal_font_size", parent.font_size)
text.add_theme_font_size_override("bold_font_size", parent.font_size)
text.add_theme_font_size_override("italics_font_size", parent.font_size)
text.add_theme_font_size_override("bold_italics_font_size", parent.font_size)
text.add_theme_font_size_override("mono_font_size", parent.font_size)

View file

@ -1,54 +1,62 @@
extends Control @tool
extends SuiBaseClass
@onready var logger: CoreLoggerInstance = get_node("/root/CORE").logger.get_instance("SUI/src/SuiIconButton.gd")
@export_category("Base Configuration") @export_category("Base Configuration")
@export_subgroup("Button") @export_subgroup("Button")
## Makes the button unable to be interacted with.
@export var disabled: bool = false @export var disabled: bool = false
## Makes the button toggleable.
@export var toggle_mode: bool = false @export var toggle_mode: bool = false
## Forwarded from the internal [Button]. Will be overriden with the internal button's value, any changes to this variable will not be reflected.
@export var button_pressed: bool = false @export var button_pressed: bool = false
@export_subgroup("Icon") @export_subgroup("Icon")
## The image you want to display.
@export var image: Texture2D @export var image: Texture2D
## See [member NinePatchRect.region_rect].
@export var region_rect: Rect2 = Rect2(0, 0, 0, 0) @export var region_rect: Rect2 = Rect2(0, 0, 0, 0)
## See [member NinePatchRect.draw_center].
@export var draw_center: bool = true @export var draw_center: bool = true
@export_category("Advanced Configuration") @export_category("Advanced Configuration")
@export_subgroup("Icon Padding") @export_subgroup("Icon Padding")
## Icon padding (left side)
@export var ip_left: int = 0 @export var ip_left: int = 0
## Icon padding (top side)
@export var ip_top: int = 0 @export var ip_top: int = 0
## Icon padding (right side)
@export var ip_right: int = 0 @export var ip_right: int = 0
## Icon padding (bottom side)
@export var ip_bottom: int = 0 @export var ip_bottom: int = 0
@export_subgroup("Patch Margin") @export_subgroup("Patch Margin")
## See [member NinePatchRect.patch_margin_left].
@export var pm_left: int = 0 @export var pm_left: int = 0
## See [member NinePatchRect.patch_margin_top].
@export var pm_top: int = 0 @export var pm_top: int = 0
## See [member NinePatchRect.patch_margin_right].
@export var pm_right: int = 0 @export var pm_right: int = 0
## See [member NinePatchRect.patch_margin_bottom].
@export var pm_bottom: int = 0 @export var pm_bottom: int = 0
@export_subgroup("Axis Stretch") @export_subgroup("Axis Stretch")
## See [member NinePathRect.axis_stretch_horizontal].
@export var as_horizontal: NinePatchRect.AxisStretchMode = NinePatchRect.AxisStretchMode.AXIS_STRETCH_MODE_STRETCH @export var as_horizontal: NinePatchRect.AxisStretchMode = NinePatchRect.AxisStretchMode.AXIS_STRETCH_MODE_STRETCH
## See [member NinePathRect.axis_stretch_vertical].
@export var as_vertical: NinePatchRect.AxisStretchMode = NinePatchRect.AxisStretchMode.AXIS_STRETCH_MODE_STRETCH @export var as_vertical: NinePatchRect.AxisStretchMode = NinePatchRect.AxisStretchMode.AXIS_STRETCH_MODE_STRETCH
@export_category("Debugging")
@export var editor_process: bool = true
@export var runtime_process: bool = true
## Emitted when the button is pressed.
signal down signal down
## Emitted when the button is released.
signal up signal up
## Emitted when the button has been pressed.
signal pressed signal pressed
## Emitted when the button has been toggled.
signal toggled signal toggled
func _ready() -> void: func _ready() -> void:
# Free unused children super()
logger.diag("<" + name + "> Freeing ToolScript") if !in_editor():
get_child(0).queue_free() $Button.connect("button_down", func() -> void: emit_signal("down"))
$Button.connect("button_up", func() -> void: emit_signal("up"))
# Add signals $Button.connect("pressed", func() -> void: emit_signal("pressed"))
logger.diag("<" + name + "> Adding signals") $Button.connect("toggled", func(toggled_on: bool) -> void: emit_signal("toggled", toggled_on))
$Button.connect("button_down", func() -> void: emit_signal("down"))
$Button.connect("button_up", func() -> void: emit_signal("up"))
$Button.connect("pressed", func() -> void: emit_signal("pressed"))
$Button.connect("toggled", func(toggled_on: bool) -> void: emit_signal("toggled", toggled_on))
func _process(_delta: float) -> void:
if !runtime_process: return
update_element()
func update_element() -> void: func update_element() -> void:
# Update button size # Update button size
@ -76,3 +84,6 @@ func update_element() -> void:
$Icon.patch_margin_bottom = pm_bottom $Icon.patch_margin_bottom = pm_bottom
$Icon.axis_stretch_horizontal = as_horizontal $Icon.axis_stretch_horizontal = as_horizontal
$Icon.axis_stretch_vertical = as_vertical $Icon.axis_stretch_vertical = as_vertical
func update_pressed_state(is_pressed: bool) -> void:
$Button.button_pressed = is_pressed

View file

@ -1,34 +0,0 @@
@tool
extends Node
func _process(_delta: float):
if !get_parent().editor_process: return
var parent: Control = get_parent()
var button: Button = parent.get_node("Button")
var icon: NinePatchRect = parent.get_node("Icon")
# Update button size
button.size = parent.size
# Update icon size + padding
icon.size = parent.size
icon.position.x = parent.ip_left
icon.position.y = parent.ip_top
icon.size.x -= parent.ip_right + parent.ip_left
icon.size.y -= parent.ip_bottom + parent.ip_top
# Update Button stuff
button.disabled = parent.disabled
button.toggle_mode = parent.toggle_mode
button.button_pressed = parent.button_pressed
# Update NinePatchRect stuff
icon.texture = parent.image
icon.region_rect = parent.region_rect
icon.draw_center = parent.draw_center
icon.patch_margin_left = parent.pm_left
icon.patch_margin_top = parent.pm_top
icon.patch_margin_right = parent.pm_right
icon.patch_margin_bottom = parent.pm_bottom
icon.axis_stretch_horizontal = parent.as_horizontal
icon.axis_stretch_vertical = parent.as_vertical

213
src/SuiScroller.gd Normal file
View file

@ -0,0 +1,213 @@
@tool
extends SuiBaseClass
@export_category("Base Configuration")
@export_subgroup("Visibility")
## Controls the visibility of the horizontal scroll bar.
@export var hscroll_visibility: SuiTypes.ScrollVisibility = SuiTypes.ScrollVisibility.AUTO
## Controls the visibility of the vertical scroll bar.
@export var vscroll_visibility: SuiTypes.ScrollVisibility = SuiTypes.ScrollVisibility.AUTO
@export_category("Advanced Configuration")
@export_subgroup("Scroller speed")
## Determines how the scrolling speed should be calculated.
@export var speed_mode: SuiTypes.ScrollMode = SuiTypes.ScrollMode.MULTIPLY_CUSTOM_VALUE
## The speed multiplier, used for [constant SuiTypes.ScrollMode.MULTIPLY_VIEWPORT] and [constant SuiTypes.ScrollMode.MULTIPLY_CUSTOM_VALUE].
@export var speed_multiplier: float = 1.0
## The speed value, used for [constant SuiTypes.ScrollMode.MULTIPLY_CUSTOM_VALUE] and [constant SuiTypes.ScrollMode.CUSTOM_VALUE].
@export var speed_value: float = 1.0
@export_subgroup("Scroller speed (wheel)")
## Determines how much the scrolling speed should be multiplied by when scrolling with the scroll wheel.[br]
## Using a lower value results in more mouse scrolling, higher values result in less mouse scrolling.
@export var speed_wheel_multiplier: float = 50.0
@export_subgroup("Scroll bar thickness")
## Determines how the thickness of both scroll bars should be calculated.
@export var thickness_mode: SuiTypes.ScrollMode = SuiTypes.ScrollMode.MULTIPLY_VIEWPORT
## The thickness multiplier, used for [constant SuiTypes.ScrollMode.MULTIPLY_VIEWPORT] and [constant SuiTypes.ScrollMode.MULTIPLY_CUSTOM_VALUE].
@export var thickness_multiplier: float = 0.025
## The thickness value, used for [constant SuiTypes.ScrollMode.MULTIPLY_CUSTOM_VALUE] and [constant SuiTypes.ScrollMode.CUSTOM_VALUE].
@export var thickness_value: float = 0.0
@export_category("Debugging")
## Will cause elements not inside the SuiScroller node to be no longer clipped [i]in editor mode[/i].
## Useful when editing the contents of a SuiScroller node, but may cause visual chaos.
@export var editor_clip_content: bool = true
## Internal, don't modify.
var mouse_hovering: bool = false
func _ready() -> void:
super()
if !in_editor(): logger = core.logger.get_instance("SUI/src/SuiScroller.gd", self)
func _process(delta):
mouse_hovering = Rect2(Vector2(), size).has_point(get_local_mouse_position()) and !Rect2($HScrollBar.position, $HScrollBar.size).has_point(get_local_mouse_position()) and !Rect2($VScrollBar.position, $VScrollBar.size).has_point(get_local_mouse_position())
super(delta)
func update_element() -> void:
# Clip contents
if in_editor() and !editor_clip_content: clip_contents = false
else: clip_contents = true
# Update sizes and positions
match(thickness_mode):
SuiTypes.ScrollMode.MULTIPLY_VIEWPORT:
var window_size: Vector2i = Vector2i(ProjectSettings.get("display/window/size/viewport_width"), ProjectSettings.get("display/window/size/viewport_height"))
# Find smaller value
var scale_size: int
if window_size.x < window_size.y: scale_size = window_size.x
elif window_size.x > window_size.y: scale_size = window_size.y
$HScrollBar.size.y = scale_size*thickness_multiplier
$VScrollBar.size.x = scale_size*thickness_multiplier
SuiTypes.ScrollMode.MULTIPLY_CUSTOM_VALUE:
$HScrollBar.size.y = thickness_value*thickness_multiplier
$VScrollBar.size.x = thickness_value*thickness_multiplier
SuiTypes.ScrollMode.CUSTOM_VALUE:
$HScrollBar.size.y = thickness_value
$VScrollBar.size.x = thickness_value
$HScrollBar.size.x = size.x-$VScrollBar.size.x
$VScrollBar.size.y = size.y-$HScrollBar.size.y
$HScrollBar.position.x = 0
$HScrollBar.position.y = size.y-$HScrollBar.size.y
$VScrollBar.position.x = size.x-$VScrollBar.size.x
$VScrollBar.position.y = 0
# Update scrollbar properties
# Determine scroll speed
var speed: float
match(speed_mode):
SuiTypes.ScrollMode.MULTIPLY_VIEWPORT:
# Find smaller value
var scale_size: float
if size.x < size.y: scale_size = size.x
elif size.x > size.y: scale_size = size.y
speed = scale_size*speed_multiplier
SuiTypes.ScrollMode.MULTIPLY_CUSTOM_VALUE:
speed = speed_value*speed_multiplier
SuiTypes.ScrollMode.CUSTOM_VALUE:
speed = speed_value
# HScrollBar
$HScrollBar.step = speed
$HScrollBar.page = speed
# VScrollBar
$VScrollBar.step = speed
$VScrollBar.page = speed
# Update visibility
# HScrollBar
match(hscroll_visibility):
SuiTypes.ScrollVisibility.AUTO:
$HScrollBar.visible = true
$HScrollBar.modulate = Color8(255, 255, 255, 128)
SuiTypes.ScrollVisibility.SHOWN:
$HScrollBar.visible = true
$HScrollBar.modulate = Color8(255, 255, 255, 255)
SuiTypes.ScrollVisibility.HIDDEN: $HScrollBar.visible = false
_:
if in_editor(): printerr("Invalid hscroll_visibility value '" + str(hscroll_visibility) + "'")
else: logger.crash("Invalid hscroll_visibility value '" + str(hscroll_visibility) + "'")
# VScrollBar
match(vscroll_visibility):
SuiTypes.ScrollVisibility.AUTO:
$VScrollBar.visible = true
$VScrollBar.modulate = Color8(255, 255, 255, 128)
SuiTypes.ScrollVisibility.SHOWN:
$VScrollBar.visible = true
$VScrollBar.modulate = Color8(255, 255, 255, 255)
SuiTypes.ScrollVisibility.HIDDEN: $VScrollBar.visible = false
_:
if in_editor(): printerr("Invalid vscroll_visibility value '" + str(hscroll_visibility) + "'")
else: logger.crash("Invalid vscroll_visibility value '" + str(hscroll_visibility) + "'")
if in_editor() and get_child_count() == 3:
var container: Control = get_child(2)
# Update container position
container.position.x = 0
container.position.y = 0
return
# Move control
if get_child_count() == 3 and get_child(2) != $VScrollBar: move_child(get_child(2), 0)
# Make scrolling possible
if get_child_count() == 3 and get_child(0).is_class("Control"):
var container: Control = get_child(0)
var max_scrolling_distance: Vector2 = Vector2.ZERO
# Update container size
if vscroll_visibility == SuiTypes.ScrollVisibility.HIDDEN: container.size.x = size.x
else: container.size.x = size.x-$VScrollBar.size.x
if vscroll_visibility == SuiTypes.ScrollVisibility.HIDDEN: container.size.y = size.y
else: container.size.y = size.y-$HScrollBar.size.y
# Update container position
container.position.x = -$HScrollBar.value
container.position.y = -$VScrollBar.value
# Get max scrolling distance
for child in container.get_children(true):
# Ensure 'size' and 'position' variables are either a Vector2 or Vector2i if not of type Control.
if !child.is_class("Control"):
match(typeof(child.get("size"))):
Variant.Type.TYPE_VECTOR2: pass
Variant.Type.TYPE_VECTOR2I: pass
_: continue
match(typeof(child.get("position"))):
Variant.Type.TYPE_VECTOR2: pass
Variant.Type.TYPE_VECTOR2I: pass
_: continue
if child.size.x+child.position.x > max_scrolling_distance.x:
max_scrolling_distance.x = child.size.x+child.position.x-container.size.x
if child.size.y+child.position.y > max_scrolling_distance.y:
max_scrolling_distance.y = child.size.y+child.position.y-container.size.y
# Update scroll bar max value
$HScrollBar.max_value = max_scrolling_distance.x
$VScrollBar.max_value = max_scrolling_distance.y
else:
$HScrollBar.max_value = size.x
$VScrollBar.max_value = size.y
func _scroll(direction: SuiTypes.ScrollDirection) -> void:
var bar: ScrollBar
var dsign: int = 0
# Set 'dsign'
match(direction):
SuiTypes.ScrollDirection.UP: dsign = +1
SuiTypes.ScrollDirection.DOWN: dsign = -1
SuiTypes.ScrollDirection.LEFT: dsign = -1
SuiTypes.ScrollDirection.RIGHT: dsign = +1
# Set 'bar'
match(direction):
SuiTypes.ScrollDirection.UP: bar = $VScrollBar
SuiTypes.ScrollDirection.DOWN: bar = $VScrollBar
SuiTypes.ScrollDirection.LEFT: bar = $HScrollBar
SuiTypes.ScrollDirection.RIGHT: bar = $HScrollBar
bar.value = bar.value + bar.step * speed_wheel_multiplier * dsign
# Credit: https://forum.godotengine.org/t/how-do-i-get-input-from-the-mouse-wheel/27979/2
func _input(event: InputEvent):
if !mouse_hovering: return
if event is InputEventMouseButton:
if event.is_pressed():
match(event.button_index):
MouseButton.MOUSE_BUTTON_WHEEL_UP:
if Input.is_key_pressed(Key.KEY_SHIFT): _scroll(SuiTypes.ScrollDirection.LEFT)
else: _scroll(SuiTypes.ScrollDirection.DOWN)
MouseButton.MOUSE_BUTTON_WHEEL_DOWN:
if Input.is_key_pressed(Key.KEY_SHIFT): _scroll(SuiTypes.ScrollDirection.RIGHT)
else: _scroll(SuiTypes.ScrollDirection.UP)
MouseButton.MOUSE_BUTTON_WHEEL_LEFT: _scroll(SuiTypes.ScrollDirection.RIGHT)
MouseButton.MOUSE_BUTTON_WHEEL_RIGHT: _scroll(SuiTypes.ScrollDirection.LEFT)
func _get_configuration_warnings():
if get_child_count() != 3:
return ["SuiScroller is intended to operate with one child only."]
elif !get_child(2).is_class("Control"):
return ["SuiScroller only supports Controls."]
return []

View file

@ -1,34 +1,28 @@
extends Control @tool
extends SuiBaseClass
@onready var logger: CoreLoggerInstance = get_node("/root/CORE").logger.get_instance("SUI/src/SuiText.gd")
@export_category("Base Configuration") @export_category("Base Configuration")
@export_subgroup("RichTextLabel") @export_subgroup("RichTextLabel")
## Enables support for BBCode.
@export var bbcode_support: bool = true @export var bbcode_support: bool = true
## The text you want to display.
@export_multiline var text: String = "[center]SuiText[/center]" @export_multiline var text: String = "[center]SuiText[/center]"
## The size your text should have.
@export var font_size: int = 25 @export var font_size: int = 25
@export_category("Debugging")
@export var editor_process: bool = true
@export var runtime_process: bool = true
## Emitted when some interactive BBCode tag (e.g. url) is clicked
signal meta_clicked signal meta_clicked
## Emitted when some interactive BBCode tag (e.g. url) is hovered over
signal meta_hover_started signal meta_hover_started
## Emitted when some interactive BBCode tag (e.g. url) is no longer being hovered over
signal meta_hover_ended signal meta_hover_ended
func _ready() -> void: func _ready():
# Free unused children super()
logger.diag("<" + name + "> Freeing ToolScript") if in_editor():
get_child(0).queue_free() $Text.connect("meta_clicked", func(meta: Variant) -> void: emit_signal("meta_clicked", meta))
$Text.connect("meta_hover_started", func(meta: Variant) -> void: emit_signal("meta_hover_started", meta))
# Add signals $Text.connect("meta_hover_ended", func(meta: Variant) -> void: emit_signal("meta_hover_ended", meta))
logger.diag("<" + name + "> Adding signals")
$Text.connect("meta_clicked", func(meta: Variant) -> void: emit_signal("meta_clicked", meta))
$Text.connect("meta_hover_started", func(meta: Variant) -> void: emit_signal("meta_hover_started", meta))
$Text.connect("meta_hover_ended", func(meta: Variant) -> void: emit_signal("meta_hover_ended", meta))
func _process(_delta: float) -> void:
if !runtime_process: return
update_element()
func update_element() -> void: func update_element() -> void:
# Update sizes # Update sizes

View file

@ -1,40 +1,38 @@
extends Control @tool
extends SuiBaseClass
@onready var logger: CoreLoggerInstance = get_node("/root/CORE").logger.get_instance("SUI/src/SuiTextButton.gd")
@export_category("Base Configuration") @export_category("Base Configuration")
@export_subgroup("Button") @export_subgroup("Button")
## Makes the button unable to be interacted with.
@export var disabled: bool = false @export var disabled: bool = false
## Makes the button toggleable.
@export var toggle_mode: bool = false @export var toggle_mode: bool = false
## Forwarded from the internal [Button]. Will be overriden with the internal button's value, any changes to this variable will not be reflected.
@export var button_pressed: bool = false @export var button_pressed: bool = false
@export_subgroup("RichTextLabel") @export_subgroup("RichTextLabel")
## Enables support for BBCode.
@export var bbcode_support: bool = true @export var bbcode_support: bool = true
## The text you want to display.
@export_multiline var text: String = "[center]SuiTextButton[/center]" @export_multiline var text: String = "[center]SuiTextButton[/center]"
## The size your text should have.
@export var font_size: int = 35 @export var font_size: int = 35
@export_category("Debugging")
@export var editor_process: bool = true
@export var runtime_process: bool = true
## Emitted when the button is pressed.
signal down signal down
## Emitted when the button is released.
signal up signal up
## Emitted when the button has been pressed.
signal pressed signal pressed
## Emitted when the button has been toggled.
signal toggled signal toggled
func _ready() -> void: func _ready() -> void:
# Free unused children super()
logger.diag("<" + name + "> Freeing ToolScript") if !in_editor():
get_child(0).queue_free() $Button.connect("button_down", func() -> void: emit_signal("down"))
$Button.connect("button_up", func() -> void: emit_signal("up"))
# Add signals $Button.connect("pressed", func() -> void: emit_signal("pressed"))
logger.diag("<" + name + "> Adding signals") $Button.connect("toggled", func(toggled_on: bool) -> void: emit_signal("toggled", toggled_on))
$Button.connect("button_down", func() -> void: emit_signal("down"))
$Button.connect("button_up", func() -> void: emit_signal("up"))
$Button.connect("pressed", func() -> void: emit_signal("pressed"))
$Button.connect("toggled", func(toggled_on: bool) -> void: emit_signal("toggled", toggled_on))
func _process(_delta: float) -> void:
if !runtime_process: return
update_element()
func update_element() -> void: func update_element() -> void:
# Update sizes # Update sizes
@ -54,3 +52,6 @@ func update_element() -> void:
$Text.add_theme_font_size_override("italics_font_size", font_size) $Text.add_theme_font_size_override("italics_font_size", font_size)
$Text.add_theme_font_size_override("bold_italics_font_size", font_size) $Text.add_theme_font_size_override("bold_italics_font_size", font_size)
$Text.add_theme_font_size_override("mono_font_size", font_size) $Text.add_theme_font_size_override("mono_font_size", font_size)
func update_pressed_state(is_pressed: bool) -> void:
$Button.button_pressed = is_pressed

View file

@ -1,26 +0,0 @@
@tool
extends Node
func _process(_delta: float):
if !get_parent().editor_process: return
var parent: Control = get_parent()
var button: Button = parent.get_node("Button")
var text: RichTextLabel = parent.get_node("Text")
# Update sizes
button.size = parent.size
text.size = parent.size
# Update Button stuff
button.disabled = parent.disabled
button.toggle_mode = parent.toggle_mode
button.button_pressed = parent.button_pressed
# Update RichTextLabel stuff
text.bbcode_enabled = parent.bbcode_support
text.text = parent.text
text.add_theme_font_size_override("normal_font_size", parent.font_size)
text.add_theme_font_size_override("bold_font_size", parent.font_size)
text.add_theme_font_size_override("italics_font_size", parent.font_size)
text.add_theme_font_size_override("bold_italics_font_size", parent.font_size)
text.add_theme_font_size_override("mono_font_size", parent.font_size)

View file

@ -1,19 +0,0 @@
@tool
extends Node
func _process(_delta: float):
if !get_parent().editor_process: return
var parent: Control = get_parent()
var text: RichTextLabel = parent.get_node("Text")
# Update sizes
text.size = parent.size
# Update RichTextLabel stuff
text.bbcode_enabled = parent.bbcode_support
text.text = parent.text
text.add_theme_font_size_override("normal_font_size", parent.font_size)
text.add_theme_font_size_override("bold_font_size", parent.font_size)
text.add_theme_font_size_override("italics_font_size", parent.font_size)
text.add_theme_font_size_override("bold_italics_font_size", parent.font_size)
text.add_theme_font_size_override("mono_font_size", parent.font_size)

22
src/SuiTypes.gd Normal file
View file

@ -0,0 +1,22 @@
extends Node
class_name SuiTypes
## Used for determining the visibility of scroll bars.
enum ScrollVisibility {
AUTO,
SHOWN,
HIDDEN
}
## Used for determining how to get the result of various things.
enum ScrollMode {
MULTIPLY_VIEWPORT,
MULTIPLY_CUSTOM_VALUE,
CUSTOM_VALUE
}
## Indicates some scrolling direction.
enum ScrollDirection {
UP,
DOWN,
LEFT,
RIGHT
}

3
themes/ScrollBar.tres Normal file
View file

@ -0,0 +1,3 @@
[gd_resource type="Theme" format=3 uid="uid://jg7l68yqa6n2"]
[resource]