commit
f7ce3281b6
@ -0,0 +1,90 @@
|
|||||||
|
# Accessibility Protocol for Wayland (a11y)
|
||||||
|
|
||||||
|
This will bring Linux up to par with major operating systems like MacOS and Windows.
|
||||||
|
Implementation is entirely unknown.
|
||||||
|
But this is what I'd like to see:
|
||||||
|
|
||||||
|
Note that this is a DRAFT, and implementation details, simplicity, knowledge of what belongs in its own standard, etc. are not known at this time.
|
||||||
|
This is more ideas than anything concrete.
|
||||||
|
|
||||||
|
## Calls
|
||||||
|
|
||||||
|
### notify
|
||||||
|
|
||||||
|
There are a few ideas here about being able to use accessibility notifiers like flashing or sending a pulse out from a cursor (as done by Cinnamon) and displaying the currently selected text larger and above the current window.
|
||||||
|
|
||||||
|
### filter
|
||||||
|
|
||||||
|
```c
|
||||||
|
bool filter(FILTER_MODE,
|
||||||
|
surface_id|rect,
|
||||||
|
[options ...]
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
`FILTER_MODE` options:
|
||||||
|
|
||||||
|
* `Greyscale`
|
||||||
|
* Any color where all RGB values are equal.
|
||||||
|
* `BlackAndWhite`
|
||||||
|
* Either #FFFFFF or #000000
|
||||||
|
* `Invert`
|
||||||
|
* Invert RGB values.
|
||||||
|
* `Kernel (-1 to 1, ...x9)`
|
||||||
|
* For example, blur, edge detection, etc.
|
||||||
|
* `Rgb (-255 to 255, ...x3)`
|
||||||
|
* For color-blindness filters. Change color by a fixed amount per RGB value.
|
||||||
|
|
||||||
|
Many of these filters may be stacked.
|
||||||
|
For example, inverted + yellow color-blindness filter.
|
||||||
|
This also allows filtering per a rect or surface (window) individually, not just the entire screen.
|
||||||
|
|
||||||
|
### crop
|
||||||
|
|
||||||
|
```c
|
||||||
|
bool crop(surface_id|rect, X, Y, W, H);
|
||||||
|
```
|
||||||
|
|
||||||
|
This will show only the content within the bounds scaled to the proper size.
|
||||||
|
To avoid the font-stair-stepping problem, users who use this feature may want to turn on HiDPI rendering at the same time (i.e., over-scaling).
|
||||||
|
The reason users on MacOS do not have this problem is because Apple products have such a high pixel density.
|
||||||
|
On older devices with larger screens, you may still notice the stair-stepping problem.
|
||||||
|
Since new devices have such high PPI, it only makes sense that this is somewhat avoided.
|
||||||
|
|
||||||
|
Some other options might be interesting, for example being able to crop relative to a window and also relative to the entire screen if needed.
|
||||||
|
|
||||||
|
### input
|
||||||
|
|
||||||
|
Assistive technology often requires exclusive use of the keyboard, mouse, or other peripherals.
|
||||||
|
This section will need to implement a few protocols to allow assistive technology to take advantage of hardware.
|
||||||
|
|
||||||
|
#### new_keybind
|
||||||
|
|
||||||
|
```rust
|
||||||
|
/* this will send an event to the client when the requested key combo has been typed */
|
||||||
|
bool new_keybind(
|
||||||
|
passthrough: bool, /* does the key binding continue down the stack or get consumed */
|
||||||
|
after: bool, /* activate when key is released */
|
||||||
|
keys: Vec<Key>, /* list of keys that must be pressed in this order to be triggered */
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
```rust
|
||||||
|
/* request control of input devices directly.
|
||||||
|
This should provide a keyboard, mouse, etc. with direct control from an application.
|
||||||
|
All key presses, releases, mouse clicks, etc. will need to be initiated from the requesting application from now on.
|
||||||
|
*/
|
||||||
|
bool exclusive_key_daemon(
|
||||||
|
seat: seat_id, /* input seat */
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
```rust
|
||||||
|
/* send key info from exclusive control process */
|
||||||
|
bool send_input_event(
|
||||||
|
seat: seat_id,
|
||||||
|
event_type: click|double_click|etc.
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue