* Fix incorrect saved window positions
As of however many UI PRs ago windows store their last position on the client and it re-opens windows at that position.
The issue is that the code to avoid windows being able to go off-screen was immediately bulldozing this value, at least if the x <= 0. Now we just don't run it until we have a valid measure (probably the frame after) and avoid unnecessarily having an incorrect position applied.
* Explainer
File dialog requests can now specify the share and access mode they want out of the opened file. This means read-only access is now possible.
While doing this I noticed that the SDL3 backend had a memory leak *and* didn't match the behavior of the other backends. Cleaned up the code to avoid that.
In-engine commands that *can* specify read-only access on file open now do.
* Stopped recursive updates for controls that are not visible, as it violates framerate in large menus.
* Update Robust.Client/UserInterface/Control.cs
---------
Co-authored-by: Cam <Nop>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
* 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.
* Initial commit
* Add tile rotation/mirror perms
* Nicer UI for the rotation
* Review fixes (also seemed to have missed applying the serialization reading oops)
* One less byte, one less struct size!
* Pretty sure it goes here too
* Fix error
This allows us to make it obsolete to *inherit* from a class, and only that.
Intended so people stop inheriting UI controls for no good reason.
Fixes#5856
* 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
Data definitions created individual read/write methods for every single field that can be serialized. This was extremely inefficient and likely caused lots of overhead.
These methods are necessary because, in some cases, we can't directly use expression trees to write fields. But... we can still do it most of the time! So now for most data fields we can avoid a DynamicMethod entirely.
* 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
* Add Erase button for TileSpawnWindow
Small QoL for mappers. Basically, it just selects space tile on "Erase" button toggled.
* Remove copy paste. Conevrt this into method