mirror of
https://codeberg.org/waydeer/layer-shika.git
synced 2025-11-17 23:14:23 +00:00
88 lines
2.4 KiB
Rust
88 lines
2.4 KiB
Rust
use crate::dimensions::{LogicalSize, PhysicalSize, ScaleFactor};
|
|
use crate::errors::Result;
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub struct SurfaceDimensions {
|
|
logical: LogicalSize,
|
|
physical: PhysicalSize,
|
|
scale_factor: ScaleFactor,
|
|
}
|
|
|
|
impl SurfaceDimensions {
|
|
#[allow(clippy::cast_precision_loss)]
|
|
pub fn calculate(logical_width: u32, logical_height: u32, scale_factor: f32) -> Result<Self> {
|
|
let logical = LogicalSize::new(logical_width as f32, logical_height as f32)?;
|
|
let scale = ScaleFactor::new(scale_factor)?;
|
|
let physical = scale.to_physical(logical);
|
|
|
|
Ok(Self {
|
|
logical,
|
|
physical,
|
|
scale_factor: scale,
|
|
})
|
|
}
|
|
|
|
pub fn from_logical(logical: LogicalSize, scale_factor: ScaleFactor) -> Self {
|
|
let physical = scale_factor.to_physical(logical);
|
|
Self {
|
|
logical,
|
|
physical,
|
|
scale_factor,
|
|
}
|
|
}
|
|
|
|
pub fn from_physical(physical: PhysicalSize, scale_factor: ScaleFactor) -> Self {
|
|
let logical = scale_factor.to_logical(physical);
|
|
Self {
|
|
logical,
|
|
physical,
|
|
scale_factor,
|
|
}
|
|
}
|
|
|
|
#[must_use]
|
|
pub fn with_scale_factor(mut self, scale_factor: ScaleFactor) -> Self {
|
|
self.scale_factor = scale_factor;
|
|
self.physical = scale_factor.to_physical(self.logical);
|
|
self
|
|
}
|
|
|
|
pub fn update_scale_factor(&mut self, scale_factor: ScaleFactor) {
|
|
self.scale_factor = scale_factor;
|
|
self.physical = scale_factor.to_physical(self.logical);
|
|
}
|
|
|
|
pub const fn logical_size(&self) -> LogicalSize {
|
|
self.logical
|
|
}
|
|
|
|
pub const fn physical_size(&self) -> PhysicalSize {
|
|
self.physical
|
|
}
|
|
|
|
pub const fn scale_factor(&self) -> ScaleFactor {
|
|
self.scale_factor
|
|
}
|
|
|
|
pub fn buffer_scale(&self) -> i32 {
|
|
self.scale_factor.buffer_scale()
|
|
}
|
|
|
|
#[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)]
|
|
pub fn logical_width(&self) -> u32 {
|
|
self.logical.width() as u32
|
|
}
|
|
|
|
#[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)]
|
|
pub fn logical_height(&self) -> u32 {
|
|
self.logical.height() as u32
|
|
}
|
|
|
|
pub fn physical_width(&self) -> u32 {
|
|
self.physical.width()
|
|
}
|
|
|
|
pub fn physical_height(&self) -> u32 {
|
|
self.physical.height()
|
|
}
|
|
}
|