diff --git a/CHANGELOG.md b/CHANGELOG.md index 368963aac..def9b6078 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,9 @@ Please only add new entries below the [Unreleased](#unreleased---releasedate) he ## [@Unreleased] - @ReleaseDate +### Features +- **core**: Add the ability to force redraw a frame. (#pr @zihadmahiuddin) + ## [0.4.0-alpha.26] - 2025-02-05 ### Fixed diff --git a/core/src/test_helper.rs b/core/src/test_helper.rs index d6a3805ac..0baa77ccd 100644 --- a/core/src/test_helper.rs +++ b/core/src/test_helper.rs @@ -105,7 +105,7 @@ impl TestWindow { self.run_frame_tasks(); AppCtx::frame_ticks().clone().next(Instant::now()); - self.0.draw_frame(); + self.0.draw_frame(false); } } diff --git a/core/src/window.rs b/core/src/window.rs index 570f674bb..4ea5075b8 100644 --- a/core/src/window.rs +++ b/core/src/window.rs @@ -217,7 +217,7 @@ impl Window { /// Draw an image what current render tree represent. #[track_caller] - pub fn draw_frame(&self) -> bool { + pub fn draw_frame(&self, force: bool) -> bool { AppCtx::run_until_stalled(); let mut ticker = self.frame_ticker.clone(); ticker.next(FrameMsg::NewFrame(Instant::now())); @@ -225,7 +225,7 @@ impl Window { self.update_painter_viewport(); let draw = self.need_draw() && !self.size().is_empty(); - if draw { + if force || draw { let root = self.tree().root(); let surface = { diff --git a/ribir/src/app.rs b/ribir/src/app.rs index 4eca89f96..671114b0e 100644 --- a/ribir/src/app.rs +++ b/ribir/src/app.rs @@ -108,7 +108,7 @@ impl App { if wnd.is_visible() != Some(false) { // if this frame is really draw, request another redraw. To make sure the draw // always end with a empty draw and emit an extra tick cycle message. - if wnd.draw_frame() { + if wnd.draw_frame(false) { request_redraw(&wnd); } }