Add ui.allocate_painter helper
This commit is contained in:
parent
58f36eb6ef
commit
1e1bfa4dc7
3 changed files with 13 additions and 6 deletions
|
@ -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`.
|
||||
|
|
|
@ -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![]);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue