contextfree / winrt-rust

Use and (eventually) make Windows Runtime APIs with Rust
Apache License 2.0
142 stars 10 forks source link

UWP UI application in Rust #53

Open DJankauskas opened 6 years ago

DJankauskas commented 6 years ago

Is it possible to create a uwp app with a ui with this library? If so can an example for that use case be added? If not what's preventing this: technical issues or something else?

Boddlnagg commented 6 years ago

It's currently not possible, because creating a UI requires inheritance (you have to define at least your own subclass of Application, if I understand things correctly in https://blog.magnusmontin.net/2017/10/29/minimal-uwp-app/), and inheritance is not yet supported in winrt-rust.

Since I also have never built a UWP UI App in any other language, I lack experience with this, which is why I haven't yet tackled this area in winrt-rust.

Furthermore, I expect that rustc itself also needs some support for generating actual UWP Apps (e.g. for App package manifests), which isn't there yet, or at least has never been tried. Everything I have tested so far is bascially traditional "Win32"-Apps using some UWP APIs (since most UWP APIs outside the Xaml namespace can actually be used from Win32-Apps).

Boddlnagg commented 6 years ago

Quick answer from my side: I don't know (because I've never used inheritance in UWP). Probably it's a rather large effort. Help appreciated!

DJankauskas commented 6 years ago

Could you offer some pointers on understanding how inheritance is implemented in cppwinrt? I've used that library before so I'd be willing to explore how its implementation works.

CarePackage17 commented 6 years ago

Rustc doesn't need to do anything .appx related - packaging is done with separate tooling, though integration with cargo would be nice.

@DJankauskas, inheritance in C++ (and COM, which the Windows Runtime is built on) is implemented with vtables (pointers to virtual functions). There's a lot more going on in cppwinrt under the covers, a lot of plumbing is hidden away from the developer.

That said, I'd also be interested in an effort like this. I think it would be pretty cool to have Rust running on HoloLens.

Boddlnagg commented 5 years ago

Related: https://github.com/rust-lang/rust/pull/60260 (UWP support for Rust)

rpjohnst commented 5 years ago

Also related: https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/xaml-host-controls

You can now (on new enough versions of Windows) use some amount of UWP UI outside of an appcontainer.