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