It works well now, but could be so much better
I’ve been working on KDE for just over 7 months. I’ve done a little bit of screen reader testing, made some minor adjustments to NeoChat’s layout to make it easier to use when zoomed in, and made it so I can proof-read these articles in Kate by highlighting text and having it read aloud. It’s something - but I’d like to do something better.
I don’t use screen readers on desktop.
I want to set the record straight - I am not a desktop screen reader user. This is because, although not very well, I can still see my screen. With glasses, a giant monitor, and obscene amounts of zoom, …and a dark theme, …and the right font, I can read text just fine. Screen readers also don’t just read the screen for you, they fundamentally change the way you navigate through a computer. I also have to get by without them when some app, site or video game, inevitably forgets to support them.
This doesn’t mean I’m unfamiliar with them. I use TalkBack on my phone, and I do at least understand what an accessibility tree is. I can see well enough to tell you when yours is broken. I just prefer to rely on different tools when using my computer.
What zoom in Plasma does well
I think there are three things Plasma’s zoom feature does really well.
Huge zoom limit
(Up until Plasma 6.1, there wasn’t one)
I grew up on Windows. The first version of Windows to have a fullscreen magnifier like in Plasma was Windows 7. The people at Microsoft likely realized “we need to implement a zoom limit otherwise things could break,” and so they ultimately added one to Magnifier. The only problem is that they also said “No one could possibly ever need to zoom in beyond 16x their normal resolution.” Well, Microsoft developers, I’m sorry to tell you that you were wrong and should seriously consider increasing that limit. KDE’s limit is 100x - and I’m usually zoomed in to 80x. Anything higher than 100x on a 4K screen is just about useless even if you can read it (because you won’t be able to fit a word on-screen, trust me), but I definitely need more than 16x zoom to use my computer. Plasma lets me do that.
Performance
When I zoom into my desktop, I don’t have to wait for a program or service to launch. This means I can assign a shortcut to “zoom in,” and pressing that shortcut immediately zooms me in.
Furthermore, even if I’m stressing out my GPU, zoom movement in Plasma stays buttery smooth. Your mileage may vary based on your hardware’s own capabilities, but that’s not what this is about. The point is - on my system - I generally don’t need to choose between entertainment and accessibility, I can have both.
Contrast this to some of the screen magnifiers I’ve used in my past, that consume so many resources that they make me feel motion sick when panning around (Compiz), or that take so long to boot up that they warrant an entire splash screen (ZoomText 10). I’m sorry, but if my “zoom in” shortcut takes more than a single instant to open the screen magnifier in the first place, it’s a bad screen magnifier. Since zoom is built into the KWin compositor, I don’t need to wait for some other program to load.
Customization
Don’t like focus tracking? You can turn it off.
Want to keep the mouse in the center of the screen at all times? Set Mouse Tracking to Center.
Find the pixel grid useful, but don’t want it to show up until exactly 98.75% zoom? You can do that.
I’d be willing to argue that, when writing assistive technology, the absolute best thing you can do is make it as customizable, and as easy to customize, as possible. Each user has unique needs and preferences, and you can’t possibly account for everyone. If you try to pick sane defaults that most everybody will be okay with, then you’re forgetting about the needs of other users. A good example of this would be a screen reader that only reads at a rate of 600 words per minute. Slow down, chief! Not everyone has that level of practice listening to robot voices read the word “button” over and over again.
Plasma doesn’t make assumptions of what I do/don’t need as a blind user, it just gives me the ability to customize zoom to my needs.
Where it could be better
The zoom feature isn’t perfect, here’s why.
Text
Ever zoomed into a JPEG and noticed “wow, that looks blurry” or “whoa, I can see the pixels?” Welcome to screen magnifiers on Linux. I’m sorry, but none of us - not even KDE Plasma - do the actual *zoom part properly. No matter what environment you use, if you zoom into text, it will be blurry or pixelated. This is because all magnifiers I’m aware of, on Linux, effectively just screenshot your desktop and zoom into that screenshot.
There are two ways to deal with this problem. You could just accept the problem, and try to use a better image upscaling technique. Or, you could try to take advantage of Wayland and try to inform applications that “you are being zoomed into, please draw everything larger.” Each technique has its own set of problems.
If you try to tell apps to render at a larger scale: Some apps will listen and it’ll work fine. Some apps won’t listen, and you’ll need to deal with that. Some games might try to listen, but suddenly the game world is being rendered at 100 times the user’s resolution; their graphics card is now molten.
If you try other upscaling techniques: You’re still upscaling. Text will still look weird, no matter what you do, because you’re upscaling.
I don’t think telling each app to render at a higher scale is the answer, because that relies on getting everyone to listen to screen magnifiers. Nonetheless, I’m tired of headaches and ibuprofen tablets; this blurry text problem needs to be solved by someone somehow some time in the future. I’ve tried.
Gaming
Did you know, blind people enjoy being entertained too? I love Grand Theft Auto. Who cares if I knock over every streetlight in the city, cause 17 car accidents and kill 30 people in the process of driving two city blocks? It’s fun, and I want to play it.
However, you naughty game developers and your custom input handling code… you keep trying to kidnap my mouse cursor. Many games, particularly those with a 3D camera, will take control of the mouse and lock your cursor in the middle of the screen. If you do this, you’re breaking assistive technology. Screen magnifiers, at least on desktop, use the mouse as a way to pan around the screen. If you break that, then I can no longer read your game’s menus or tutorials. Therefore, by breaking screen magnifiers, you’ve made it much more difficult (and, frankly, depressing) to play your game.
I’ll concede that you need control of the mouse when controlling the game camera. However, that’s only the case when controlling the game camera. If the game is paused, let me pan around it. If I’m using a controller instead of mouse and keyboard, then let me pan around the game’s HUD with my mouse. What am I saying? Most devs won’t listen to that. And that says nothing for the decades of older games that have already been released. Perhaps, the real solution here, is allowing the zoom area to be controlled without the mouse cursor. Perhaps…a certain KDE accessibility engineer whose name rhymes with “ritchie” because his name is “ritchie,” should fix this problem with global shortcuts?
Plasma Mobile, and Steam Decks
Or, honestly, just… touch screens.
I’ll keep this section brief: I want to ditch Android because I dislike the direction Google is going with it. I still need to be able to zoom into my phone. I also can’t actually use my Steam Deck, not even for long enough to update the software on it and try out whatever cool new accessibility stuff Valve added to it, because I can’t read the screen. It would be nice to at least be able to zoom into Desktop Mode (which is just Plasma), with my fingers.
Multiple Monitors
You know what would be really cool, if one can figure out the awkward control issues?
Being able to watch YouTube on one screen, and zoom into code on another screen, without zooming into YouTube.
Compiz lets you do this, but the controls are incredibly awkward. It’s hard to describe why I find them awkward, but the reason is you can only switch between displays by moving your cursor between displays. If both displays are zoomed in, or you can’t see where the cursor is, that’s going to be a problem.
I’m slowly working on it
I’m not just writing this article as a wishlist of things I wish we did better in zoom. These are actually goals, things I’d like to actually get working.
I’m currently working on generally improving the zoom effect. This merge request changes how the zoom area is calculated when using Push mouse tracking, making the mouse cursor harder to lose when zooming around.
I’m passionate about the zoom effect, enjoy working on it, and would love to see it set the standard for what modern screen magnifiers are capable of. Sound like a plan?