Comments 23
Было бы интересно узнать больше реальных кейсов использования.
Кейсы использования по сути те же, что и у WPF, только кроссплатформенно.
Ну или вот из последнего, мы в субботу в рамках MskDotNet проводили хакатон по написанию гоночных ботов по заранее неразведанной гексокарте, я к нему прокси-визуализатор для отображения поведения бота и видимых им клеток после запросов к серверу на авалонии делал. Писал сидя на линуксе, участники использовали на Windows и OSX. Соответственно на той же кодовой базе был и редактор карт.
Собственно, визуализатор:
Редактор:
Т. е. если надо делать приложение под десктоп и вы знаете WPF — можно брать авалонию. Когда допилим поддержку мобилок, можно будет и мобильные приложения писать а ля Flutter.
1. А насколько можно/удобно использовать для разработки приложений продукты jetbrains?
2. Под win можно ли приложения в трей сворачивать?
А насколько можно/удобно использовать для разработки приложений продукты jetbrains?
Совсем неудобно. Нет превьювера и их XAML-движок не понимает половину наших конструкций. С превьювером мне уже полгода обещают что-то сделать и утверждают, что прогресс есть. По XAML-движку, видимо, придётся нам писать свой плугин
Под win можно ли приложения в трей сворачивать?
Пока только руками через P/Invoke. С треем проблема в том, что он, зараза, в 2019-ом году не кроссплатформенный по своим концепциям. В частности, на OSX/Linux мы не можем показать к иконке своё меню, нужно обязательно использовать системное. А это отдельная проблема, которая будет решаться в рамках поддержки глобальных (эскспортируемых) меню.
Пока только руками через P/Invoke. С треем проблема в том, что он, зараза, в 2019-ом году не кроссплатформенный по своим концепциям.
А разве нельзя что-нибудь типа
.With(new Win32PlatformOptions { minimizeToTray = true });
сделать?
Просто как раз ищу хоть что-нибудь для кроссплатформенных УИ, и так, чтобы не надо было таскать с собой яву или 100500 мегабайт ноды с хромом…
1) резко стало удобнее
2) + еще и в райдере превьювер пилят
> $ ./Tel.Egram ⬡ 10.14.1
Unhandled Exception: System.DllNotFoundException: Unable to load shared library 'tdjson' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libtdjson: cannot open shared object file: No such file or directory
at TdLib.Bindings.LinuxBindings.td_set_log_file_path(IntPtr path)
at TdLib.Client.Log.SetFilePath(String path)
at Tel.Egram.Registry.<>c__DisplayClass1_0.<AddTdLib>b__0() in /home/vsts/work/1/s/src/Tel.Egram/Registry.cs:line 48
at Splat.DependencyResolverMixins.<>c__DisplayClass8_0`1.<RegisterLazySingleton>b__0()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Splat.DependencyResolverMixins.GetService[T](IDependencyResolver This, String contract)
at Tel.Egram.Registry.<>c__DisplayClass1_0.<AddTdLib>b__1() in /home/vsts/work/1/s/src/Tel.Egram/Registry.cs:line 55
at Splat.DependencyResolverMixins.<>c__DisplayClass8_0`1.<RegisterLazySingleton>b__0()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Splat.DependencyResolverMixins.GetService[T](IDependencyResolver This, String contract)
at Tel.Egram.Registry.<>c__DisplayClass1_0.<AddTdLib>b__3() in /home/vsts/work/1/s/src/Tel.Egram/Registry.cs:line 68
at Splat.DependencyResolverMixins.<>c__DisplayClass8_0`1.<RegisterLazySingleton>b__0()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Splat.DependencyResolverMixins.GetService[T](IDependencyResolver This, String contract)
at Tel.Egram.Registry.<>c__DisplayClass3_0.<AddServices>b__13() in /home/vsts/work/1/s/src/Tel.Egram/Registry.cs:line 213
at Splat.DependencyResolverMixins.<>c__DisplayClass8_0`1.<RegisterLazySingleton>b__0()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Splat.DependencyResolverMixins.GetService[T](IDependencyResolver This, String contract)
at Tel.Egram.Model.Application.AuthenticationLogic.BindAuthentication(MainWindowModel model) in /home/vsts/work/1/s/src/Tel.Egram.Model/Application/AuthenticationLogic.cs:line 20
at Tel.Egram.Model.Application.MainWindowModel.<.ctor>b__28_0(CompositeDisposable disposables) in /home/vsts/work/1/s/src/Tel.Egram.Model/Application/MainWindowModel.cs:line 32
at ReactiveUI.ViewForMixins.<>c__DisplayClass3_0.<WhenActivated>b__0() in D:\a\1\s\src\ReactiveUI\Activation\ViewForMixins.cs:line 74
at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
at System.Reactive.Disposables.CompositeDisposable..ctor(IEnumerable`1 disposables) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Disposables\CompositeDisposable.cs:line 67
at ReactiveUI.ViewModelActivator.Activate() in D:\a\1\s\src\ReactiveUI\Activation\ViewModelActivator.cs:line 84
at Tel.Egram.Program.Run(IDependencyResolver resolver) in /home/vsts/work/1/s/src/Tel.Egram/Program.cs:line 71
at Tel.Egram.Program.Main(String[] args) in /home/vsts/work/1/s/src/Tel.Egram/Program.cs:line 18
[1] 4797 abort ./Tel.Egram
Чего-то не хватает для загрузки сишной библиотеки для работы с телеграмом, скорее всего libssl-1.0.0. Натравите ldd на libtdjson.so
Видимо не исправили
2)Документация
Каталог контролов в основном репозитории. Табы слева — https://github.com/AvaloniaUI/Avalonia/blob/master/samples/ControlCatalog/SideBar.xaml
Есть ли возможность встраивать кадры сырого рендера на OpenGL / Vulkan / DX / Metal внутрь окон с контролами? (с пересечением / перекрытием кадра контролами или без)
В версии с nuget.org нормально нельзя, только через WriteableBitmap с копированием в CPU-память и обратно и просадкой FPS.
Чтобы сделать нормально, нужны https://github.com/AvaloniaUI/Avalonia/pull/2364 (подстановка своей реализации контекста OpenGL/Vulkan) и https://github.com/AvaloniaUI/Avalonia/pull/2371 (прямой доступ к SkCanvas с рендер-потока), которые перед релизом не стали мержить. За подробностями, как реализовать, можно попробовать обратиться к MarchingCube, у них кейс "отрисовать в написанном на авалонии игровом редакторе собственно выхлоп их игрового движка".
Ну и надо понимать, что всё веселье с вещами типа ANGLE и MoltenVK ляжет на вас.
Релиз кросс-платформенного .NET UI-тулкита AvaloniaUI 0.8