cursor: Re-enable cursor image cache

This commit is contained in:
Victoria Brekenfeld 2024-06-17 15:13:01 +02:00 committed by Victoria Brekenfeld
parent 977ad674e5
commit a97279147e

View file

@ -226,7 +226,7 @@ pub struct CursorStateInner {
current_cursor: CursorShape, current_cursor: CursorShape,
pub cursors: HashMap<CursorShape, Cursor>, pub cursors: HashMap<CursorShape, Cursor>,
current_image: Option<Image>, current_image: Option<Image>,
//image_cache: Vec<(Image, MemoryRenderBuffer)>, image_cache: Vec<(Image, MemoryRenderBuffer)>,
} }
impl CursorStateInner { impl CursorStateInner {
@ -304,6 +304,7 @@ impl Default for CursorStateInner {
map map
}, },
current_image: None, current_image: None,
image_cache: Vec::new(),
} }
} }
} }
@ -344,24 +345,22 @@ where
let integer_scale = scale.x.max(scale.y).ceil() as u32; let integer_scale = scale.x.max(scale.y).ceil() as u32;
let seat_userdata = seat.user_data(); let seat_userdata = seat.user_data();
let mut state = seat_userdata.get::<CursorState>().unwrap().lock().unwrap(); let mut state_ref = seat_userdata.get::<CursorState>().unwrap().lock().unwrap();
let state = &mut *state_ref;
let frame = state.cursors.get(&state.current_cursor).unwrap().get_image( let frame = state.cursors.get(&state.current_cursor).unwrap().get_image(
integer_scale, integer_scale,
Into::<Duration>::into(time).as_millis() as u32, Into::<Duration>::into(time).as_millis() as u32,
); );
/* let pointer_images = &mut state.image_cache;
let mut pointer_images = &mut state.image_cache;
let maybe_image = let maybe_image =
pointer_images pointer_images
.iter() .iter()
.find_map(|(image, texture)| if image == &frame { Some(texture) } else { None }); .find_map(|(image, texture)| if image == &frame { Some(texture) } else { None });
*/ let pointer_image = match maybe_image {
let pointer_image = /*match maybe_image {
Some(image) => image, Some(image) => image,
None => { None => {
let buffer =*/ MemoryRenderBuffer::from_slice( let buffer = MemoryRenderBuffer::from_slice(
&frame.pixels_rgba, &frame.pixels_rgba,
Fourcc::Argb8888, Fourcc::Argb8888,
(frame.width as i32, frame.height as i32), (frame.width as i32, frame.height as i32),
@ -369,11 +368,10 @@ where
Transform::Normal, Transform::Normal,
None, None,
); );
/*
pointer_images.push((frame.clone(), buffer)); pointer_images.push((frame.clone(), buffer));
pointer_images.last().map(|(_, i)| i).unwrap() pointer_images.last().map(|(_, i)| i).unwrap()
} }
};*/ };
let hotspot = Point::<i32, BufferCoords>::from((frame.xhot as i32, frame.yhot as i32)); let hotspot = Point::<i32, BufferCoords>::from((frame.xhot as i32, frame.yhot as i32));
state.current_image = Some(frame); state.current_image = Some(frame);