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