-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AccessKit needs Rust 1.61 #1844
Comments
This is an argument for making Granted, 1.61 has been out for two months already, so it is not hot off the presses. |
I'm asking to bump the MSRV because, if you're willing, I want to integrate AccessKit into egui, so egui can be properly accessible with existing screen readers and other accessibility tools, as opposed to requiring egui applications to provide their own TTS output. The benefits of this have been discussed on #167. If you don't want to bump egui's MSRV, then I suppose I need to either persuade the windows-rs maintainers to roll back the change that made windows-rs require Rust 1.61 for implementing COM interfaces, or AccessKit will need to be stuck on an old version of windows-rs until you decide to bump the MSRV for egui. |
Ah, yeah for integrating AccessKit into That being said, have you considered making the AccessKit integration an add-on onto |
I'm not comfortable making accessibility an optional feature. Of course, it's necessary to do so when you implement accessibility by doing your own speech output. But when implementing platform accessibility APIs, as AccessKit does, accessibility should be invisible to users who don't need it. Of course, if you find that AccessKit has too great an impact on performance even when no screen reader or other assistive technology is running, then that's something I need to work on. My concern about making accessibility through something like AccessKit optional is that if it's off by default, too many developers won't turn it on, and if it can be turned off, some developers will, in a misguided effort to reduce code size or marginally increase performance by eliminating something they don't care about. My hope is that, by having something like AccessKit always there, all egui-based applications will be at least partially accessible by default. You wrote about egui emitting enough events and providing enough control that AccessKit integration could be done outside of egui proper. I do think that would be unnecessary double work. I'm familiar with your current |
Since you mentioned events, I should also point out that AccessKit is specifically designed to be friendly to immediate-mode GUIs, so it doesn't require you to track state and conditionally emit events when things change. Instead, egui would generate a whole accessibility tree for each frame, just as it generates all the shapes to be rendered. When you push a tree update to AccessKit, whether it's an incremental update or the whole tree, AccessKit will determine what changed and emit the appropriate events. Most of that logic is separate from the platform-specific implementations. So a speech output implementation based on AccessKit could completely replace the speech output support that you have now in egui, meaning you could entirely eliminate |
I agree with your sentiment here, and for
You've convinced me! Replacing
That's awesome! |
just wanted to point out legitimate issues if i cannot disable a feature. for example, i cannot compile eframe with idk what libraries accesskit links with ( if not for that, i am just happy that egui is getting first-class support for accessibility. |
Difficulty compiling and linking with platform-specific C libraries is a valid problem, and one that I'm trying to minimize in AccessKit. (In general, one of my guiding principles for AccessKit is that I should make it as easy as possible to integrate.) So far, AccessKit is only implemented for Windows. @DataTriny has started working on a Linux implementation, but we're both focused on other things right now. The plan for the Linux implementation is to use a pure Rust implementation of both D-Bus and AT-SPI, to avoid the problem of compiling and linking with platform libraries. On Windows, AccessKit uses windows-rs (the source of the whole Rust version problem that prompted this issue), which ships its own Windows SDK import libraries, so anyone who can compile a Rust binary for Windows should be able to compile one with AccessKit without difficulty. (I've even verified that cross-compiling for x86_64-pc-windows-gnu on Linux works.) On Mac, I believe AccessKit will only need to link with common system libraries such as objc, CoreFoundation, Foundation, and AppKit, which are already included with Xcode. |
Off topic, but:
That sucks, seems like we should really fix #1125. But surely
it's pretty easy to figure out:
|
The AccessKit Windows implementation needs Rust 1.61+ so it can use a recent version of windows-rs. I suggest updating egui to require Rust 1.61.
The text was updated successfully, but these errors were encountered: