Add ui.allocate_painter helper

This commit is contained in:
Emil Ernerfeldt 2020-12-19 11:14:21 +01:00
parent 58f36eb6ef
commit 1e1bfa4dc7
3 changed files with 13 additions and 6 deletions

View file

@ -14,6 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
* Turn off `Window` title bars with `window.title_bar(false)`.
* `ImageButton` - `ui.add(ImageButton::new(...))`.
* `ui.vertical_centered` and `ui.vertical_centered_justified`.
* `ui.allocate_painter` helper.
* Mouse-over explanation to duplicate ID warning.
* You can now easily constrain Egui to a portion of the screen using `RawInput::screen_rect`.
* You can now control the minimum and maixumum number of decimals to show in a `Slider` or `DragValue`.

View file

@ -243,7 +243,7 @@ impl Default for Painting {
fn default() -> Self {
Self {
lines: Default::default(),
stroke: Stroke::new(1.0, LIGHT_GRAY),
stroke: Stroke::new(1.0, LIGHT_BLUE),
}
}
}
@ -265,11 +265,10 @@ impl Painting {
}
fn content(&mut self, ui: &mut Ui) {
let rect = ui.allocate_space(ui.available_size_before_wrap_finite());
let response = ui.interact(rect, ui.id(), Sense::drag());
let rect = response.rect;
let clip_rect = ui.clip_rect().intersect(rect); // Make sure we don't paint out of bounds
let painter = Painter::new(ui.ctx().clone(), ui.layer_id(), clip_rect);
let painter = ui.allocate_painter(ui.available_size_before_wrap_finite());
let rect = painter.clip_rect();
let id = ui.make_position_id();
let response = ui.interact(rect, id, Sense::drag());
if self.lines.is_empty() {
self.lines.push(vec![]);

View file

@ -525,6 +525,13 @@ impl Ui {
let response = self.interact_hover(final_child_rect);
(ret, response)
}
/// Convenience function to get a region to paint on
pub fn allocate_painter(&mut self, desired_size: Vec2) -> Painter {
let rect = self.allocate_space(desired_size);
let clip_rect = self.clip_rect().intersect(rect); // Make sure we don't paint out of bounds
Painter::new(self.ctx().clone(), self.layer_id(), clip_rect)
}
}
/// # Adding widgets