Flushes any pending damaged area to the LCD.
(&mut self)
| 298 | |
| 299 | /// Flushes any pending damaged area to the LCD. |
| 300 | fn force_present_canvas(&mut self) -> io::Result<()> { |
| 301 | let (x1y1, x2y2) = match self.damage { |
| 302 | None => return Ok(()), |
| 303 | Some(damage) => damage, |
| 304 | }; |
| 305 | |
| 306 | let mut data = LcdSize::between(x1y1, x2y2).new_buffer(self.stride); |
| 307 | for y in x1y1.y..(x2y2.y + 1) { |
| 308 | for x in x1y1.x..(x2y2.x + 1) { |
| 309 | let offset = self.fb_addr(x, y); |
| 310 | data.extend_from_slice(&self.fb[offset..offset + self.stride]); |
| 311 | } |
| 312 | } |
| 313 | debug_assert_eq!( |
| 314 | { |
| 315 | let (_xy, size) = to_xy_size(x1y1, x2y2); |
| 316 | size.width * size.height * self.stride |
| 317 | }, |
| 318 | data.len() |
| 319 | ); |
| 320 | |
| 321 | self.lcd.set_data(x1y1, x2y2, &data)?; |
| 322 | |
| 323 | self.damage = None; |
| 324 | |
| 325 | Ok(()) |
| 326 | } |
| 327 | } |
| 328 | |
| 329 | impl<L> Drop for BufferedLcd<L> |