Add a no-subsurfaces feature for debugging

This commit is contained in:
Ian Douglas Scott 2024-04-01 15:13:51 -07:00
parent 1fc416bb2e
commit bf2cd273f9
5 changed files with 24 additions and 3 deletions

View file

@ -38,6 +38,7 @@ default = ["wgpu"]
wgpu = ["libcosmic/wgpu"] wgpu = ["libcosmic/wgpu"]
# Debugging features # Debugging features
force-shm-screencopy = [] force-shm-screencopy = []
no-subsurfaces = ["force-shm-screencopy"]
[profile.dev] [profile.dev]
# Not usable at opt-level 0, at least with software renderer # Not usable at opt-level 0, at least with software renderer

View file

@ -284,7 +284,14 @@ fn toplevel_previews<'a>(
fn capture_image(image: Option<&CaptureImage>) -> cosmic::Element<'_, Msg> { fn capture_image(image: Option<&CaptureImage>) -> cosmic::Element<'_, Msg> {
if let Some(image) = image { if let Some(image) = image {
Subsurface::new(image.width, image.height, &image.wl_buffer).into() #[cfg(feature = "no-subsurfaces")]
{
widget::Image::new(image.image.clone()).into()
}
#[cfg(not(feature = "no-subsurfaces"))]
{
Subsurface::new(image.width, image.height, &image.wl_buffer).into()
}
} else { } else {
widget::Image::new(widget::image::Handle::from_pixels(1, 1, vec![0, 0, 0, 255])).into() widget::Image::new(widget::image::Handle::from_pixels(1, 1, vec![0, 0, 0, 255])).into()
} }

View file

@ -69,6 +69,8 @@ pub struct Buffer {
pub buffer: wl_buffer::WlBuffer, pub buffer: wl_buffer::WlBuffer,
node: Option<PathBuf>, node: Option<PathBuf>,
pub size: (u32, u32), pub size: (u32, u32),
#[cfg(feature = "no-subsurfaces")]
pub mmap: memmap2::Mmap,
} }
impl AppData { impl AppData {
@ -96,6 +98,9 @@ impl AppData {
pool.destroy(); pool.destroy();
#[cfg(feature = "no-subsurfaces")]
let mmap = unsafe { memmap2::Mmap::map(&fd).unwrap() };
Buffer { Buffer {
backing: Arc::new( backing: Arc::new(
Shmbuf { Shmbuf {
@ -109,6 +114,8 @@ impl AppData {
.into(), .into(),
), ),
buffer, buffer,
#[cfg(feature = "no-subsurfaces")]
mmap,
node: None, node: None,
size: (width, height), size: (width, height),
} }

View file

@ -87,6 +87,8 @@ pub struct CaptureImage {
pub width: u32, pub width: u32,
pub height: u32, pub height: u32,
pub wl_buffer: SubsurfaceBuffer, pub wl_buffer: SubsurfaceBuffer,
#[cfg(feature = "no-subsurfaces")]
pub image: cosmic::widget::image::Handle,
} }
pub fn subscription(conn: Connection) -> iced::Subscription<Event> { pub fn subscription(conn: Connection) -> iced::Subscription<Event> {

View file

@ -208,12 +208,16 @@ impl ScreencopyHandler for AppData {
let front = session.buffers.as_mut().unwrap().first_mut().unwrap(); let front = session.buffers.as_mut().unwrap().first_mut().unwrap();
let (buffer, release) = SubsurfaceBuffer::new(front.backing.clone()); let (buffer, release) = SubsurfaceBuffer::new(front.backing.clone());
session.release = Some(release); session.release = Some(release);
// let img = unsafe { front.to_image() };
// let image = CaptureImage { img };
let image = CaptureImage { let image = CaptureImage {
wl_buffer: buffer, wl_buffer: buffer,
width: front.size.0, width: front.size.0,
height: front.size.1, height: front.size.1,
#[cfg(feature = "no-subsurfaces")]
image: cosmic::widget::image::Handle::from_pixels(
front.size.0,
front.size.1,
front.mmap.to_vec(),
),
}; };
match &capture.source { match &capture.source {
CaptureSource::Toplevel(toplevel) => { CaptureSource::Toplevel(toplevel) => {