* Modify markup tag interfaces
* Why are nullable structs like this.
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
* Avoid breaking changes
* Replace IMarkupTag with IMarkupTagHandler in engine
* Its a breaking change now I guess
* cleanup
* Makes ItemList not run deselection callback on all list items
even when they weren't selected
* I cannot be expected to do things intelligently at 2a
* Optimize local usage.
* I'm pretty sure the test failure isn't from ItemList
* switch to avoiding doing anything in the `Selected` setter if the value-to-set-to is the same as the current value.
* Add button to jump to live chat when scrolled up
* Expose scroll button class name as a public constant
* Add localisation string to engine
* Make enabling the OutputPanel scroll button opt-in
* Enable scroll button for the debug console
* De-duplicate visibility logic
* Update scroll button visibility when the enabling property is changed
* Start converting SDL2 backend to SDL3.
Game starts, but a lot of stuff is broken. Oh well.
* Fix text input
SDL3 changed the API somewhat, for the better. Changes all over UI/Clyde/SDL3 layer.
* Fix mouse buttons being broken
* Remove records from SDL3 WSI
The fact that this shaved 2-3% off Robust.Client.dll is mindboggling. Records are so bad.
* Set Windows/X11 native window properties
* Fix window resize events getting wrong size
oops
* Remove "using static" from SDL3 WSI
Seriously seems to hurt IDE performance, oh well.
* Apparently I never called CheckThreadApartment().
* Add STAThreadAttribute to sandbox
Necessary for content start
* Set window title on creation properly.
* Load window icons
* Fix GLFW NoTitleBar style handling
Yeah this PR is supposed to be about SDL3, so what?
* Implement more window creation settings in SDL3
Mostly the ones that need a lot of platform-specific stuff to work.
* Make fullscreen work properly in SDL3.
* File dialogs with SDL3
Removes need for swnfd.
* Fix some TODOs
* Fix WebView build
* OSWindow rework
OSWindow now created ClydeWindow and WindowRoot immediately, but non-visible in the background
Also added the ability to programatically resize an open window
* Implement window resizing on SDL2
* Revert OSWindow changes
* Split `Show()` into `Create()` and `Show()`
* Formatting
* Controls in RichText fixes
* useless
* Get FormattedMessage from RichTextLabel
* dont go through nodes
* Comments and minor changes
---------
Co-authored-by: ElectroJr <leonsfriedrich@gmail.com>
* Add style box override properties to ContainerButton and TabContainer
* Add background panel to TabContainer, and add text color overrides
* Undo background panel
You can achieve the same by instead putting the TabContainer in a PanelContainer
* Add BackgroundColor property to StyleBoxTexture
* Remove BackgroundColor from StyleBoxTexture
* Add VisibilityChanged virtual to Control
* Defer updating invisible OutputPanels on UIScale change
DebugConsole falls under this when not hidden, and it significantly improves perf of e.g. resizing the window when there's a lot of stuff in there.
* Avoid redundant UI Scale updates on window resize.
Window resizing can change the UI scale, due to the auto-scaling system. This system had multiple perf issues:
UI scale was set and propagated even if it didn't change (system disabled, not effective, etc). This was just wasted processing.
UI scale was updated for every window resize event. When the game is lagging (due to the aforementioned UI scale updates being expensive...) this means multiple window resize events in a single frame ALL cause a UI scale update, which is useless.
UI scale updates from resizing now avoid doing *nothing* and are deferred until later in the frame for natural batching.
* Reduce allocations/memory usage of various rich-text related things
Just allocate a buncha dictionaries what could possibly go wrong.
I kept to non-breaking-changes which means this couldn't as effective as it should be.
There's some truly repulsive stuff here. Ugh.
* Cap debug console content size.
It's a CVar.
OutputPanel has been switched to use a new RingBufferList datastructure to make removal of the oldest entry efficient.
---------
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
The first measure would include scroll bar size even if the available size fit all the contents. This would make the returned size larger than it should be.
Fixed being able to position the cursor vertically if placeholder text was visible and multi-line. This is because the code was using line break info for the place holder. On top of not being correct behavior, this caused further exceptions since the cursor would get outside the editable text rope.
Fixed index exception if you try to move left in an empty text edit.
Has regression tests.
Fixes#4957, fixes#4953
- If scroll is not visible we don't handle it. This means nested containers don't interfere with their parents anymore.
- Fallback to Y-scrolling for H-scroll only containers.