a11y/zoom: zoom level per output

This commit is contained in:
Victoria Brekenfeld 2025-03-25 17:31:48 +01:00 committed by Victoria Brekenfeld
parent babb96ddfa
commit 0ba0a0cdaa
11 changed files with 154 additions and 117 deletions

View file

@ -1,8 +1,12 @@
use std::sync::Mutex;
use smithay::{
output::Output,
utils::{Coordinate, Logical, Point, Rectangle, Size},
};
use crate::shell::zoom::OutputZoomState;
use super::prelude::OutputExt;
/// Marker type for coordinates in global space
@ -20,7 +24,7 @@ pub trait PointExt<C: Coordinate> {
pub trait PointGlobalExt<C: Coordinate> {
fn to_local(self, output: &Output) -> Point<C, Local>;
fn to_zoomed(self, output: &Output, level: f64) -> Point<C, Local>;
fn to_zoomed(self, output: &Output) -> Point<C, Local>;
fn as_logical(self) -> Point<C, Logical>;
}
@ -66,8 +70,15 @@ impl<C: Coordinate> PointGlobalExt<C> for Point<C, Global> {
(C::from_f64(point.x), C::from_f64(point.y)).into()
}
fn to_zoomed(self, output: &Output, level: f64) -> Point<C, Local> {
let zoomed_output_geometry = output.zoomed_geometry(level).unwrap();
fn to_zoomed(self, output: &Output) -> Point<C, Local> {
let zoomed_output_geometry = output.zoomed_geometry().unwrap();
let level = output
.user_data()
.get::<Mutex<OutputZoomState>>()
.unwrap()
.lock()
.unwrap()
.current_level();
let point = (self.to_f64() - zoomed_output_geometry.loc.to_f64())
.upscale(level)
.as_logical();

View file

@ -23,7 +23,7 @@ use std::{
pub trait OutputExt {
fn geometry(&self) -> Rectangle<i32, Global>;
fn zoomed_geometry(&self, level: f64) -> Option<Rectangle<i32, Global>>;
fn zoomed_geometry(&self) -> Option<Rectangle<i32, Global>>;
fn adaptive_sync(&self) -> AdaptiveSync;
fn set_adaptive_sync(&self, vrr: AdaptiveSync);
@ -57,7 +57,7 @@ impl OutputExt for Output {
.as_global()
}
fn zoomed_geometry(&self, level: f64) -> Option<Rectangle<i32, Global>> {
fn zoomed_geometry(&self) -> Option<Rectangle<i32, Global>> {
let output_geometry = self.geometry();
let output_state = self.user_data().get::<Mutex<OutputZoomState>>()?;
@ -66,7 +66,7 @@ impl OutputExt for Output {
let focal_point = output_state_ref.current_focal_point().to_global(self);
let mut zoomed_output_geo = output_geometry.to_f64();
zoomed_output_geo.loc -= focal_point;
zoomed_output_geo = zoomed_output_geo.downscale(level);
zoomed_output_geo = zoomed_output_geo.downscale(output_state_ref.current_level());
zoomed_output_geo.loc += focal_point;
Some(zoomed_output_geo.to_i32_round())