clay_layout/elements/
image.rs

1use core::ffi::c_void;
2
3use crate::{bindings::*, math::Dimensions, mem, DataRef, TypedConfig};
4
5use super::ElementConfigType;
6
7#[derive(Debug, Copy, Clone)]
8pub struct Image {
9    pub data: *mut c_void,
10    pub source_dimensions: Dimensions,
11}
12
13impl Image {
14    pub fn new() -> Self {
15        Self::default()
16    }
17
18    /// Set the data of the image. The data has to be created by using [Clay::data].
19    pub fn data(&mut self, data: DataRef) -> &mut Self {
20        self.data = data.ptr as *mut c_void;
21        self
22    }
23
24    pub fn source_dimensions(&mut self, dimensions: Dimensions) -> &mut Self {
25        self.source_dimensions = dimensions;
26        self
27    }
28
29    pub fn end(&self) -> TypedConfig {
30        let memory = unsafe { Clay__StoreImageElementConfig((*self).into()) };
31
32        TypedConfig {
33            config_memory: memory as _,
34            id: mem::zeroed_init(),
35            config_type: ElementConfigType::Image as _,
36        }
37    }
38}
39
40impl Default for Image {
41    fn default() -> Self {
42        Self {
43            data: core::ptr::null_mut(),
44            source_dimensions: Dimensions::default(),
45        }
46    }
47}
48
49impl From<Clay_ImageElementConfig> for Image {
50    fn from(value: Clay_ImageElementConfig) -> Self {
51        Self {
52            data: value.imageData,
53            source_dimensions: value.sourceDimensions.into(),
54        }
55    }
56}
57
58impl From<Image> for Clay_ImageElementConfig {
59    fn from(value: Image) -> Self {
60        Self {
61            imageData: value.data,
62            sourceDimensions: value.source_dimensions.into(),
63        }
64    }
65}