mirror of
https://github.com/dankamongmen/notcurses.git
synced 2024-11-02 09:40:15 +00:00
rust: add NcPlane methods resize_maximize & rgba; fix #1508
This commit is contained in:
parent
7b9a38d2f1
commit
29ac41440c
@ -1,12 +1,15 @@
|
||||
//! `NcPlane*` methods and associated functions.
|
||||
|
||||
use core::ptr::{null, null_mut};
|
||||
use core::{
|
||||
ptr::{null, null_mut},
|
||||
slice::from_raw_parts_mut,
|
||||
};
|
||||
|
||||
use crate::{
|
||||
cstring, error, error_ref, error_ref_mut, rstring, NcAlign, NcAlphaBits, NcBoxMask, NcCell,
|
||||
NcChannel, NcChannelPair, NcColor, NcDim, NcEgc, NcError, NcFadeCb, NcOffset, NcPaletteIndex,
|
||||
NcPlane, NcPlaneOptions, NcResizeCb, NcResult, NcRgb, NcStyleMask, NcTime, Notcurses,
|
||||
NCRESULT_ERR,
|
||||
cstring, error, error_ref, error_ref_mut, rstring, NcAlign, NcAlphaBits, NcBlitter, NcBoxMask,
|
||||
NcCell, NcChannel, NcChannelPair, NcColor, NcDim, NcEgc, NcError, NcFadeCb, NcOffset,
|
||||
NcPaletteIndex, NcPlane, NcPlaneOptions, NcResizeCb, NcResult, NcRgb, NcStyleMask, NcTime,
|
||||
Notcurses, NCRESULT_ERR,
|
||||
};
|
||||
|
||||
/// # NcPlaneOptions Constructors
|
||||
@ -1342,6 +1345,77 @@ impl NcPlane {
|
||||
]
|
||||
}
|
||||
|
||||
/// Suitable for use as a 'resizecb', this will resize the plane
|
||||
/// to the visual region's size. It is used for the standard plane.
|
||||
///
|
||||
/// *C style function: [ncplane_resize_maximize()][crate::ncplane_resize_maximize].*
|
||||
pub fn resize_maximize(&mut self) -> NcResult<()> {
|
||||
error![
|
||||
unsafe { crate::ncplane_resize_maximize(self) },
|
||||
"NcPlane.resize_maximize()"
|
||||
]
|
||||
}
|
||||
|
||||
/// Creates an RGBA flat array from the selected region of the ncplane.
|
||||
///
|
||||
/// Starts at the plane's `beg_y`x`beg_x` coordinate (which must lie on the
|
||||
/// plane), continuing for `len_y`x`len_x` cells.
|
||||
///
|
||||
/// Use `None` for either or both of `len_y` and `len_x` in order to
|
||||
/// go through the boundary of the plane in that axis.
|
||||
///
|
||||
/// Only glyphs from the specified blitset may be present.
|
||||
///
|
||||
/// *C style function: [ncplane_rgba()][crate::ncplane_rgba].*
|
||||
pub fn rgba(
|
||||
&mut self,
|
||||
blitter: NcBlitter,
|
||||
beg_y: NcDim,
|
||||
beg_x: NcDim,
|
||||
len_y: Option<NcDim>,
|
||||
len_x: Option<NcDim>,
|
||||
) -> NcResult<&mut [u32]> {
|
||||
// converts length arguments to expected format
|
||||
let len_y2: i32;
|
||||
let len_x2: i32;
|
||||
if let Some(y) = len_y {
|
||||
len_y2 = y as i32;
|
||||
} else {
|
||||
len_y2 = -1;
|
||||
}
|
||||
if let Some(x) = len_x {
|
||||
len_x2 = x as i32;
|
||||
} else {
|
||||
len_x2 = -1;
|
||||
}
|
||||
|
||||
let res_array = unsafe {
|
||||
crate::ncplane_rgba(self, blitter, beg_y as i32, beg_x as i32, len_y2, len_x2)
|
||||
};
|
||||
|
||||
// calculates array length
|
||||
let array_len_y;
|
||||
let array_len_x;
|
||||
if len_y2 == -1 {
|
||||
array_len_y = self.dim_y() - beg_y;
|
||||
} else {
|
||||
array_len_y = len_y2 as u32;
|
||||
}
|
||||
if len_x2 == -1 {
|
||||
array_len_x = self.dim_x() - beg_x;
|
||||
} else {
|
||||
array_len_x = len_x2 as u32;
|
||||
}
|
||||
let array_len = (array_len_y * array_len_x) as usize;
|
||||
|
||||
// returns the result
|
||||
if res_array != null_mut() {
|
||||
return Ok(unsafe { from_raw_parts_mut(res_array, array_len) });
|
||||
} else {
|
||||
Err(NcError::with_msg(NCRESULT_ERR, "NcPlane.rgba()"))
|
||||
}
|
||||
}
|
||||
|
||||
/// Realigns this NcPlane against its parent, using the alignment specified
|
||||
/// at creation time.
|
||||
///
|
||||
|
@ -5,7 +5,7 @@
|
||||
// (X) wont: 6
|
||||
// (D) depr: 4
|
||||
// (#) test: 13
|
||||
// (W) wrap: 79 of 98
|
||||
// (W) wrap: 81 of 98
|
||||
// -------------------------------------------
|
||||
//W ncpile_bottom
|
||||
//W# ncpile_create
|
||||
@ -74,9 +74,9 @@
|
||||
//W ncplane_reparent_family
|
||||
//W# ncplane_resize
|
||||
//W ncplane_resizecb
|
||||
// ncplane_resize_maximize
|
||||
//W ncplane_resize_maximize
|
||||
//W ncplane_resize_realign
|
||||
// ncplane_rgba
|
||||
//W ncplane_rgba
|
||||
//W ncplane_rotate_ccw
|
||||
//W ncplane_rotate_cw
|
||||
//W ncplane_set_base
|
||||
|
Loading…
Reference in New Issue
Block a user