@@ -1258,13 +1258,8 @@ impl App { |
| 1258 | | 1258 | |
| 1259 | /// Blit surface to window. | 1259 | /// Blit surface to window. |
| 1260 | fn blit(&mut self) -> Result<()> { | 1260 | fn blit(&mut self) -> Result<()> { |
| 1261 | - let data = { | 1261 | + let data = self.renderer.pixel_data() |
| 1262 | - let surface = self.renderer.surface_mut(); | 1262 | + .map_err(|e| anyhow::anyhow!("Failed to get surface data: {}", e))?; |
| 1263 | - let data_ref = surface | | |
| 1264 | - .data() | | |
| 1265 | - .map_err(|e| anyhow::anyhow!("Failed to get surface data: {}", e))?; | | |
| 1266 | - data_ref.to_vec() | | |
| 1267 | - }; | | |
| 1268 | | 1263 | |
| 1269 | let conn = self.window.connection(); | 1264 | let conn = self.window.connection(); |
| 1270 | conn.inner().put_image( | 1265 | conn.inner().put_image( |
@@ -1423,7 +1418,7 @@ impl App { |
| 1423 | pub fn run(mut self) -> Result<()> { | 1418 | pub fn run(mut self) -> Result<()> { |
| 1424 | let config = EventLoopConfig { | 1419 | let config = EventLoopConfig { |
| 1425 | fps: 30, | 1420 | fps: 30, |
| 1426 | - continuous_redraw: false, | 1421 | + continuous_redraw: true, |
| 1427 | }; | 1422 | }; |
| 1428 | let mut event_loop = EventLoop::new(&self.window, config)?; | 1423 | let mut event_loop = EventLoop::new(&self.window, config)?; |
| 1429 | | 1424 | |
@@ -1704,32 +1699,31 @@ impl App { |
| 1704 | self.should_quit = true; | 1699 | self.should_quit = true; |
| 1705 | } | 1700 | } |
| 1706 | | 1701 | |
| 1707 | - InputEvent::Idle => { | 1702 | + _ => {} |
| 1708 | - // Clear stale jump pattern (1.5s timeout) | 1703 | + } |
| 1709 | - if let Some(t) = self.jump_time { | | |
| 1710 | - if t.elapsed().as_millis() > 1500 && !self.jump_pattern.is_empty() { | | |
| 1711 | - self.jump_pattern.clear(); | | |
| 1712 | - self.jump_time = None; | | |
| 1713 | - ev_loop.request_redraw(); | | |
| 1714 | - } | | |
| 1715 | - } | | |
| 1716 | | 1704 | |
| 1717 | - if self.last_refresh.elapsed().as_secs_f64() >= self.refresh_interval { | 1705 | + // Periodic tasks (run each frame via continuous_redraw) |
| 1718 | - if self.daemon_available { | 1706 | + // Clear stale jump pattern (1.5s timeout) |
| 1719 | - self.refresh_data(); | 1707 | + if let Some(t) = self.jump_time { |
| 1720 | - self.update_header(); | 1708 | + if t.elapsed().as_millis() > 1500 && !self.jump_pattern.is_empty() { |
| 1721 | - ev_loop.request_redraw(); | 1709 | + self.jump_pattern.clear(); |
| 1722 | - } else { | 1710 | + self.jump_time = None; |
| 1723 | - self.daemon_available = Self::check_daemon(); | 1711 | + ev_loop.request_redraw(); |
| 1724 | - if self.daemon_available { | | |
| 1725 | - ev_loop.request_redraw(); | | |
| 1726 | - } | | |
| 1727 | - self.last_refresh = Instant::now(); | | |
| 1728 | - } | | |
| 1729 | - } | | |
| 1730 | } | 1712 | } |
| | 1713 | + } |
| 1731 | | 1714 | |
| 1732 | - _ => {} | 1715 | + if self.last_refresh.elapsed().as_secs_f64() >= self.refresh_interval { |
| | 1716 | + if self.daemon_available { |
| | 1717 | + self.refresh_data(); |
| | 1718 | + self.update_header(); |
| | 1719 | + ev_loop.request_redraw(); |
| | 1720 | + } else { |
| | 1721 | + self.daemon_available = Self::check_daemon(); |
| | 1722 | + if self.daemon_available { |
| | 1723 | + ev_loop.request_redraw(); |
| | 1724 | + } |
| | 1725 | + self.last_refresh = Instant::now(); |
| | 1726 | + } |
| 1733 | } | 1727 | } |
| 1734 | | 1728 | |
| 1735 | if ev_loop.needs_redraw() { | 1729 | if ev_loop.needs_redraw() { |