|
1 | 1 | //! Softbuffer implementation using CoreGraphics. |
2 | 2 | use crate::backend_interface::*; |
3 | 3 | use crate::error::InitError; |
4 | | -use crate::{Rect, SoftBufferError}; |
| 4 | +use crate::{util, Rect, SoftBufferError}; |
5 | 5 | use objc2::rc::Retained; |
6 | 6 | use objc2::runtime::{AnyObject, Bool}; |
7 | 7 | use objc2::{define_class, msg_send, AllocAnyThread, DefinedClass, MainThreadMarker, Message}; |
@@ -29,6 +29,7 @@ define_class!( |
29 | 29 | #[unsafe(super(NSObject))] |
30 | 30 | #[name = "SoftbufferObserver"] |
31 | 31 | #[ivars = SendCALayer] |
| 32 | + #[derive(Debug)] |
32 | 33 | struct Observer; |
33 | 34 |
|
34 | 35 | /// NSKeyValueObserving |
@@ -93,6 +94,7 @@ impl Observer { |
93 | 94 | } |
94 | 95 | } |
95 | 96 |
|
| 97 | +#[derive(Debug)] |
96 | 98 | pub struct CGImpl<D, W> { |
97 | 99 | /// Our layer. |
98 | 100 | layer: SendCALayer, |
@@ -258,15 +260,16 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> SurfaceInterface<D, W> for CGImpl< |
258 | 260 |
|
259 | 261 | fn buffer_mut(&mut self) -> Result<BufferImpl<'_, D, W>, SoftBufferError> { |
260 | 262 | Ok(BufferImpl { |
261 | | - buffer: vec![0; self.width * self.height].into(), |
| 263 | + buffer: util::PixelBuffer(vec![0; self.width * self.height]), |
262 | 264 | imp: self, |
263 | 265 | }) |
264 | 266 | } |
265 | 267 | } |
266 | 268 |
|
| 269 | +#[derive(Debug)] |
267 | 270 | pub struct BufferImpl<'a, D, W> { |
268 | 271 | imp: &'a mut CGImpl<D, W>, |
269 | | - buffer: Box<[u32]>, |
| 272 | + buffer: util::PixelBuffer, |
270 | 273 | } |
271 | 274 |
|
272 | 275 | impl<D: HasDisplayHandle, W: HasWindowHandle> BufferInterface for BufferImpl<'_, D, W> { |
@@ -306,7 +309,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> BufferInterface for BufferImpl<'_, |
306 | 309 |
|
307 | 310 | let data_provider = { |
308 | 311 | let len = self.buffer.len() * size_of::<u32>(); |
309 | | - let buffer: *mut [u32] = Box::into_raw(self.buffer); |
| 312 | + let buffer: *mut [u32] = Box::into_raw(self.buffer.0.into_boxed_slice()); |
310 | 313 | // Convert slice pointer to thin pointer. |
311 | 314 | let data_ptr = buffer.cast::<c_void>(); |
312 | 315 |
|
@@ -363,6 +366,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> BufferInterface for BufferImpl<'_, |
363 | 366 | } |
364 | 367 | } |
365 | 368 |
|
| 369 | +#[derive(Debug)] |
366 | 370 | struct SendCALayer(Retained<CALayer>); |
367 | 371 |
|
368 | 372 | // SAFETY: CALayer is dubiously thread safe, like most things in Core Animation. |
|
0 commit comments