clay_layout/elements/
image.rs1use 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 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}