I've had to make custom control nodes for my game, "reinventing the wheel" just to have a scrollable list node. This talk raises some good points about Godot's limiting UI control nodes, we should really be working to improve the state of UI! Overall love the idea of making apps in Godot, especially if they have 3D elements!! Some easy PRs for future consideration: - on scrolled signal for scroll containers - swap checkbox option - custom tooltip positioning
Actually scrolled signal already exists but it's in the scrollbar, which you get with get_v_scroll_bar(), and the value_changed signal since it's a range slider The only downside is you can't connect from the editor, only code, since the scrollbar nodes are hidden/internal there
I also made a few tools for myself that I use in my daily life at work, for instance. One of them is a time tracker tool (based on which I write invoices to my clients for how long I worked on their projects that they hired me for). For that time tracker tool however I not only activated the `low_processor_mode` but I also dynamically change the value of the `low_processor_usage_mode_sleep_usec` field in the project settings depending on the application being focused or being in background. Because I once recognized that my application is eating surprisingly much CPU time when actually being idling around in background. So, my application now recognizes whenever it loses focus (e.g. when the user switches to another program or when he minimizes the software) and it instantly throttles the CPU usage (by increasing the sleep time between frames using that said setting, you can find it in the `OS` class, by the way). The value will be reset as soon as the application gets back the focus. Long story short, in order to lower the CPU consumption even more, especially if your non-game software is in background, I can recommend to adjust the "Low Processor Mode Sleep µsec" value.
Hi @@NoctorOnwood, in coincidence I published a (really small) plugin recently. Search for "Idle Energy Saver" in Godot's AssetLib. It's the exact same code that I am using in my time tracking tool, I just extracted it into a plugin a few days ago to be able to share it. The source code is MIT licensed, you can have a look at it. Don't get a shock, though, it's more documentation than actual code, the code itself is only a bunch of lines. 😅 Since you asked for my experience with it, I can only repeat myself: I'm using it with a time tracking tool that I once built. The tool is running all day long on my Macbook when I am at work (most of the time without having focus and therefore with CPU usage being throttled by the plugin). I never really close the tool unless I restart my Macbook (which also happens only once every few weeks). It's running fine and not causing any issues for me. Feel free to try it out and tell me. Either open an issue on GitHub if you got any problems or be invited to search for my "⚡ Idle Energy Saver" post on Reddit and reply to it. Hope this is the answer you expected. 😘
Thanks for the talk. One option that wasn't discussed was using add-ons for extending/customizing things. In example, the habituary app could improve things for others by making the scroll container that was customized as an add-on for others to use. By taking this approach, we can help each other make things better. Granted there will always be exceptions, but I was surprised that in the talk this wasn't mentioned. The ecosystem for tools and add-ons is well made and plentiful. There is no reason we couldn't do the same for UI components, etc.
For the scroll signal, it's in the ScrollBar, not scroll container So get_v_scroll_bar().value_changed, since scroll bar is just a range slider And in fact you probably didn't even have to recreate it because there are theme properties for the scroll bar. The grabber is a stylebox, which you can just set as a StyleBoxEmpty if you don't want them
Exhibit 1 with right-to-left support sounded like an easy first PR so I checked annnd... Godot already supports it! The commit is 4 years old so it's not a new feature. On your CheckButton node, scroll down to Control > Layout, expand that and override Layout Direction with Right-to-Left.
That feature is meant for supporting RtL languages like Arabic, so while it does swap the order of the checkbox and the text, it also reverses the anchors and places the icon at the end rather than the beginning.
Actually we've been seeing a few applications. Built-in Godot [material maker comes to mind] 4:06 part of why I think godot is so good for application development is exactly that...
I tend to avoid choosing Godot for apps because it takes time to load up and takes up too much memory, but it does come quite well equipped for apps. I think it's generally a whole lot easier to work with immediate ui frameworks (like Dear Imgui), but Godot's UI comes with some major advantages too. One that's quite relevant to me is the TextEdit/CodeEdit nodes and the syntax highlighting tools, because one of my app projects will have some code editing in it (already has a tiny bit), and so Godot was an obvious choice for that one.
lol that codeedit is a a lifesaver for me. generally for ui work i have tended to lean on react just because i am a web developer in general so using a react based ui setup has been my goto. but now for things that deal with code/text processing specifically i have started to lean on godot more and more just because of that node. yes web has code editor libs but while they are nice it is just so much simpler to do it in godot since it has a smaller footprint to do it and in my opinion a way nicer file/binary access api.
I've had plenty of occasions where I've thought, "I could just make this simple UI app in Godot". It would be a small, single .exe file and it has every UI element you could want with a Theme Editor.
here are the solutions to both of your issues: CheckButton problem: You can change the position of the button by changing the Layout Direction setting to "Right-to-left". Select the CheckButton node and you will see it in the Control section of the inspector. Tooltip position: Change it in the project settings Display - Mouse Cursor - Tooltip position offset. Let me know if I'm wrong.
Here are some issues I have found with the control nodes: * The Editor has a Plus next to the tabs to create a new scene, when you use the tab container there is no way to add a Plus like that. * Tool-tip I wish you could change the default Tool-tip node from Label into a RichTextLabel so BBCODE works and you can make colored text and tables in it without having to give every node a custom tool-tip. * The PopupMenus of MenuButtons are very sluggish when you move between submenus until they close one submenu and open another.
@@MrEliteXXL Sure, there are lots of other methods of creating something functionally similar, but I wanted the same simple plus button without the tab theming around it. As a workaround for now I just add a button to the last tab in the row with a plus icon in it. Its a bit of extra work to keep it always in last place as the user can add/remove tabs, but it works. Still wish the whole godot uses godot ui for the editor was more completely exposed to the user, so this would just work and look as it does in the editor...
I think 90% of my issues with Godot's UI system would be solved with a simple 'max width' option for containers. Like center this container, and expand up to this max width, but no smaller than this min width.
There is another annoying disadvantage when using the Godot UI system: Support for HiDPI screens is limited because icons can only be one size and bitmaps (not svgs) so any scaling above 100% results in blurry icons and other graphical elements... I don't know how the Godot Editor itself can support non-blurry icons when using scales above 100% but at least the last time I tried to create an app using Godot I could not get HiDPI graphics working.
Is there an easy way to decouple the app logic from the UI scenes? It still feel "weird" to add a bunch of dummy nodes just to plug multiple scripts and making a big singleton to carry everything is harder to debug
As an App developer, I've been tempted to make something in Godot, but I think a major feature that Godot doesn't have out of the box is a robust navigation between screen
it's actually super easy. the trick is to use the .hide() and .show() funcitons to open and close screens. (hidden nodes don't receive input or get processed) so for example my main menu is always ready and only in .hide() in the tree. any sub menu/screen just hides the screen from before and shows it back when it deletes itself. or hides itself and opens another sub screen with that method alone you can make very complex button menues that go pretty deep into sub stuff. for games it can be done the same way if memory isn't an issue. hide the main world scene when you enter a small sub scene and that's it. when you exit it you show the main world again, adjust the player placement and enemies if needed and move on
Camera device able to acces on Apple devices, Out that, people might need some media library Current pr now has native dialog The next great things prolly something really important for native interactions
I wonder what the executable file size turns out to be!? So I'm looking into making tiny apps with dialogs and Progress bars. PySide is awesome but humongous...
Around 70 mb. The app that I'm exporting is 68 mb (plus the PCK file). I don't know how big python executables are, but I do know Godot consumes a lot of memory (250k+ mb) and takes a lot longer to load up. For small apps I wouldn't recommend it. The only reason I'm using Godot is that Godot comes with CodeEdit nodes, which will make it easy for me to add code editing with syntax highlighting to my program. I tried a lot of UI stuff over time. For smaller stuff I'd go with python, or something else. It's much easier to write programs using just plain code. There's PySimpleGui (version 4, which is FOSS), PyImgui, PySide, etc. PySimpleGui is fairly nice to work with (uses Tkinter, Qt or Wx as backend of your choice). Apps will be native-looking-ish. I've never used PySide, but iirc you can make prettier UIs with it. If that's important, then stick with it (but yea, Qt is complex, so...). Tkinter can do that too, but it has an abysmal API, so I personally wouldn't recommend it except for the simplest apps. But my ultimate preference goes to any immediate mode UIs. It's a whole lot simpler to work with, and you write a lot less code. PyImgui is great. It's getting outdated and does some things different from the C++ version (which makes it harder to learn it), but it's still quite good. A word of advice though, if you ever use it: avoid using the "with" keyword with it, because it screws up error messages. My best experience with Dear Imgui, though, has been with the Odin language. It's up to date, and Odin is a great language. Dear Imgui may not make your UI as pretty as PySide, but you can still change the theme and get something pleasing. The theme is small and easy to tinker with. As a somewhat unexpected alternative, there's also Haxe, with HaxeUI, which I have to admit is a remarkably good UI framework. The only problem with Haxe, imo, is that compilation times for native are abysmal... And that it's a Java derivative, which means it has an overengineered code structure.
For crossplatform development game engine are really viable as you can build for any OS from single codebase specially light Engine like godot But since they are not specifically made for app dev some feature what we get by default from these framework might not be available but i think godot should focus in this area too it can become a viable crossplatform app dev tool
Giving too much freedom in a game engine can be dangerous. If the engine allows for creating software with direct system access, it could lead to the creation of malicious tools. A game engine should focus exclusively on game development and, possibly, the production of videos or movies if desired. However, a game should never interact outside its project folder, except for saving and loading related files, such as .sav files.
@@hbibliait's open source, a malicious user will always have access. I hard disagree that its godot job to handicap the user. People who want to create mallard will find tools to do so.
I think the biggest flaw with Godot's UI system is easily the stupid complexity of the theming system. It's actually quite hard to learn and understand it beyond the node overrides and it drove me nuts.
Electron apps are for web devs wanting to make apps, and now we have godot for game devs, go figure! Electron is still a good option given you get access to a more "complete" language and a super hardacore ultra battle tested UI framework. Really though, it matters what you are comfortable with and how your brain works
What fiasco? You mean when all the dorks got mad on Twitter and a bunch of low rate nothing youtubers tried to capitalize on it? That lasted a few days. Redot turned out to be a scam, too
I've had to make custom control nodes for my game, "reinventing the wheel" just to have a scrollable list node. This talk raises some good points about Godot's limiting UI control nodes, we should really be working to improve the state of UI!
Overall love the idea of making apps in Godot, especially if they have 3D elements!!
Some easy PRs for future consideration:
- on scrolled signal for scroll containers
- swap checkbox option
- custom tooltip positioning
Why didn't you use a ScrollContainer? Do you need something that handles a lot of nodes? Something like a RecyclerView?
Actually scrolled signal already exists but it's in the scrollbar, which you get with get_v_scroll_bar(), and the value_changed signal since it's a range slider
The only downside is you can't connect from the editor, only code, since the scrollbar nodes are hidden/internal there
I also made a few tools for myself that I use in my daily life at work, for instance. One of them is a time tracker tool (based on which I write invoices to my clients for how long I worked on their projects that they hired me for).
For that time tracker tool however I not only activated the `low_processor_mode` but I also dynamically change the value of the `low_processor_usage_mode_sleep_usec` field in the project settings depending on the application being focused or being in background. Because I once recognized that my application is eating surprisingly much CPU time when actually being idling around in background. So, my application now recognizes whenever it loses focus (e.g. when the user switches to another program or when he minimizes the software) and it instantly throttles the CPU usage (by increasing the sleep time between frames using that said setting, you can find it in the `OS` class, by the way). The value will be reset as soon as the application gets back the focus.
Long story short, in order to lower the CPU consumption even more, especially if your non-game software is in background, I can recommend to adjust the "Low Processor Mode Sleep µsec" value.
That's great! Can you share you experience about the sleep period?
Hi @@NoctorOnwood, in coincidence I published a (really small) plugin recently. Search for "Idle Energy Saver" in Godot's AssetLib. It's the exact same code that I am using in my time tracking tool, I just extracted it into a plugin a few days ago to be able to share it.
The source code is MIT licensed, you can have a look at it. Don't get a shock, though, it's more documentation than actual code, the code itself is only a bunch of lines. 😅
Since you asked for my experience with it, I can only repeat myself: I'm using it with a time tracking tool that I once built.
The tool is running all day long on my Macbook when I am at work (most of the time without having focus and therefore with CPU usage being throttled by the plugin). I never really close the tool unless I restart my Macbook (which also happens only once every few weeks).
It's running fine and not causing any issues for me. Feel free to try it out and tell me. Either open an issue on GitHub if you got any problems or be invited to search for my "⚡ Idle Energy Saver" post on Reddit and reply to it.
Hope this is the answer you expected. 😘
Thanks for the talk. One option that wasn't discussed was using add-ons for extending/customizing things. In example, the habituary app could improve things for others by making the scroll container that was customized as an add-on for others to use. By taking this approach, we can help each other make things better. Granted there will always be exceptions, but I was surprised that in the talk this wasn't mentioned. The ecosystem for tools and add-ons is well made and plentiful. There is no reason we couldn't do the same for UI components, etc.
very helpful talk!
hopefully the maintainers can implement a few of those "reinvent the wheel" features like the checkbox.
For the scroll signal, it's in the ScrollBar, not scroll container
So get_v_scroll_bar().value_changed, since scroll bar is just a range slider
And in fact you probably didn't even have to recreate it because there are theme properties for the scroll bar. The grabber is a stylebox, which you can just set as a StyleBoxEmpty if you don't want them
Exhibit 1 with right-to-left support sounded like an easy first PR so I checked annnd... Godot already supports it! The commit is 4 years old so it's not a new feature. On your CheckButton node, scroll down to Control > Layout, expand that and override Layout Direction with Right-to-Left.
That feature is meant for supporting RtL languages like Arabic, so while it does swap the order of the checkbox and the text, it also reverses the anchors and places the icon at the end rather than the beginning.
@@MuffinMan_Ken Right, abusing a side-effect isn't a good thing.
I use godot mostly for UIs actually, so finding people doing the same is always pleasing.
This motivated me to start making the ultimate meme maker
As a standalone app? 🤔
I just feel like meme maker screams "web-app" :D
Actually we've been seeing a few applications. Built-in Godot [material maker comes to mind]
4:06 part of why I think godot is so good for application development is exactly that...
I'm using Godot for simple photo manipulations app right now (add text bubble, stickers, logo etc.) and it's super easy
I tend to avoid choosing Godot for apps because it takes time to load up and takes up too much memory, but it does come quite well equipped for apps. I think it's generally a whole lot easier to work with immediate ui frameworks (like Dear Imgui), but Godot's UI comes with some major advantages too. One that's quite relevant to me is the TextEdit/CodeEdit nodes and the syntax highlighting tools, because one of my app projects will have some code editing in it (already has a tiny bit), and so Godot was an obvious choice for that one.
lol that codeedit is a a lifesaver for me. generally for ui work i have tended to lean on react just because i am a web developer in general so using a react based ui setup has been my goto. but now for things that deal with code/text processing specifically i have started to lean on godot more and more just because of that node. yes web has code editor libs but while they are nice it is just so much simpler to do it in godot since it has a smaller footprint to do it and in my opinion a way nicer file/binary access api.
I've had plenty of occasions where I've thought, "I could just make this simple UI app in Godot". It would be a small, single .exe file and it has every UI element you could want with a Theme Editor.
Super cool talk
I'm working on a few software apps and I find Godot to be great for it.
Some really nice tips!
Thanks for the talk :]
i have used winform and godot for ui and godot is much better.
Everything is better than winforms tho lol
@@Beryesa. even making a UI with Unity or Unreal would be better than WinForms lmao
Winform's biggest perk is that it works. It might not work as you want, it might not work well, but it works.
here are the solutions to both of your issues:
CheckButton problem: You can change the position of the button by changing the Layout Direction setting to "Right-to-left". Select the CheckButton node and you will see it in the Control section of the inspector.
Tooltip position: Change it in the project settings Display - Mouse Cursor - Tooltip position offset.
Let me know if I'm wrong.
Here are some issues I have found with the control nodes:
* The Editor has a Plus next to the tabs to create a new scene, when you use the tab container there is no way to add a Plus like that.
* Tool-tip I wish you could change the default Tool-tip node from Label into a RichTextLabel so BBCODE works and you can make colored text and tables in it without having to give every node a custom tool-tip.
* The PopupMenus of MenuButtons are very sluggish when you move between submenus until they close one submenu and open another.
Can’t you do a tab named “+” that when opened it creates a new tab?
@@MrEliteXXL Sure, there are lots of other methods of creating something functionally similar, but I wanted the same simple plus button without the tab theming around it. As a workaround for now I just add a button to the last tab in the row with a plus icon in it. Its a bit of extra work to keep it always in last place as the user can add/remove tabs, but it works. Still wish the whole godot uses godot ui for the editor was more completely exposed to the user, so this would just work and look as it does in the editor...
10:06 nothing happened after enabling debug canvas redraws and changing to mobile... I'm missing something?
I think 90% of my issues with Godot's UI system would be solved with a simple 'max width' option for containers. Like center this container, and expand up to this max width, but no smaller than this min width.
There is another annoying disadvantage when using the Godot UI system: Support for HiDPI screens is limited because icons can only be one size and bitmaps (not svgs) so any scaling above 100% results in blurry icons and other graphical elements...
I don't know how the Godot Editor itself can support non-blurry icons when using scales above 100% but at least the last time I tried to create an app using Godot I could not get HiDPI graphics working.
Is there an easy way to decouple the app logic from the UI scenes? It still feel "weird" to add a bunch of dummy nodes just to plug multiple scripts and making a big singleton to carry everything is harder to debug
does it mean i can build android app using godot? is it similar to flutter &/ another crossplatform frameworks?
One of my favorite ideas! 🧠💭
As an App developer, I've been tempted to make something in Godot, but I think a major feature that Godot doesn't have out of the box is a robust navigation between screen
it's actually super easy.
the trick is to use the .hide() and .show() funcitons to open and close screens. (hidden nodes don't receive input or get processed)
so for example my main menu is always ready and only in .hide() in the tree.
any sub menu/screen just hides the screen from before and shows it back when it deletes itself. or hides itself and opens another sub screen
with that method alone you can make very complex button menues that go pretty deep into sub stuff.
for games it can be done the same way if memory isn't an issue.
hide the main world scene when you enter a small sub scene and that's it. when you exit it you show the main world again, adjust the player placement and enemies if needed and move on
Yea, just use visible true/false, and add tweeners if you want sliding in/out.
Camera device able to acces on Apple devices,
Out that, people might need some media library
Current pr now has native dialog
The next great things prolly something really important for native interactions
Someone give us ui-node-only export templates already
also, 2d-only export templates along with that too
I wonder what the executable file size turns out to be!?
So I'm looking into making tiny apps with dialogs and Progress bars. PySide is awesome but humongous...
Around 70 mb. The app that I'm exporting is 68 mb (plus the PCK file). I don't know how big python executables are, but I do know Godot consumes a lot of memory (250k+ mb) and takes a lot longer to load up. For small apps I wouldn't recommend it. The only reason I'm using Godot is that Godot comes with CodeEdit nodes, which will make it easy for me to add code editing with syntax highlighting to my program.
I tried a lot of UI stuff over time. For smaller stuff I'd go with python, or something else. It's much easier to write programs using just plain code. There's PySimpleGui (version 4, which is FOSS), PyImgui, PySide, etc.
PySimpleGui is fairly nice to work with (uses Tkinter, Qt or Wx as backend of your choice). Apps will be native-looking-ish. I've never used PySide, but iirc you can make prettier UIs with it. If that's important, then stick with it (but yea, Qt is complex, so...). Tkinter can do that too, but it has an abysmal API, so I personally wouldn't recommend it except for the simplest apps.
But my ultimate preference goes to any immediate mode UIs. It's a whole lot simpler to work with, and you write a lot less code. PyImgui is great. It's getting outdated and does some things different from the C++ version (which makes it harder to learn it), but it's still quite good. A word of advice though, if you ever use it: avoid using the "with" keyword with it, because it screws up error messages.
My best experience with Dear Imgui, though, has been with the Odin language. It's up to date, and Odin is a great language. Dear Imgui may not make your UI as pretty as PySide, but you can still change the theme and get something pleasing. The theme is small and easy to tinker with.
As a somewhat unexpected alternative, there's also Haxe, with HaxeUI, which I have to admit is a remarkably good UI framework. The only problem with Haxe, imo, is that compilation times for native are abysmal... And that it's a Java derivative, which means it has an overengineered code structure.
For crossplatform development game engine are really viable as you can build for any OS from single codebase specially light Engine like godot
But since they are not specifically made for app dev some feature what we get by default from these framework might not be available but i think godot should focus in this area too it can become a viable crossplatform app dev tool
Coded business logic in C++. That's the main con.
Yup. I’ve used Godot as the front end for python scripts at work. It’s a lot nicer to work with for visualization than TK.
For some reason I got an unreal engine ad...
Im making android apps myself. Im making an app launcher currently
Also, the lack of a normal ListView-like table in wpf is annoying. You have to do it yourself
Giving too much freedom in a game engine can be dangerous. If the engine allows for creating software with direct system access, it could lead to the creation of malicious tools. A game engine should focus exclusively on game development and, possibly, the production of videos or movies if desired. However, a game should never interact outside its project folder, except for saving and loading related files, such as .sav files.
The game engine must have fast low-level api access to the system. GPU, HDD/SDD, network, IO devices, etc.
@@Cheetaqueue I’m talking about the user who will use the engine: they don’t need to write files outside the project or execute system commands.
@@hbibliait's open source, a malicious user will always have access.
I hard disagree that its godot job to handicap the user.
People who want to create mallard will find tools to do so.
Perfect timing! I just started making an application today that is not a game.
🦁Como programador siempre es bienvenido ver nuevos avances!🦁
I think the biggest flaw with Godot's UI system is easily the stupid complexity of the theming system. It's actually quite hard to learn and understand it beyond the node overrides and it drove me nuts.
I think you won’t think so after you have used Unity’s 3 UI systems.
@@NoctorOnwood UI Toolkit is by far the best UI system for a game engine so far (Besides Panorama for Source 2)
@@thatanimeweirdo In the time I used Unity, at least there were still a lot of things it couldn't do, and I had to use two other UI systems.
I've made a voting system for my project in school using godot. I passed it
He forgot to add security in cons
some of software that I use made with Godot 🎉🎉
Electron apps are for web devs wanting to make apps, and now we have godot for game devs, go figure! Electron is still a good option given you get access to a more "complete" language and a super hardacore ultra battle tested UI framework. Really though, it matters what you are comfortable with and how your brain works
I hope more folks reach for tauri+solid as a web container. But Godot would be cool too!
Did the Godot Fiasco end?
literally everyone forgot
@@poleve5409 I hope not, these things are only a symptom of something larger.
There is already a fork of Godot because of this.
@@lorenzozapaton4031 redot turned out to be a scam, lol
What fiasco? You mean when all the dorks got mad on Twitter and a bunch of low rate nothing youtubers tried to capitalize on it? That lasted a few days. Redot turned out to be a scam, too
@@GoblinArmyInYourWalls the dorks with the forks. They *were* the fiasco.
Yea,advance ui u need implement urself.