mirror of
https://github.com/emilk/egui.git
synced 2026-09-01 14:20:04 -04:00
Add Harness::new_ui, Harness::fit_contents (#5301)
This adds a `Harness::new_ui`, which accepts a Ui closure and shows the ui in a central panel. One big benefit is that this allows us to add a fit_contents method that can run the ui closure with a sizing pass and resize the "screen" based on the content size. I also used this to add a snapshot test for the rendering_test at different scales.
This commit is contained in:
@@ -1,17 +1,18 @@
|
||||
use crate::app_kind::AppKind;
|
||||
use crate::Harness;
|
||||
use egui::{Pos2, Rect, Vec2};
|
||||
|
||||
/// Builder for [`Harness`].
|
||||
pub struct HarnessBuilder {
|
||||
pub(crate) screen_rect: Rect,
|
||||
pub(crate) dpi: f32,
|
||||
pub(crate) pixels_per_point: f32,
|
||||
}
|
||||
|
||||
impl Default for HarnessBuilder {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
screen_rect: Rect::from_min_size(Pos2::ZERO, Vec2::new(800.0, 600.0)),
|
||||
dpi: 1.0,
|
||||
pixels_per_point: 1.0,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,16 +27,18 @@ impl HarnessBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Set the DPI of the window.
|
||||
/// Set the `pixels_per_point` of the window.
|
||||
#[inline]
|
||||
pub fn with_dpi(mut self, dpi: f32) -> Self {
|
||||
self.dpi = dpi;
|
||||
pub fn with_pixels_per_point(mut self, pixels_per_point: f32) -> Self {
|
||||
self.pixels_per_point = pixels_per_point;
|
||||
self
|
||||
}
|
||||
|
||||
/// Create a new Harness with the given app closure.
|
||||
///
|
||||
/// The ui closure will immediately be called once to create the initial ui.
|
||||
/// The app closure will immediately be called once to create the initial ui.
|
||||
///
|
||||
/// If you don't need to create Windows / Panels, you can use [`HarnessBuilder::build_ui`] instead.
|
||||
///
|
||||
/// # Example
|
||||
/// ```rust
|
||||
@@ -50,6 +53,25 @@ impl HarnessBuilder {
|
||||
/// });
|
||||
/// ```
|
||||
pub fn build<'a>(self, app: impl FnMut(&egui::Context) + 'a) -> Harness<'a> {
|
||||
Harness::from_builder(&self, app)
|
||||
Harness::from_builder(&self, AppKind::Context(Box::new(app)))
|
||||
}
|
||||
|
||||
/// Create a new Harness with the given ui closure.
|
||||
///
|
||||
/// The ui closure will immediately be called once to create the initial ui.
|
||||
///
|
||||
/// If you need to create Windows / Panels, you can use [`HarnessBuilder::build`] instead.
|
||||
///
|
||||
/// # Example
|
||||
/// ```rust
|
||||
/// # use egui_kittest::Harness;
|
||||
/// let mut harness = Harness::builder()
|
||||
/// .with_size(egui::Vec2::new(300.0, 200.0))
|
||||
/// .build_ui(|ui| {
|
||||
/// ui.label("Hello, world!");
|
||||
/// });
|
||||
/// ```
|
||||
pub fn build_ui<'a>(self, app: impl FnMut(&mut egui::Ui) + 'a) -> Harness<'a> {
|
||||
Harness::from_builder(&self, AppKind::Ui(Box::new(app)))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user