picoe / Eto

Cross platform GUI framework for desktop and mobile applications in .NET
Other
3.55k stars 323 forks source link

Add WinUI 3 platform #2513

Open cwensley opened 1 year ago

cwensley commented 1 year ago

Windows appears to be moving over to WinUI 3 as the "modern" way to build apps, and touts this as the framework they use to build Windows components. It would be nice to have this as a more modern option than using WinForms or WPF, even though it is likely missing a lot of functionality that will be needed to make a fully rounded out platform in Eto.

ghost commented 1 year ago

i seriously advise against this since winui 3 is very very slow and Microsoft doesn't care about its issues at all, its the sole reason i moved to linux.

nvella commented 1 year ago

WinUI would be a 'nice to have', but in my eyes is not mature enough, nor appropriately provides enterprise/commercial application developers with the ulilitarian controls, visual styling, or flexibility of WinForms and WPF; WinUI suits only certain use-cases, and those don't tend to be thick desktop apps which I've found Eto exceptional for. Personally, I wish MS would take a page out of Apple's book and iterate, not overhaul.

alexvinidiktov commented 3 months ago

Eto.Forms apps with WPF and Windows.Forms backends look very dated. I would love to have WinUI 3 as an additional backend.

Is any work being done on this issue?

If not how would one start implementing WinUI support?

cwensley commented 3 months ago

With WPF you can create a modern theme but it takes a lot of effort.

Creating a WinUI 3 platform is certainly a lot more effort, but in case someone like yourself would want to take that on I've created a bare bones platform that can create a Form with a Label on it here: https://github.com/picoe/Eto/pull/2652

I'll see what I can do to get that merged in soon so I can start accepting pull requests filling out more of its functionality.

alexvinidiktov commented 2 months ago

I'll see what I can do to get that merged in soon so I can start accepting pull requests filling out more of its functionality. That's awesome! I hope it will get merged soon.

cwensley commented 1 month ago

Ok it's merged! I've also added a bare-bones implementation of TableLayoutHandler to get things started a bit quicker.

My plan for WinUI is to utilize the MeasureOverride and ArrangeOverride as much as possible instead of doing what is in WPF where it sets minimum sizes, though perhaps this isn't feasible. Either way, we can start filling out the other controls now and once we get the basics in we can utilize the Eto.Test UI.

ris-work commented 3 weeks ago

I would love to have WinUI 3 support too. I think that this might be the one that could land in browser / WASM support for Eto.forms through platform.uno's support for WASM. Platform.uno implements WASM support for WinUI3 and it is somewhat much faster than the others (Avalonia) as it renders them (AFAIK) as native HTML elements where possible!

Platform.Uno also supports drawing directly to framebuffer too (platforms without a WM or compositor).

alexvinidiktov commented 3 weeks ago

Ok it's merged! I've also added a bare-bones implementation of TableLayoutHandler to get things started a bit quicker.

My plan for WinUI is to utilize the MeasureOverride and ArrangeOverride as much as possible instead of doing what is in WPF where it sets minimum sizes, though perhaps this isn't feasible. Either way, we can start filling out the other controls now and once we get the basics in we can utilize the Eto.Test UI.

Great news!

I see there's another open PR with more controls.

I'll like to help flesh them out. Could you give some guidance?

cwensley commented 2 weeks ago

I see there's another open PR with more controls.

I'll like to help flesh them out. Could you give some guidance?

Thanks for the offer! I'm trying to get at least the minimal test app working so we can work on each of the sections. There's a bunch of work needed on the TableLayout so it works as expected then it can be merged. I have been thinking of implementing part of PR #556 for WinUI instead of implementing all the hacks that were needed for WPF, I'm not sure which one is easier at this point, it's just a matter of getting some time to do it.

After that, anyone could just start picking controls and implementing them.

ris-work commented 2 weeks ago

I think #1936 is relevant here, too.