use crate::{ commands::{wrap_command, wrap_origin_accessors}, macros::{wrap_fields, wrap_functions}, mem::{heap_move_nonnull, heap_remove}, }; use servicepoint::{Bitmap, BitmapCommand, CompressionCode, Origin}; use std::ptr::NonNull; wrap_command!(Bitmap); wrap_fields!(BitmapCommand; prop bitmap: Bitmap { get mut; set move; }; prop compression: CompressionCode { get; set; }; ); wrap_origin_accessors!(BitmapCommand); wrap_functions!(associate BitmapCommand; /// Sets a window of pixels to the specified values. /// /// The passed [Bitmap] gets consumed. /// /// Returns: a new [BitmapCommand] instance. fn new( bitmap: NonNull, origin_x: usize, origin_y: usize, compression: CompressionCode, ) -> NonNull { heap_move_nonnull(BitmapCommand { bitmap: unsafe { heap_remove(bitmap) }, origin: Origin::new(origin_x, origin_y), compression, }) } /// Move the provided [Bitmap] into a new [BitmapCommand], /// leaving other fields as their default values. /// /// Rust equivalent: `BitmapCommand::from(bitmap)` fn from_bitmap( bitmap: NonNull, ) -> NonNull { heap_move_nonnull(unsafe { heap_remove(bitmap) }.into()) } );