utils: Move NextDown

This commit is contained in:
Victoria Brekenfeld 2025-01-24 18:06:41 +01:00 committed by Victoria Brekenfeld
parent 55d1ce5e3b
commit 61d44b3a9d
3 changed files with 30 additions and 30 deletions

View file

@ -23,7 +23,7 @@ use crate::{
},
SeatExt, Trigger,
},
utils::{prelude::*, quirks::workspace_overview_is_open},
utils::{float::NextDown, prelude::*, quirks::workspace_overview_is_open},
wayland::{
handlers::screencopy::SessionHolder,
protocols::screencopy::{BufferConstraints, CursorSession},
@ -2207,32 +2207,3 @@ fn mapped_output_for_device<'a, D: Device + 'static>(
};
map_to_output.or_else(|| shell.builtin_output())
}
// FIXME: When f64::next_down reaches stable rust, use that instead
trait NextDown {
fn next_lower(self) -> Self;
}
impl NextDown for f64 {
fn next_lower(self) -> Self {
// We must use strictly integer arithmetic to prevent denormals from
// flushing to zero after an arithmetic operation on some platforms.
const NEG_TINY_BITS: u64 = 0x8000_0000_0000_0001; // Smallest (in magnitude) negative f64.
const CLEAR_SIGN_MASK: u64 = 0x7fff_ffff_ffff_ffff;
let bits = self.to_bits();
if self.is_nan() || bits == Self::NEG_INFINITY.to_bits() {
return self;
}
let abs = bits & CLEAR_SIGN_MASK;
let next_bits = if abs == 0 {
NEG_TINY_BITS
} else if bits == abs {
bits - 1
} else {
bits + 1
};
Self::from_bits(next_bits)
}
}