use crate::macros::{ wrap_get_set_fill_2d, wrap_uniffi_object, wrap_width_height, }; use servicepoint::{DataRef, Grid}; use std::sync::Arc; wrap_uniffi_object!(Bitmap); wrap_width_height!(Bitmap); wrap_get_set_fill_2d!(Bitmap, bool); #[uniffi::export] impl Bitmap { #[uniffi::constructor] pub fn new(width: u64, height: u64) -> Arc { Self::internal_new( servicepoint::Bitmap::new(width as usize, height as usize).unwrap(), ) } #[uniffi::constructor] pub fn new_max_sized() -> Arc { Self::internal_new(servicepoint::Bitmap::max_sized()) } #[uniffi::constructor] pub fn load(width: u64, height: u64, data: Vec) -> Arc { Self::internal_new( servicepoint::Bitmap::load(width as usize, height as usize, &data) .unwrap(), ) } pub fn equals(&self, other: &Bitmap) -> bool { let a = self.actual.read().unwrap(); let b = other.actual.read().unwrap(); *a == *b } pub fn copy_raw(&self) -> Vec { self.actual.read().unwrap().data_ref().to_vec() } }