use super::Image;
use breadx::{
display::{from_void_request, RawRequest},
protocol::xproto::{Drawable, Gcontext},
};
impl<Storage: AsRef<[u8]> + ?Sized> Image<Storage> {
#[allow(clippy::too_many_arguments)]
pub fn put_subimage_request<R>(
&self,
drawable: impl Into<Drawable>,
gc: impl Into<Gcontext>,
src_x: usize,
src_y: usize,
width: usize,
height: usize,
dst_x: i16,
dst_y: i16,
discard_reply: bool,
raw_request_handler: impl FnOnce(RawRequest<'_, '_>) -> R,
) -> R {
let drawable = drawable.into();
let gc = gc.into();
if (src_x, src_y, width, height) == (0, 0, self.width as usize, self.height as usize) {
let pir = self.put_image_request(drawable, gc, dst_x, dst_y);
return from_void_request(pir, discard_reply, raw_request_handler);
}
let cropped = self.crop(src_x, src_y, width, height);
let pir = cropped.put_image_request(drawable, gc, dst_x, dst_y);
from_void_request(pir, discard_reply, raw_request_handler)
}
}