mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-09 09:09:03 -04:00
Add missing channel_set_palindex()
Implement channels_set_fg_palindex() and channels_set_bg_palindex() in terms of channel_set_palindex(). Add missing entries to notcurses_channels.3 man page. Use uint32_t in place of unsigned when dealing with channels in notcurses.h.
This commit is contained in:
parent
46f17f4794
commit
2491b693ba
1
NEWS.md
1
NEWS.md
@ -3,6 +3,7 @@ rearrangements of Notcurses.
|
||||
|
||||
* 2.1.8 (not yet released):
|
||||
* The `notcurses-tetris` binary has been renamed `nctetris`.
|
||||
* The new function `channel_set_palindex()` has been added.
|
||||
|
||||
* 2.1.7 (2021-01-21):
|
||||
* Notcurses has been split into two libraries, `notcurses-core` and
|
||||
|
@ -27,11 +27,13 @@ notcurses_channels - operations on notcurses channels
|
||||
|
||||
**uint32_t channel_rgb8(uint32_t ***channel***, uint32_t* restrict ***r***, uint32_t* restrict ***g***, uint32_t* restrict ***b***);**
|
||||
|
||||
**unsigned channel_palindex(uint32_t ***channel***);**
|
||||
|
||||
**int channel_set_rgb8(uint32_t* ***channel***, int ***r***, int ***g***, int ***b***);**
|
||||
|
||||
**int channel_set(uint32_t* ***channel***, uint32_t rg***b***);**
|
||||
**int channel_set(uint32_t* ***channel***, uint32_t ***rgb***);**
|
||||
|
||||
**unsigned channel_palindex(uint32_t ***channel***);**
|
||||
|
||||
**int channel_set_palindex(uint32_t* ***channel***, int ***idx***);**
|
||||
|
||||
**uint32_t channel_alpha(uint32_t ***channel***);**
|
||||
|
||||
@ -53,14 +55,26 @@ notcurses_channels - operations on notcurses channels
|
||||
|
||||
**unsigned channels_bg_rgb(uint64_t ***channels***);**
|
||||
|
||||
**int channels_set_fg_rgb(uint64_t* ***channels***, unsigned ***rgb***);**
|
||||
|
||||
**int channels_set_bg_rgb(uint64_t* ***channels***, unsigned ***rgb***);**
|
||||
|
||||
**unsigned channels_fg_alpha(uint64_t ***channels***);**
|
||||
|
||||
**unsigned channels_bg_alpha(uint64_t ***channels***);**
|
||||
|
||||
**int channels_set_fg_alpha(uint64_t* ***channels***, int ***alpha***);**
|
||||
|
||||
**int channels_set_bg_alpha(uint64_t* ***channels***, int ***alpha***);**
|
||||
|
||||
**unsigned channels_fg_palindex(uint64_t ***channels***);**
|
||||
|
||||
**unsigned channels_bg_palindex(uint64_t ***channels***);**
|
||||
|
||||
**int channels_set_fg_palindex(uint64_t* ***channels***, int ***idx***);**
|
||||
|
||||
**int channels_set_bg_palindex(uint64_t* ***channels***, int ***idx***);**
|
||||
|
||||
**unsigned channels_fg_rgb8(uint64_t ***channels***, unsigned* ***r***, unsigned* ***g***, unsigned* ***b***);**
|
||||
|
||||
**unsigned channels_bg_rgb8(uint64_t ***channels***, unsigned* ***r***, unsigned* ***g***, unsigned* ***b***);**
|
||||
@ -69,14 +83,6 @@ notcurses_channels - operations on notcurses channels
|
||||
|
||||
**int channels_set_bg_rgb8(uint64_t* ***channels***, int ***r***, int ***g***, int ***b***);**
|
||||
|
||||
**int channels_set_fg_rgb(uint64_t* ***channels***, unsigned ***rgb***);**
|
||||
|
||||
**int channels_set_bg_rgb(uint64_t* ***channels***, unsigned ***rgb***);**
|
||||
|
||||
**int channels_set_fg_alpha(uint64_t* ***channels***, int ***alpha***);**
|
||||
|
||||
**int channels_set_bg_alpha(uint64_t* ***channels***, int ***alpha***);**
|
||||
|
||||
**bool channels_fg_default_p(uint64_t ***channels***);**
|
||||
|
||||
**bool channels_bg_default_p(uint64_t ***channels***);**
|
||||
|
@ -245,6 +245,19 @@ channel_set_alpha(unsigned* channel, unsigned alpha){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
channel_set_palindex(uint32_t* channel, int idx){
|
||||
if(idx < 0 || idx >= NCPALETTESIZE){
|
||||
return -1;
|
||||
}
|
||||
*channel |= CELL_BGDEFAULT_MASK;
|
||||
*channel |= CELL_BG_PALETTE;
|
||||
channel_set_alpha(channel, CELL_ALPHA_OPAQUE);
|
||||
*channel &= 0xff000000ull;
|
||||
*channel |= idx;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Is this channel using the "default color" rather than RGB/palette-indexed?
|
||||
static inline bool
|
||||
channel_default_p(unsigned channel){
|
||||
@ -345,7 +358,7 @@ channels_bg_rgb8(uint64_t channels, unsigned* r, unsigned* g, unsigned* b){
|
||||
// 'channels' variable, and mark it as not using the default color.
|
||||
static inline int
|
||||
channels_set_fg_rgb8(uint64_t* channels, int r, int g, int b){
|
||||
unsigned channel = channels_fchannel(*channels);
|
||||
uint32_t channel = channels_fchannel(*channels);
|
||||
if(channel_set_rgb8(&channel, r, g, b) < 0){
|
||||
return -1;
|
||||
}
|
||||
@ -356,7 +369,7 @@ channels_set_fg_rgb8(uint64_t* channels, int r, int g, int b){
|
||||
// Same, but clips to [0..255].
|
||||
static inline void
|
||||
channels_set_fg_rgb8_clipped(uint64_t* channels, int r, int g, int b){
|
||||
unsigned channel = channels_fchannel(*channels);
|
||||
uint32_t channel = channels_fchannel(*channels);
|
||||
channel_set_rgb8_clipped(&channel, r, g, b);
|
||||
*channels = ((uint64_t)channel << 32llu) | (*channels & 0xffffffffllu);
|
||||
}
|
||||
@ -364,7 +377,7 @@ channels_set_fg_rgb8_clipped(uint64_t* channels, int r, int g, int b){
|
||||
// Set the 2-bit alpha component of the foreground channel.
|
||||
static inline int
|
||||
channels_set_fg_alpha(uint64_t* channels, unsigned alpha){
|
||||
unsigned channel = channels_fchannel(*channels);
|
||||
uint32_t channel = channels_fchannel(*channels);
|
||||
if(channel_set_alpha(&channel, alpha) < 0){
|
||||
return -1;
|
||||
}
|
||||
@ -374,21 +387,18 @@ channels_set_fg_alpha(uint64_t* channels, unsigned alpha){
|
||||
|
||||
static inline int
|
||||
channels_set_fg_palindex(uint64_t* channels, int idx){
|
||||
if(idx < 0 || idx >= NCPALETTESIZE){
|
||||
uint32_t channel = channels_fchannel(*channels);
|
||||
if(channel_set_palindex(&channel, idx) < 0){
|
||||
return -1;
|
||||
}
|
||||
*channels |= CELL_FGDEFAULT_MASK;
|
||||
*channels |= CELL_FG_PALETTE;
|
||||
channels_set_fg_alpha(channels, CELL_ALPHA_OPAQUE);
|
||||
*channels &= 0xff000000ffffffffull;
|
||||
*channels |= ((uint64_t)idx << 32u);
|
||||
*channels = ((uint64_t)channel << 32llu) | (*channels & 0xffffffffllu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Same, but set an assembled 24 bit channel at once.
|
||||
static inline int
|
||||
channels_set_fg_rgb(uint64_t* channels, unsigned rgb){
|
||||
unsigned channel = channels_fchannel(*channels);
|
||||
uint32_t channel = channels_fchannel(*channels);
|
||||
if(channel_set(&channel, rgb) < 0){
|
||||
return -1;
|
||||
}
|
||||
@ -400,7 +410,7 @@ channels_set_fg_rgb(uint64_t* channels, unsigned rgb){
|
||||
// 'channels' variable, and mark it as not using the default color.
|
||||
static inline int
|
||||
channels_set_bg_rgb8(uint64_t* channels, int r, int g, int b){
|
||||
unsigned channel = channels_bchannel(*channels);
|
||||
uint32_t channel = channels_bchannel(*channels);
|
||||
if(channel_set_rgb8(&channel, r, g, b) < 0){
|
||||
return -1;
|
||||
}
|
||||
@ -411,7 +421,7 @@ channels_set_bg_rgb8(uint64_t* channels, int r, int g, int b){
|
||||
// Same, but clips to [0..255].
|
||||
static inline void
|
||||
channels_set_bg_rgb8_clipped(uint64_t* channels, int r, int g, int b){
|
||||
unsigned channel = channels_bchannel(*channels);
|
||||
uint32_t channel = channels_bchannel(*channels);
|
||||
channel_set_rgb8_clipped(&channel, r, g, b);
|
||||
channels_set_bchannel(channels, channel);
|
||||
}
|
||||
@ -422,7 +432,7 @@ channels_set_bg_alpha(uint64_t* channels, unsigned alpha){
|
||||
if(alpha == CELL_ALPHA_HIGHCONTRAST){ // forbidden for background alpha
|
||||
return -1;
|
||||
}
|
||||
unsigned channel = channels_bchannel(*channels);
|
||||
uint32_t channel = channels_bchannel(*channels);
|
||||
if(channel_set_alpha(&channel, alpha) < 0){
|
||||
return -1;
|
||||
}
|
||||
@ -434,21 +444,18 @@ channels_set_bg_alpha(uint64_t* channels, unsigned alpha){
|
||||
// bit, set it background-opaque, and clear the background default color bit.
|
||||
static inline int
|
||||
channels_set_bg_palindex(uint64_t* channels, int idx){
|
||||
if(idx < 0 || idx >= NCPALETTESIZE){
|
||||
uint32_t channel = channels_bchannel(*channels);
|
||||
if(channel_set_palindex(&channel, idx) < 0){
|
||||
return -1;
|
||||
}
|
||||
*channels |= CELL_BGDEFAULT_MASK;
|
||||
*channels |= CELL_BG_PALETTE;
|
||||
channels_set_bg_alpha(channels, CELL_ALPHA_OPAQUE);
|
||||
*channels &= 0xffffffffff000000;
|
||||
*channels |= idx;
|
||||
channels_set_bchannel(channels, channel);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Same, but set an assembled 24 bit channel at once.
|
||||
static inline int
|
||||
channels_set_bg_rgb(uint64_t* channels, unsigned rgb){
|
||||
unsigned channel = channels_bchannel(*channels);
|
||||
uint32_t channel = channels_bchannel(*channels);
|
||||
if(channel_set(&channel, rgb) < 0){
|
||||
return -1;
|
||||
}
|
||||
@ -485,7 +492,7 @@ channels_bg_palindex_p(uint64_t channels){
|
||||
// Mark the foreground channel as using its default color.
|
||||
static inline uint64_t
|
||||
channels_set_fg_default(uint64_t* channels){
|
||||
unsigned channel = channels_fchannel(*channels);
|
||||
uint32_t channel = channels_fchannel(*channels);
|
||||
channel_set_default(&channel);
|
||||
*channels = ((uint64_t)channel << 32llu) | (*channels & 0xffffffffllu);
|
||||
return *channels;
|
||||
@ -494,7 +501,7 @@ channels_set_fg_default(uint64_t* channels){
|
||||
// Mark the background channel as using its default color.
|
||||
static inline uint64_t
|
||||
channels_set_bg_default(uint64_t* channels){
|
||||
unsigned channel = channels_bchannel(*channels);
|
||||
uint32_t channel = channels_bchannel(*channels);
|
||||
channel_set_default(&channel);
|
||||
channels_set_bchannel(channels, channel);
|
||||
return *channels;
|
||||
|
Loading…
x
Reference in New Issue
Block a user