maa_framework/buffer/
image_buffer.rs1use std::ffi::c_void;
2
3use crate::{internal, maa_bool, Error, MaaResult};
4
5pub struct MaaImageBuffer {
6 pub(crate) handle: internal::MaaImageBufferHandle,
7 destroy_at_drop: bool,
8}
9
10impl From<internal::MaaImageBufferHandle> for MaaImageBuffer {
11 fn from(handle: internal::MaaImageBufferHandle) -> Self {
12 MaaImageBuffer {
13 handle,
14 destroy_at_drop: false,
15 }
16 }
17}
18
19unsafe impl Send for MaaImageBuffer {}
20unsafe impl Sync for MaaImageBuffer {}
21
22impl MaaImageBuffer {
23 pub fn new() -> Self {
24 let handle = unsafe { internal::MaaCreateImageBuffer() };
25
26 MaaImageBuffer {
27 handle,
28 destroy_at_drop: true,
29 }
30 }
31
32 pub fn empty(&self) -> bool {
33 let empty = unsafe { internal::MaaIsImageEmpty(self.handle) };
34
35 maa_bool!(empty)
36 }
37
38 pub fn clear(&self) -> MaaResult<()> {
39 let ret = unsafe { internal::MaaClearImage(self.handle) };
40 maa_bool!(ret, BufferError)
41 }
42
43 pub fn get_raw(&self) -> *mut c_void {
44 unsafe { internal::MaaGetImageRawData(self.handle) }
45 }
46
47 pub fn width(&self) -> i32 {
48 unsafe { internal::MaaGetImageWidth(self.handle) }
49 }
50
51 pub fn height(&self) -> i32 {
52 unsafe { internal::MaaGetImageHeight(self.handle) }
53 }
54
55 pub fn typ(&self) -> i32 {
56 unsafe { internal::MaaGetImageType(self.handle) }
57 }
58
59 pub fn encoded(&self) -> *mut u8 {
60 unsafe { internal::MaaGetImageEncoded(self.handle) }
61 }
62
63 pub fn encoded_size(&self) -> u64 {
64 unsafe { internal::MaaGetImageEncodedSize(self.handle) }
65 }
66
67 pub unsafe fn set_raw(&self, data: *mut c_void, width: i32, height: i32, typ: i32) {
71 unsafe {
72 internal::MaaSetImageRawData(self.handle, data, width, height, typ);
73 }
74 }
75
76 pub unsafe fn set_encoded(&self, data: *mut u8, size: u64) {
80 unsafe {
81 internal::MaaSetImageEncoded(self.handle, data, size);
82 }
83 }
84}
85
86impl Default for MaaImageBuffer {
87 fn default() -> Self {
88 MaaImageBuffer::new()
89 }
90}
91
92impl Drop for MaaImageBuffer {
93 fn drop(&mut self) {
94 if self.destroy_at_drop {
95 unsafe {
96 internal::MaaDestroyImageBuffer(self.handle);
97 }
98 }
99 }
100}