diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-03 21:49:47 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-03 21:49:47 +0400 |
| commit | 74996a2416712f6b6e00c4b216627feda3ae518d (patch) | |
| tree | fc7c0271f1aeec99dac8299706d5e298c71adc3b /src | |
| parent | 8ab50f9d1ca5795f4eef84ad423dc0d63d990b98 (diff) | |
| download | niri-74996a2416712f6b6e00c4b216627feda3ae518d.tar.gz niri-74996a2416712f6b6e00c4b216627feda3ae518d.tar.bz2 niri-74996a2416712f6b6e00c4b216627feda3ae518d.zip | |
Make BorderRenderElement scale-agnostic
Diffstat (limited to 'src')
| -rw-r--r-- | src/layout/focus_ring.rs | 2 | ||||
| -rw-r--r-- | src/layout/tile.rs | 1 | ||||
| -rw-r--r-- | src/render_helpers/border.rs | 31 | ||||
| -rw-r--r-- | src/render_helpers/shaders/border.frag | 3 |
4 files changed, 11 insertions, 26 deletions
diff --git a/src/layout/focus_ring.rs b/src/layout/focus_ring.rs index 18b5d5ca..757b2085 100644 --- a/src/layout/focus_ring.rs +++ b/src/layout/focus_ring.rs @@ -201,7 +201,6 @@ impl FocusRing { GradientRelativeTo::WorkspaceView => view_rect, }; border.update( - scale, Rectangle::from_loc_and_size(location, size), gradient_area, gradient.from.into(), @@ -214,7 +213,6 @@ impl FocusRing { Some(border.clone().into()) } else if self.radius != CornerRadius::default() { border.update( - scale, Rectangle::from_loc_and_size(location, size), full_rect, color.into(), diff --git a/src/layout/tile.rs b/src/layout/tile.rs index 99b2bc57..d5237ae7 100644 --- a/src/layout/tile.rs +++ b/src/layout/tile.rs @@ -721,7 +721,6 @@ impl<W: LayoutElement> Tile<W> { // radius. if radius != CornerRadius::default() && has_border_shader { return BorderRenderElement::new( - scale, elem.geometry(Scale::from(1.)).to_logical(1), Rectangle::from_loc_and_size(Point::from((0, 0)), geo.size), elem.color(), diff --git a/src/render_helpers/border.rs b/src/render_helpers/border.rs index b0b373e2..81a9a885 100644 --- a/src/render_helpers/border.rs +++ b/src/render_helpers/border.rs @@ -5,7 +5,7 @@ use niri_config::CornerRadius; use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, UnderlyingStorage}; use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, Uniform}; use smithay::backend::renderer::utils::{CommitCounter, DamageSet}; -use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Transform}; +use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Size, Transform}; use super::renderer::NiriRenderer; use super::shader_element::ShaderRenderElement; @@ -26,7 +26,6 @@ pub struct BorderRenderElement { #[derive(Debug, Clone, Copy, PartialEq)] struct Parameters { - scale: Scale<f64>, area: Rectangle<i32, Logical>, gradient_area: Rectangle<i32, Logical>, color_from: [f32; 4], @@ -40,7 +39,6 @@ struct Parameters { impl BorderRenderElement { #[allow(clippy::too_many_arguments)] pub fn new( - scale: Scale<f64>, area: Rectangle<i32, Logical>, gradient_area: Rectangle<i32, Logical>, color_from: [f32; 4], @@ -54,7 +52,6 @@ impl BorderRenderElement { let mut rv = Self { inner, params: Parameters { - scale, area, gradient_area, color_from, @@ -74,7 +71,6 @@ impl BorderRenderElement { Self { inner, params: Parameters { - scale: Scale::from(1.), area: Default::default(), gradient_area: Default::default(), color_from: Default::default(), @@ -94,7 +90,6 @@ impl BorderRenderElement { #[allow(clippy::too_many_arguments)] pub fn update( &mut self, - scale: Scale<f64>, area: Rectangle<i32, Logical>, gradient_area: Rectangle<i32, Logical>, color_from: [f32; 4], @@ -105,7 +100,6 @@ impl BorderRenderElement { corner_radius: CornerRadius, ) { let params = Parameters { - scale, area, gradient_area, color_from, @@ -125,7 +119,6 @@ impl BorderRenderElement { fn update_inner(&mut self) { let Parameters { - scale, area, gradient_area, color_from, @@ -136,12 +129,12 @@ impl BorderRenderElement { corner_radius, } = self.params; - let grad_offset = (area.loc - gradient_area.loc).to_f64().to_physical(scale); + let grad_offset = geometry.loc - gradient_area.loc; + let grad_offset = Vec2::new(grad_offset.x as f32, grad_offset.y as f32); let grad_dir = Vec2::from_angle(angle); - let grad_area_size = gradient_area.size.to_f64().to_physical(scale); - let (w, h) = (grad_area_size.w as f32, grad_area_size.h as f32); + let (w, h) = (gradient_area.size.w as f32, gradient_area.size.h as f32); let mut grad_area_diag = Vec2::new(w, h); if (grad_dir.x < 0. && 0. <= grad_dir.y) || (0. <= grad_dir.x && grad_dir.y < 0.) { @@ -153,27 +146,23 @@ impl BorderRenderElement { grad_vec = -grad_vec; } - let area_physical = area.to_physical_precise_round(scale); - let area_loc = Vec2::new(area_physical.loc.x, area_physical.loc.y); - let area_size = Vec2::new(area_physical.size.w, area_physical.size.h); + let area_loc = Vec2::new(area.loc.x as f32, area.loc.y as f32); + let area_size = Vec2::new(area.size.w as f32, area.size.h as f32); - let geo = geometry.to_physical_precise_round(scale); - let geo_loc = Vec2::new(geo.loc.x, geo.loc.y); - let geo_size = Vec2::new(geo.size.w, geo.size.h); + let geo_loc = Vec2::new(geometry.loc.x as f32, geometry.loc.y as f32); + let geo_size = Vec2::new(geometry.size.w as f32, geometry.size.h as f32); let input_to_geo = Mat3::from_scale(area_size) * Mat3::from_translation((area_loc - geo_loc) / area_size); - let corner_radius = corner_radius.scaled_by(scale.x as f32); - let border_width = border_width * scale.x as f32; self.inner.update( area, - area.size.to_f64().to_buffer(scale, Transform::Normal), + Size::from((1., 1.)), None, vec