1use gpui::{Length, Rems, Window, rems};
2
3/// The base size of a rem, in pixels.
4pub const BASE_REM_SIZE_IN_PX: f32 = 16.;
5
6/// Returns a rem value derived from the provided pixel value and the base rem size (16px).
7///
8/// This can be used to compute rem values relative to pixel sizes, without
9/// needing to hard-code the rem value.
10///
11/// For instance, instead of writing `rems(0.875)` you can write `rems_from_px(14.)`
12#[inline(always)]
13pub fn rems_from_px(px: f32) -> Rems {
14 rems(px / BASE_REM_SIZE_IN_PX)
15}
16
17/// Returns a [`Length`] corresponding to the specified percentage of the viewport's width.
18///
19/// `percent` should be a value between `0.0` and `1.0`.
20pub fn vw(percent: f32, window: &mut Window) -> Length {
21 Length::from(window.viewport_size().width * percent)
22}
23
24/// Returns a [`Length`] corresponding to the specified percentage of the viewport's height.
25///
26/// `percent` should be a value between `0.0` and `1.0`.
27pub fn vh(percent: f32, window: &mut Window) -> Length {
28 Length::from(window.viewport_size().height * percent)
29}