Remove Ui::cursor() function
This commit is contained in:
parent
7a1c97ccfe
commit
1dff2ad721
8 changed files with 39 additions and 45 deletions
|
@ -115,7 +115,7 @@ impl Area {
|
|||
Rect::from_min_size(state.pos, Vec2::infinity()),
|
||||
);
|
||||
add_contents(&mut ui);
|
||||
state.size = ui.bounding_size().ceil();
|
||||
state.size = (ui.child_bounds().max - state.pos).ceil();
|
||||
|
||||
let rect = Rect::from_min_size(state.pos, state.size);
|
||||
let clip_rect = Rect::everything(); // TODO: get from context
|
||||
|
|
|
@ -56,16 +56,14 @@ impl CollapsingHeader {
|
|||
|
||||
// TODO: horizontal layout, with icon and text as labels. Insert background behind using Frame.
|
||||
|
||||
let title = &label.text; // TODO: not this
|
||||
let title = label.text();
|
||||
let id = ui.make_unique_id(title);
|
||||
let text_pos = ui.cursor() + vec2(ui.style().indent, 0.0);
|
||||
let (title, text_size) = label.layout(text_pos, ui);
|
||||
|
||||
let available = ui.available_finite();
|
||||
let text_pos = available.min + vec2(ui.style().indent, 0.0);
|
||||
let (text, text_size) = label.layout(available.width() - ui.style().indent, ui);
|
||||
let text_max_x = text_pos.x + text_size.x;
|
||||
let desired_width = ui
|
||||
.available_finite()
|
||||
.size()
|
||||
.x
|
||||
.max(text_max_x - ui.cursor().x);
|
||||
let desired_width = available.width().max(text_max_x - available.left());
|
||||
|
||||
let interact = ui.reserve_space(
|
||||
vec2(
|
||||
|
@ -96,7 +94,7 @@ impl CollapsingHeader {
|
|||
ui.add_text(
|
||||
text_pos,
|
||||
label.text_style,
|
||||
title,
|
||||
text,
|
||||
Some(ui.style().interact(&interact).stroke_color),
|
||||
);
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ impl Default for BarState {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn bar(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui)) {
|
||||
pub fn bar(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui)) -> InteractInfo {
|
||||
ui.horizontal(|ui| {
|
||||
Frame::default().show(ui, |ui| {
|
||||
let mut style = ui.style().clone();
|
||||
|
|
|
@ -159,7 +159,7 @@ impl Resize {
|
|||
state.size = state.size.clamp(self.min_size..=self.max_size);
|
||||
let last_frame_size = state.size;
|
||||
|
||||
let position = ui.cursor();
|
||||
let position = ui.available().min;
|
||||
|
||||
let corner_interact = if self.resizable {
|
||||
// Resize-corner:
|
||||
|
@ -189,7 +189,7 @@ impl Resize {
|
|||
|
||||
// ------------------------------
|
||||
|
||||
let inner_rect = Rect::from_min_size(ui.cursor(), state.size);
|
||||
let inner_rect = Rect::from_min_size(position, state.size);
|
||||
let desired_size = {
|
||||
let mut content_clip_rect = ui
|
||||
.clip_rect()
|
||||
|
|
|
@ -74,10 +74,10 @@ impl ScrollArea {
|
|||
);
|
||||
|
||||
let inner_size = outer_size - vec2(current_scroll_bar_width, 0.0);
|
||||
let inner_rect = Rect::from_min_size(outer_ui.cursor(), inner_size);
|
||||
let inner_rect = Rect::from_min_size(outer_ui.available().min, inner_size);
|
||||
|
||||
let mut content_ui = outer_ui.child_ui(Rect::from_min_size(
|
||||
outer_ui.cursor() - state.offset,
|
||||
inner_rect.min - state.offset,
|
||||
vec2(inner_size.x, f32::INFINITY),
|
||||
));
|
||||
let mut content_clip_rect = outer_ui.clip_rect().intersect(inner_rect);
|
||||
|
|
|
@ -353,9 +353,9 @@ impl Painting {
|
|||
}
|
||||
|
||||
ui.add_custom_contents(vec2(f32::INFINITY, 200.0), |ui| {
|
||||
let canvas_corner = ui.cursor();
|
||||
let interact = ui.reserve_space(ui.available().size(), Some(ui.id()));
|
||||
ui.set_clip_rect(ui.clip_rect().intersect(interact.rect)); // Make sure we don't paint out of bounds
|
||||
let interact = ui.reserve_space(ui.available_finite().size(), Some(ui.id()));
|
||||
let rect = interact.rect;
|
||||
ui.set_clip_rect(ui.clip_rect().intersect(rect)); // Make sure we don't paint out of bounds
|
||||
|
||||
if self.lines.is_empty() {
|
||||
self.lines.push(vec![]);
|
||||
|
@ -365,7 +365,7 @@ impl Painting {
|
|||
|
||||
if interact.active {
|
||||
if let Some(mouse_pos) = ui.input().mouse_pos {
|
||||
let canvas_pos = mouse_pos - canvas_corner;
|
||||
let canvas_pos = mouse_pos - rect.min;
|
||||
if current_line.last() != Some(&canvas_pos) {
|
||||
current_line.push(canvas_pos);
|
||||
}
|
||||
|
@ -377,7 +377,7 @@ impl Painting {
|
|||
for line in &self.lines {
|
||||
if line.len() >= 2 {
|
||||
ui.add_paint_cmd(PaintCmd::LinePath {
|
||||
points: line.iter().map(|p| canvas_corner + *p).collect(),
|
||||
points: line.iter().map(|p| rect.min + *p).collect(),
|
||||
color: LIGHT_GRAY,
|
||||
width: 2.0,
|
||||
});
|
||||
|
|
|
@ -235,25 +235,25 @@ impl Ui {
|
|||
/// This how much more space we can take up without overflowing our parent.
|
||||
/// Shrinks as widgets allocate space and the cursor moves.
|
||||
/// A small rectangle should be intepreted as "as little as possible".
|
||||
/// An infinite rectangle should be interpred as "as much as you want"
|
||||
/// An infinite rectangle should be interpred as "as much as you want".
|
||||
/// In most layouts the next widget will be put in the top left corner of this `Rect`.
|
||||
pub fn available(&self) -> Rect {
|
||||
Rect::from_min_max(self.cursor, self.bottom_right())
|
||||
}
|
||||
|
||||
/// This is like `available()`, but will never be infinite.
|
||||
/// Use this for components that want to grow without bounds (but shouldn't).
|
||||
/// In most layouts the next widget will be put in the top left corner of this `Rect`.
|
||||
pub fn available_finite(&self) -> Rect {
|
||||
Rect::from_min_max(self.cursor, self.finite_bottom_right())
|
||||
}
|
||||
|
||||
// TODO: remove
|
||||
pub fn direction(&self) -> Direction {
|
||||
self.dir
|
||||
}
|
||||
|
||||
pub fn cursor(&self) -> Pos2 {
|
||||
self.cursor
|
||||
}
|
||||
|
||||
// TODO: remove
|
||||
pub fn set_align(&mut self, align: Align) {
|
||||
self.align = align;
|
||||
}
|
||||
|
@ -278,11 +278,11 @@ impl Ui {
|
|||
/// Use this to generate widget ids for widgets that have persistent state in Memory.
|
||||
/// If the `id_source` is not unique within this ui
|
||||
/// then an error will be printed at the current cursor position.
|
||||
pub fn make_unique_id<IdSource>(&self, id_source: &IdSource) -> Id
|
||||
pub fn make_unique_id<IdSource>(&self, id_source: IdSource) -> Id
|
||||
where
|
||||
IdSource: Hash + std::fmt::Debug,
|
||||
{
|
||||
let id = self.id.with(id_source);
|
||||
let id = self.id.with(&id_source);
|
||||
// TODO: clip name clash error messages to clip rect
|
||||
self.ctx.register_unique_id(id, id_source, self.cursor)
|
||||
}
|
||||
|
@ -544,9 +544,7 @@ impl Ui {
|
|||
pub fn add_custom_contents(&mut self, size: Vec2, add_contents: impl FnOnce(&mut Ui)) {
|
||||
let size = size.min(self.available().size());
|
||||
let child_rect = Rect::from_min_size(self.cursor, size);
|
||||
let mut child_ui = Ui {
|
||||
..self.child_ui(child_rect)
|
||||
};
|
||||
let mut child_ui = self.child_ui(child_rect);
|
||||
add_contents(&mut child_ui);
|
||||
self.reserve_space(child_ui.bounding_size(), None);
|
||||
}
|
||||
|
@ -614,12 +612,12 @@ impl Ui {
|
|||
}
|
||||
|
||||
/// Start a ui with horizontal layout
|
||||
pub fn horizontal(&mut self, add_contents: impl FnOnce(&mut Ui)) {
|
||||
pub fn horizontal(&mut self, add_contents: impl FnOnce(&mut Ui)) -> InteractInfo {
|
||||
self.inner_layout(Direction::Horizontal, Align::Min, add_contents)
|
||||
}
|
||||
|
||||
/// Start a ui with vertical layout
|
||||
pub fn vertical(&mut self, add_contents: impl FnOnce(&mut Ui)) {
|
||||
pub fn vertical(&mut self, add_contents: impl FnOnce(&mut Ui)) -> InteractInfo {
|
||||
self.inner_layout(Direction::Vertical, Align::Min, add_contents)
|
||||
}
|
||||
|
||||
|
@ -628,7 +626,7 @@ impl Ui {
|
|||
dir: Direction,
|
||||
align: Align,
|
||||
add_contents: impl FnOnce(&mut Self),
|
||||
) {
|
||||
) -> InteractInfo {
|
||||
let child_rect = Rect::from_min_max(self.cursor, self.bottom_right());
|
||||
let mut child_ui = Self {
|
||||
dir,
|
||||
|
@ -637,7 +635,7 @@ impl Ui {
|
|||
};
|
||||
add_contents(&mut child_ui);
|
||||
let size = child_ui.bounding_size();
|
||||
self.reserve_space(size, None);
|
||||
self.reserve_space(size, None)
|
||||
}
|
||||
|
||||
/// Temporarily split split a vertical layout into several columns.
|
||||
|
|
|
@ -48,8 +48,8 @@ impl Label {
|
|||
self
|
||||
}
|
||||
|
||||
/// If true, will word wrap to the width of the current child_bounds.
|
||||
/// If false (defailt), will word wrap to the available width
|
||||
/// If true, will word wrap to `ui.available_finite().width()`.
|
||||
/// If false (default), will word wrap to `ui.available().width()`.
|
||||
pub fn auto_shrink(mut self) -> Self {
|
||||
self.auto_shrink = true;
|
||||
self
|
||||
|
@ -65,15 +65,8 @@ impl Label {
|
|||
self
|
||||
}
|
||||
|
||||
pub fn layout(&self, pos: Pos2, ui: &Ui) -> (Vec<font::TextFragment>, Vec2) {
|
||||
pub fn layout(&self, max_width: f32, ui: &Ui) -> (Vec<font::TextFragment>, Vec2) {
|
||||
let font = &ui.fonts()[self.text_style];
|
||||
|
||||
let max_width = if self.auto_shrink {
|
||||
ui.child_bounds().right() - pos.x
|
||||
} else {
|
||||
ui.rect().right() - pos.x
|
||||
};
|
||||
|
||||
if self.multiline {
|
||||
font.layout_multiline(&self.text, max_width)
|
||||
} else {
|
||||
|
@ -99,7 +92,12 @@ macro_rules! label {
|
|||
|
||||
impl Widget for Label {
|
||||
fn ui(self, ui: &mut Ui) -> GuiResponse {
|
||||
let (text, text_size) = self.layout(ui.cursor(), ui);
|
||||
let max_width = if self.auto_shrink {
|
||||
ui.available_finite().width()
|
||||
} else {
|
||||
ui.available().width()
|
||||
};
|
||||
let (text, text_size) = self.layout(max_width, ui);
|
||||
let interact = ui.reserve_space(text_size, None);
|
||||
ui.add_text(interact.rect.min, self.text_style, text, self.text_color);
|
||||
ui.response(interact)
|
||||
|
|
Loading…
Reference in a new issue