Make Region::desired_rect private
This commit is contained in:
parent
be93d5b0e0
commit
50d759d1b4
3 changed files with 46 additions and 12 deletions
|
@ -247,7 +247,7 @@ impl Painting {
|
||||||
|
|
||||||
// Frame it:
|
// Frame it:
|
||||||
region.add_paint_cmd(PaintCmd::Rect {
|
region.add_paint_cmd(PaintCmd::Rect {
|
||||||
rect: region.desired_rect,
|
rect: region.rect(),
|
||||||
corner_radius: 0.0,
|
corner_radius: 0.0,
|
||||||
fill_color: None,
|
fill_color: None,
|
||||||
outline: Some(Outline::new(1.0, WHITE)),
|
outline: Some(Outline::new(1.0, WHITE)),
|
||||||
|
|
|
@ -6,7 +6,6 @@ use crate::{color::*, containers::*, font::TextFragment, layout::*, widgets::*,
|
||||||
/// with a type of layout (horizontal or vertical).
|
/// with a type of layout (horizontal or vertical).
|
||||||
/// TODO: make Region a trait so we can have type-safe HorizontalRegion etc?
|
/// TODO: make Region a trait so we can have type-safe HorizontalRegion etc?
|
||||||
pub struct Region {
|
pub struct Region {
|
||||||
// TODO: remove pub(crate) from all members.
|
|
||||||
/// How we access input, output and memory
|
/// How we access input, output and memory
|
||||||
ctx: Arc<Context>,
|
ctx: Arc<Context>,
|
||||||
|
|
||||||
|
@ -29,10 +28,10 @@ pub struct Region {
|
||||||
/// Note that the size may be infinite in one or both dimensions.
|
/// Note that the size may be infinite in one or both dimensions.
|
||||||
/// The widgets will TRY to fit within the rect,
|
/// The widgets will TRY to fit within the rect,
|
||||||
/// but may overflow (which you will see in child_bounds).
|
/// but may overflow (which you will see in child_bounds).
|
||||||
pub(crate) desired_rect: Rect, // TODO: rename?
|
desired_rect: Rect, // TODO: rename?
|
||||||
|
|
||||||
/// Bounding box of children.
|
/// Bounding box of children.
|
||||||
/// Initially set to Rect::nothing().
|
// TODO: remove pub(crate)
|
||||||
pub(crate) child_bounds: Rect,
|
pub(crate) child_bounds: Rect,
|
||||||
|
|
||||||
/// Overide default style in this region
|
/// Overide default style in this region
|
||||||
|
@ -145,11 +144,53 @@ impl Region {
|
||||||
self.clip_rect = clip_rect;
|
self.clip_rect = clip_rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/// Screen-space position of this Region.
|
||||||
|
/// This may have moved from its original if a child overflowed to the left or up (rare).
|
||||||
|
pub fn top_left(&self) -> Pos2 {
|
||||||
|
// If a child doesn't fit in desired_rect, we have effectively expanded:
|
||||||
|
self.desired_rect.min.min(self.child_bounds.min)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Screen-space position of the current bottom right corner of this Region.
|
||||||
|
/// This may move when we add children that overflow our desired rectangle bounds.
|
||||||
pub fn bottom_right(&self) -> Pos2 {
|
pub fn bottom_right(&self) -> Pos2 {
|
||||||
// If a child doesn't fit in desired_rect, we have effectively expanded:
|
// If a child doesn't fit in desired_rect, we have effectively expanded:
|
||||||
self.desired_rect.max.max(self.child_bounds.max)
|
self.desired_rect.max.max(self.child_bounds.max)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Position and current size of the region.
|
||||||
|
/// The size is the maximum of the origional (minimum/desired) size and
|
||||||
|
/// the size of the containted children.
|
||||||
|
pub fn rect(&self) -> Rect {
|
||||||
|
Rect::from_min_max(self.top_left(), self.bottom_right())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the width of the region.
|
||||||
|
/// You won't be able to shrink it beyond its current child bounds.
|
||||||
|
pub fn set_width(&mut self, width: f32) {
|
||||||
|
let min_width = self.child_bounds.max.x - self.top_left().x;
|
||||||
|
let width = width.max(min_width);
|
||||||
|
self.desired_rect.max.x = self.top_left().x + width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the height of the region.
|
||||||
|
/// You won't be able to shrink it beyond its current child bounds.
|
||||||
|
pub fn set_height(&mut self, height: f32) {
|
||||||
|
let min_height = self.child_bounds.max.y - self.top_left().y;
|
||||||
|
let height = height.max(min_height);
|
||||||
|
self.desired_rect.max.y = self.top_left().y + height;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Size of content
|
||||||
|
pub fn bounding_size(&self) -> Vec2 {
|
||||||
|
self.child_bounds.max - self.desired_rect.min
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Layout related measures:
|
||||||
|
|
||||||
pub fn available_width(&self) -> f32 {
|
pub fn available_width(&self) -> f32 {
|
||||||
self.available_space().x
|
self.available_space().x
|
||||||
}
|
}
|
||||||
|
@ -167,11 +208,6 @@ impl Region {
|
||||||
self.bottom_right() - self.cursor
|
self.bottom_right() - self.cursor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Size of content
|
|
||||||
pub fn bounding_size(&self) -> Vec2 {
|
|
||||||
self.child_bounds.max - self.desired_rect.min
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn direction(&self) -> Direction {
|
pub fn direction(&self) -> Direction {
|
||||||
self.dir
|
self.dir
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,9 +127,7 @@ impl<'a> Widget for Slider<'a> {
|
||||||
let slider_response = columns[0].add(slider_sans_text);
|
let slider_response = columns[0].add(slider_sans_text);
|
||||||
|
|
||||||
// Place the text in line with the slider on the left:
|
// Place the text in line with the slider on the left:
|
||||||
columns[1]
|
columns[1].set_height(slider_response.rect.height());
|
||||||
.desired_rect
|
|
||||||
.set_height(slider_response.rect.height());
|
|
||||||
columns[1].horizontal(|region| {
|
columns[1].horizontal(|region| {
|
||||||
region.set_align(Align::Center);
|
region.set_align(Align::Center);
|
||||||
region.add(Label::new(full_text).multiline(false));
|
region.add(Label::new(full_text).multiline(false));
|
||||||
|
|
Loading…
Reference in a new issue