Compare commits
3 commits
f483b5a2d5
...
a418e4f0c3
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a418e4f0c3 | ||
![]() |
2e468fb47a | ||
![]() |
c797bb6894 |
|
@ -24,7 +24,7 @@ sort_by = "Name"
|
||||||
|
|
||||||
[parse]
|
[parse]
|
||||||
parse_deps = true
|
parse_deps = true
|
||||||
include = ["servicepoint"]
|
include = ["servicepoint", "std"]
|
||||||
extra_bindings = ["servicepoint"]
|
extra_bindings = ["servicepoint"]
|
||||||
|
|
||||||
[parse.expand]
|
[parse.expand]
|
||||||
|
|
|
@ -388,6 +388,15 @@ void sp_bitmap_fill(Bitmap */*notnull*/ bitmap, bool value);
|
||||||
*/
|
*/
|
||||||
void sp_bitmap_free(Bitmap */*notnull*/ bitmap);
|
void sp_bitmap_free(Bitmap */*notnull*/ bitmap);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tries to convert the BitVec to a Bitmap.
|
||||||
|
*
|
||||||
|
* The provided BitVec gets consumed.
|
||||||
|
*
|
||||||
|
* Returns NULL in case of error.
|
||||||
|
*/
|
||||||
|
Bitmap *sp_bitmap_from_bitvec(size_t width, SPBitVec */*notnull*/ bitvec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current value at the specified position in the [Bitmap].
|
* Gets the current value at the specified position in the [Bitmap].
|
||||||
*
|
*
|
||||||
|
@ -411,6 +420,11 @@ bool sp_bitmap_get(Bitmap */*notnull*/ bitmap, size_t x, size_t y);
|
||||||
*/
|
*/
|
||||||
size_t sp_bitmap_height(Bitmap */*notnull*/ bitmap);
|
size_t sp_bitmap_height(Bitmap */*notnull*/ bitmap);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consumes the Bitmap and returns the contained BitVec
|
||||||
|
*/
|
||||||
|
SPBitVec */*notnull*/ sp_bitmap_into_bitvec(Bitmap */*notnull*/ bitmap);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a [Bitmap] with the specified dimensions from the provided data.
|
* Loads a [Bitmap] with the specified dimensions from the provided data.
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::byte_slice::ByteSlice;
|
use crate::byte_slice::ByteSlice;
|
||||||
use crate::{heap_drop, heap_move, heap_move_nonnull};
|
use crate::{heap_drop, heap_move, heap_move_nonnull, SPBitVec};
|
||||||
use servicepoint::{Bitmap, DataRef, Grid};
|
use servicepoint::{Bitmap, DataRef, Grid};
|
||||||
use std::ptr::NonNull;
|
use std::ptr::NonNull;
|
||||||
|
|
||||||
|
@ -68,6 +68,24 @@ pub unsafe extern "C" fn sp_bitmap_load(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tries to convert the BitVec to a Bitmap.
|
||||||
|
///
|
||||||
|
/// The provided BitVec gets consumed.
|
||||||
|
///
|
||||||
|
/// Returns NULL in case of error.
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn sp_bitmap_from_bitvec(
|
||||||
|
width: usize,
|
||||||
|
bitvec: NonNull<SPBitVec>,
|
||||||
|
) -> *mut Bitmap {
|
||||||
|
let bitvec = unsafe { *Box::from_raw(bitvec.as_ptr()) };
|
||||||
|
if let Ok(bitmap) = Bitmap::from_bitvec(width, bitvec.0) {
|
||||||
|
heap_move(bitmap)
|
||||||
|
} else {
|
||||||
|
std::ptr::null_mut()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Clones a [Bitmap].
|
/// Clones a [Bitmap].
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn sp_bitmap_clone(
|
pub unsafe extern "C" fn sp_bitmap_clone(
|
||||||
|
@ -172,3 +190,12 @@ pub unsafe extern "C" fn sp_bitmap_unsafe_data_ref(
|
||||||
) -> ByteSlice {
|
) -> ByteSlice {
|
||||||
unsafe { ByteSlice::from_slice(bitmap.as_mut().data_ref_mut()) }
|
unsafe { ByteSlice::from_slice(bitmap.as_mut().data_ref_mut()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Consumes the Bitmap and returns the contained BitVec
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn sp_bitmap_into_bitvec(
|
||||||
|
bitmap: NonNull<Bitmap>,
|
||||||
|
) -> NonNull<SPBitVec> {
|
||||||
|
let bitmap = unsafe { *Box::from_raw(bitmap.as_ptr()) };
|
||||||
|
heap_move_nonnull(SPBitVec(bitmap.into()))
|
||||||
|
}
|
||||||
|
|
|
@ -30,6 +30,8 @@ pub unsafe extern "C" fn sp_brightness_grid_new(
|
||||||
|
|
||||||
/// Loads a [BrightnessGrid] with the specified dimensions from the provided data.
|
/// Loads a [BrightnessGrid] with the specified dimensions from the provided data.
|
||||||
///
|
///
|
||||||
|
/// Any out of range values will be set to [Brightness::MAX] or [Brightness::MIN].
|
||||||
|
///
|
||||||
/// returns: new [BrightnessGrid] instance, or NULL in case of an error.
|
/// returns: new [BrightnessGrid] instance, or NULL in case of an error.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn sp_brightness_grid_load(
|
pub unsafe extern "C" fn sp_brightness_grid_load(
|
||||||
|
@ -38,14 +40,12 @@ pub unsafe extern "C" fn sp_brightness_grid_load(
|
||||||
data: ByteSlice,
|
data: ByteSlice,
|
||||||
) -> *mut BrightnessGrid {
|
) -> *mut BrightnessGrid {
|
||||||
let data = unsafe { data.as_slice() };
|
let data = unsafe { data.as_slice() };
|
||||||
let grid = match ByteGrid::load(width, height, data) {
|
|
||||||
None => return std::ptr::null_mut(),
|
match ByteGrid::load(width, height, data)
|
||||||
Some(grid) => grid,
|
.map(move |grid| grid.map(Brightness::saturating_from))
|
||||||
};
|
{
|
||||||
if let Ok(grid) = BrightnessGrid::try_from(grid) {
|
None => std::ptr::null_mut(),
|
||||||
heap_move(grid)
|
Some(grid) => heap_move(grid),
|
||||||
} else {
|
|
||||||
std::ptr::null_mut()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue