aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/clipped_surface.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-06-17 09:16:28 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-06-18 14:01:28 +0300
commit1dae45c58d7eabeda21ef490d712915890bf6cff (patch)
tree62c473ab1662a1161ed522517ea57b7bd8db340c /src/render_helpers/clipped_surface.rs
parent997119c44338ad96a40b4a1d6e958f77062a37ef (diff)
downloadniri-1dae45c58d7eabeda21ef490d712915890bf6cff.tar.gz
niri-1dae45c58d7eabeda21ef490d712915890bf6cff.tar.bz2
niri-1dae45c58d7eabeda21ef490d712915890bf6cff.zip
Refactor layout to fractional-logical
Lets borders, gaps, and everything else stay pixel-perfect even with fractional scale. Allows setting fractional border widths, gaps, struts. See the new wiki .md for more details.
Diffstat (limited to 'src/render_helpers/clipped_surface.rs')
-rw-r--r--src/render_helpers/clipped_surface.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/render_helpers/clipped_surface.rs b/src/render_helpers/clipped_surface.rs
index 7d52e410..8e5259ed 100644
--- a/src/render_helpers/clipped_surface.rs
+++ b/src/render_helpers/clipped_surface.rs
@@ -18,7 +18,7 @@ pub struct ClippedSurfaceRenderElement<R: NiriRenderer> {
inner: WaylandSurfaceRenderElement<R>,
program: GlesTexProgram,
corner_radius: CornerRadius,
- geometry: Rectangle<i32, Logical>,
+ geometry: Rectangle<f64, Logical>,
input_to_geo: Mat3,
}
@@ -32,7 +32,7 @@ impl<R: NiriRenderer> ClippedSurfaceRenderElement<R> {
pub fn new(
elem: WaylandSurfaceRenderElement<R>,
scale: Scale<f64>,
- geometry: Rectangle<i32, Logical>,
+ geometry: Rectangle<f64, Logical>,
program: GlesTexProgram,
corner_radius: CornerRadius,
) -> Self {
@@ -86,7 +86,7 @@ impl<R: NiriRenderer> ClippedSurfaceRenderElement<R> {
pub fn will_clip(
elem: &WaylandSurfaceRenderElement<R>,
scale: Scale<f64>,
- geometry: Rectangle<i32, Logical>,
+ geometry: Rectangle<f64, Logical>,
corner_radius: CornerRadius,
) -> bool {
let elem_geo = elem.geometry(scale);
@@ -95,10 +95,10 @@ impl<R: NiriRenderer> ClippedSurfaceRenderElement<R> {
if corner_radius == CornerRadius::default() {
!geo.contains_rect(elem_geo)
} else {
- let corners = Self::rounded_corners(geometry.to_f64(), corner_radius);
+ let corners = Self::rounded_corners(geometry, corner_radius);
let corners = corners
.into_iter()
- .map(|rect| rect.to_physical_precise_round(scale));
+ .map(|rect| rect.to_physical_precise_up(scale));
let geo = Rectangle::subtract_rects_many([geo], corners);
!Rectangle::subtract_rects_many([elem_geo], geo).is_empty()
}
@@ -186,11 +186,11 @@ impl<R: NiriRenderer> Element for ClippedSurfaceRenderElement<R> {
if self.corner_radius == CornerRadius::default() {
regions.collect()
} else {
- let corners = Self::rounded_corners(self.geometry.to_f64(), self.corner_radius);
+ let corners = Self::rounded_corners(self.geometry, self.corner_radius);
let elem_loc = self.geometry(scale).loc;
let corners = corners.into_iter().map(|rect| {
- let mut rect = rect.to_physical_precise_round(scale);
+ let mut rect = rect.to_physical_precise_up(scale);
rect.loc -= elem_loc;
rect
});
@@ -278,7 +278,7 @@ impl<'render> RenderElement<TtyRenderer<'render>>
}
impl RoundedCornerDamage {
- pub fn set_size(&mut self, size: Size<i32, Logical>) {
+ pub fn set_size(&mut self, size: Size<f64, Logical>) {
self.damage.set_size(size);
}