introduce ncplane_resize_realign #364

This commit is contained in:
nick black 2020-09-20 10:14:05 -04:00
parent bfdf801a12
commit 2d9598b913
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC
2 changed files with 13 additions and 5 deletions

View File

@ -12,6 +12,10 @@ rearrangements of Notcurses.
* The `ncplane_options` struct includes a function pointer member,
`resizecb`. If not `NULL`, this function will be called after the parent
plane is resized. See `notcurses_plane.3` for more information.
* `ncplane_resize_realign()` has been added, suitable for use as a
`resizecb`. It realigns the plane against its parent.
* `NCCHANNEL_ALPHA_MASK` has been renamed `CHANNEL_ALPHA_MASK`, to match
the other declarations.
* 1.7.3 (2020-09-19)
* API changes pursuant to 2.0 API finalization:

View File

@ -96,7 +96,7 @@ API int notcurses_ucs32_to_utf8(const char32_t* ucs32, unsigned ucs32count,
unsigned char* resultbuf, size_t buflen);
// extract these bits to get a channel's alpha value
#define NCCHANNEL_ALPHA_MASK 0x30000000ull
#define CHANNEL_ALPHA_MASK 0x30000000ull
// background cannot be highcontrast, only foreground
#define CELL_ALPHA_HIGHCONTRAST 0x30000000ull
#define CELL_ALPHA_TRANSPARENT 0x20000000ull
@ -124,7 +124,7 @@ API int notcurses_ucs32_to_utf8(const char32_t* ucs32, unsigned ucs32count,
// palette-indexed foreground color
#define CELL_FG_PALETTE (CELL_BG_PALETTE << 32u)
// extract these bits to get the background alpha mask
#define CELL_BG_ALPHA_MASK NCCHANNEL_ALPHA_MASK
#define CELL_BG_ALPHA_MASK CHANNEL_ALPHA_MASK
// extract these bits to get the foreground alpha mask
#define CELL_FG_ALPHA_MASK (CELL_BG_ALPHA_MASK << 32u)
@ -223,16 +223,16 @@ channel_set(unsigned* channel, unsigned rgb){
// Extract the 2-bit alpha component from a 32-bit channel.
static inline unsigned
channel_alpha(unsigned channel){
return channel & NCCHANNEL_ALPHA_MASK;
return channel & CHANNEL_ALPHA_MASK;
}
// Set the 2-bit alpha component of the 32-bit channel.
static inline int
channel_set_alpha(unsigned* channel, unsigned alpha){
if(alpha & ~NCCHANNEL_ALPHA_MASK){
if(alpha & ~CHANNEL_ALPHA_MASK){
return -1;
}
*channel = alpha | (*channel & ~NCCHANNEL_ALPHA_MASK);
*channel = alpha | (*channel & ~CHANNEL_ALPHA_MASK);
if(alpha != CELL_ALPHA_OPAQUE){
*channel |= CELL_BGDEFAULT_MASK;
}
@ -1036,6 +1036,10 @@ ncplane_new(struct ncplane* n, int rows, int cols, int y, int x, void* opaque, c
return ncplane_create(n, &nopts);
}
// Suitable for use as a `resizecb`. This will realign the plane 'n' against its
// parent, using the alignment specified at ncplane_create()-time.
API int ncplane_resize_realign(struct ncplane* n);
// Plane 'n' will be unbound from its parent plane, if it is currently bound,
// and will be made a bound child of 'newparent', if 'newparent' is not NULL.
API struct ncplane* ncplane_reparent(struct ncplane* n, struct ncplane* newparent);