* Added failing test for #14753.
* Don't try to publish on non-running binding.
This can happen in cases like #14653 where:
1. An event is raised with 2 binding expression subscribers
2. The first subscriber causes the 2nd subscriber to be stopped
3. The second subscriber is called from the event, even though it has been stopped (as the event list was cached at step 1)
4. It calls `PublishValue` causing an exception
Easiest to just do nothing in `PublishValue` when this scenario happens.
* Skip drawing visual content if bounds don't intersect with the current clip and dirty rect clip
* PopOpacityMask should reset the current transform to what it was during PushOpacityMask call before applying the mask
* Buffer pending Push/Transform commands until an actual drawing command gets issued.
That way we can avoid otherwise expensive platform calls for visual subtrees that don't actually produce any render results due to being clipped
---------
Co-authored-by: Max Katz <maxkatz6@outlook.com>
* Add and implement ISingleTopLevelApplicationLifetime (internal API)
* Fix Android initialization order, so we can have AfterSetup with usable TopLevel in the callback
* Fix android and futher simplify its initialization
* Return removed public API, make it all work together, introduce AvaloniaActivity
* Adjust some comments and minor bug fixes
* Add CreateAppBuilder to iOS and Tizen as well for consistency
* Add AfterApplicationSetup private api, so our backends have a safe place to setup avalonia views.
* Keep number of breaking changes minimal
* Don't merge RenderOptions during update and only push them to drawing context if actually needed
* Removed RenderOptions property from IDrawingContextImpl
* MVP SingleProject support for all supported platforms
* Convert MobileSandbox to be a single project
* WASM fixes
* Fix SDK CI version
* Use .NET 8 in build project as well
* Add EnableUnsafeBinaryFormatterSerialization
* Add macos workload, remove wasm-experimental
* And ios
* Specify TFM for single-project projects in dirs.proj
* Return deleted line
* Set PrivateAssets=all on MobileSandbox
* Add ios target only on non-linux in MobileSandbox
* Update after merges
* Update browser sub-project from the templates
* Don't build MobileSandbox on CI
* Couple of improvements
* Add android hack to run without manifest
* Add tvOS support and rearrange some properties
* Delete unusable Packages.targets file + related
* Add global Condition for AvaloniaSingleProject.targets
* Fix stylus input state mapping on iOS
* Fix UIKeyboardHidUsage.KeyboardDeleteOrBackspace mapping on iOS, should be mapped to Backspace
* Release iOS pen pointer on PenUp event, fixing IsPrimary state
* Don't limit scroll gestures to single primary input - user should be able to scroll two different scrolls
* [SKIA] Don't skip setting SKCanvas.TotalMatrix when we aren't sure what the current transform is due to Save/Restore calls
* Refactored overlays, so most of them are usable without an intermediate layer
---------
Co-authored-by: Max Katz <maxkatz6@outlook.com>
If the password text is revealed, the pre-existing word-based selection model remains (the closest word to the pointer position is selected.)
Related to https://github.com/AvaloniaUI/Avalonia/issues/14956
* Don't create a layer if the previous frame is retained by the render target
* D2D
* compile
* Only check PreviousFrameIsRetained if not using layer
* ABI