Add general-purpose functions for sizing in viewport units (#3833)
This PR adds general-purpose functions for obtaining a `Length` in viewport units. Previously in #3600 we had added specific variants of `w` and `h` that took viewport units, but I think it makes more sense to just have a primitive that can compose with any styling method that accepts a `Length` or `Into<Length>`. Release Notes: - N/A
This commit is contained in:
parent
8ba52b839f
commit
0f33775a91
6 changed files with 23 additions and 23 deletions
|
@ -79,12 +79,8 @@ impl OutlineView {
|
||||||
editor: View<Editor>,
|
editor: View<Editor>,
|
||||||
cx: &mut ViewContext<Self>,
|
cx: &mut ViewContext<Self>,
|
||||||
) -> OutlineView {
|
) -> OutlineView {
|
||||||
const MAX_HEIGHT_IN_VH: f32 = 0.75;
|
|
||||||
|
|
||||||
let delegate = OutlineViewDelegate::new(cx.view().downgrade(), outline, editor, cx);
|
let delegate = OutlineViewDelegate::new(cx.view().downgrade(), outline, editor, cx);
|
||||||
let picker = cx.new_view(|cx| {
|
let picker = cx.new_view(|cx| Picker::new(delegate, cx).max_height(vh(0.75, cx)));
|
||||||
Picker::new(delegate, cx).max_height(cx.viewport_size().height * MAX_HEIGHT_IN_VH)
|
|
||||||
});
|
|
||||||
OutlineView { picker }
|
OutlineView { picker }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,16 +13,16 @@ impl Render for ViewportUnitsStory {
|
||||||
.flex_row()
|
.flex_row()
|
||||||
.child(
|
.child(
|
||||||
div()
|
div()
|
||||||
.w_vw(0.5, cx)
|
.w(vw(0.5, cx))
|
||||||
.h_vh(0.8, cx)
|
.h(vh(0.8, cx))
|
||||||
.bg(gpui::red())
|
.bg(gpui::red())
|
||||||
.text_color(gpui::white())
|
.text_color(gpui::white())
|
||||||
.child("50vw, 80vh"),
|
.child("50vw, 80vh"),
|
||||||
)
|
)
|
||||||
.child(
|
.child(
|
||||||
div()
|
div()
|
||||||
.w_vw(0.25, cx)
|
.w(vw(0.25, cx))
|
||||||
.h_vh(0.33, cx)
|
.h(vh(0.33, cx))
|
||||||
.bg(gpui::green())
|
.bg(gpui::green())
|
||||||
.text_color(gpui::white())
|
.text_color(gpui::white())
|
||||||
.child("25vw, 33vh"),
|
.child("25vw, 33vh"),
|
||||||
|
|
|
@ -9,6 +9,7 @@ pub use crate::clickable::*;
|
||||||
pub use crate::disableable::*;
|
pub use crate::disableable::*;
|
||||||
pub use crate::fixed::*;
|
pub use crate::fixed::*;
|
||||||
pub use crate::selectable::*;
|
pub use crate::selectable::*;
|
||||||
|
pub use crate::styles::{vh, vw};
|
||||||
pub use crate::visible_on_hover::*;
|
pub use crate::visible_on_hover::*;
|
||||||
pub use crate::{h_stack, v_stack};
|
pub use crate::{h_stack, v_stack};
|
||||||
pub use crate::{Button, ButtonSize, ButtonStyle, IconButton};
|
pub use crate::{Button, ButtonSize, ButtonStyle, IconButton};
|
||||||
|
|
|
@ -16,20 +16,6 @@ fn elevated<E: Styled>(this: E, cx: &mut WindowContext, index: ElevationIndex) -
|
||||||
|
|
||||||
/// Extends [`Styled`](gpui::Styled) with Zed specific styling methods.
|
/// Extends [`Styled`](gpui::Styled) with Zed specific styling methods.
|
||||||
pub trait StyledExt: Styled + Sized {
|
pub trait StyledExt: Styled + Sized {
|
||||||
/// Sets the width of the element as a percentage of the viewport's width.
|
|
||||||
///
|
|
||||||
/// `percent` should be a value between `0.0` and `1.0`.
|
|
||||||
fn w_vw(self, percent: f32, cx: &mut WindowContext) -> Self {
|
|
||||||
self.w(cx.viewport_size().width * percent)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Sets the height of the element as a percentage of the viewport's height.
|
|
||||||
///
|
|
||||||
/// `percent` should be a value between `0.0` and `1.0`.
|
|
||||||
fn h_vh(self, percent: f32, cx: &mut WindowContext) -> Self {
|
|
||||||
self.h(cx.viewport_size().height * percent)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Horizontally stacks elements.
|
/// Horizontally stacks elements.
|
||||||
///
|
///
|
||||||
/// Sets `flex()`, `flex_row()`, `items_center()`
|
/// Sets `flex()`, `flex_row()`, `items_center()`
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
mod color;
|
mod color;
|
||||||
mod elevation;
|
mod elevation;
|
||||||
mod typography;
|
mod typography;
|
||||||
|
mod units;
|
||||||
|
|
||||||
pub use color::*;
|
pub use color::*;
|
||||||
pub use elevation::*;
|
pub use elevation::*;
|
||||||
pub use typography::*;
|
pub use typography::*;
|
||||||
|
pub use units::*;
|
||||||
|
|
15
crates/ui2/src/styles/units.rs
Normal file
15
crates/ui2/src/styles/units.rs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
use gpui::{Length, WindowContext};
|
||||||
|
|
||||||
|
/// Returns a [`Length`] corresponding to the specified percentage of the viewport's width.
|
||||||
|
///
|
||||||
|
/// `percent` should be a value between `0.0` and `1.0`.
|
||||||
|
pub fn vw(percent: f32, cx: &mut WindowContext) -> Length {
|
||||||
|
Length::from(cx.viewport_size().width * percent)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a [`Length`] corresponding to the specified percentage of the viewport's height.
|
||||||
|
///
|
||||||
|
/// `percent` should be a value between `0.0` and `1.0`.
|
||||||
|
pub fn vh(percent: f32, cx: &mut WindowContext) -> Length {
|
||||||
|
Length::from(cx.viewport_size().height * percent)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue