mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-09 09:09:03 -04:00
add ncchannel_rgb(), use it in channels_blend()
This commit is contained in:
parent
814432d65d
commit
9c3adaaea3
22
USAGE.md
22
USAGE.md
@ -3174,14 +3174,32 @@ ncchannels_bg_alpha(uint64_t channels){
|
||||
return ncchannel_alpha(channels_bchannel(channels));
|
||||
}
|
||||
|
||||
// Extract the 24-bit RGB value from a 32-bit channel.
|
||||
// Only valid if ncchannel_rgb_p() would return true for the channel.
|
||||
static inline uint32_t
|
||||
ncchannel_rgb(uint32_t channel){
|
||||
return channel & NC_BG_RGB_MASK;
|
||||
}
|
||||
|
||||
// Extract the three 8-bit R/G/B components from a 32-bit channel.
|
||||
// Only valid if ncchannel_rgb_p() would return true for the channel.
|
||||
static inline uint32_t
|
||||
ncchannel_rgb8(uint32_t channel, unsigned* restrict r, unsigned* restrict g,
|
||||
unsigned* restrict b){
|
||||
*r = ncchannel_r(channel);
|
||||
*g = ncchannel_g(channel);
|
||||
*b = ncchannel_b(channel);
|
||||
return channel;
|
||||
}
|
||||
|
||||
// Extract 24 bits of foreground RGB from 'channels', split into subchannels.
|
||||
static inline unsigned
|
||||
static inline uint32_t
|
||||
ncchannels_fg_rgb8(uint64_t channels, unsigned* r, unsigned* g, unsigned* b){
|
||||
return ncchannel_rgb8(channels_fchannel(channels), r, g, b);
|
||||
}
|
||||
|
||||
// Extract 24 bits of background RGB from 'channels', split into subchannels.
|
||||
static inline unsigned
|
||||
static inline uint32_t
|
||||
ncchannels_bg_rgb8(uint64_t channels, unsigned* r, unsigned* g, unsigned* b){
|
||||
return ncchannel_rgb8(channels_bchannel(channels), r, g, b);
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ notcurses_channels - operations on notcurses channels
|
||||
|
||||
**uint32_t ncchannel_b(uint32_t ***channel***);**
|
||||
|
||||
**uint32_t ncchannel_rgb(uint32_t ***channel***);**
|
||||
|
||||
**uint32_t ncchannel_rgb8(uint32_t ***channel***, uint32_t* restrict ***r***, uint32_t* restrict ***g***, uint32_t* restrict ***b***);**
|
||||
|
||||
**int ncchannel_set_rgb8(uint32_t* ***channel***, unsigned ***r***, unsigned ***g***, unsigned ***b***);**
|
||||
|
@ -222,9 +222,16 @@ ncchannel_b(uint32_t channel){
|
||||
return (channel & 0x0000ffu);
|
||||
}
|
||||
|
||||
// Extract the 24-bit RGB value from a 32-bit channel.
|
||||
// Only valid if ncchannel_rgb_p() would return true for the channel.
|
||||
static inline uint32_t
|
||||
ncchannel_rgb(uint32_t channel){
|
||||
return channel & NC_BG_RGB_MASK;
|
||||
}
|
||||
|
||||
// Extract the three 8-bit R/G/B components from a 32-bit channel.
|
||||
// Only valid if ncchannel_rgb_p() would return true for the channel.
|
||||
static inline unsigned
|
||||
static inline uint32_t
|
||||
ncchannel_rgb8(uint32_t channel, unsigned* RESTRICT r, unsigned* RESTRICT g,
|
||||
unsigned* RESTRICT b){
|
||||
*r = ncchannel_r(channel);
|
||||
@ -404,13 +411,13 @@ ncchannels_bg_palindex(uint64_t channels){
|
||||
// Extract 24 bits of foreground RGB from 'channels', shifted to LSBs.
|
||||
static inline uint32_t
|
||||
ncchannels_fg_rgb(uint64_t channels){
|
||||
return ncchannels_fchannel(channels) & NC_BG_RGB_MASK;
|
||||
return ncchannel_rgb(ncchannels_fchannel(channels));
|
||||
}
|
||||
|
||||
// Extract 24 bits of background RGB from 'channels', shifted to LSBs.
|
||||
static inline uint32_t
|
||||
ncchannels_bg_rgb(uint64_t channels){
|
||||
return ncchannels_bchannel(channels) & NC_BG_RGB_MASK;
|
||||
return ncchannel_rgb(ncchannels_bchannel(channels));
|
||||
}
|
||||
|
||||
// Extract 24 bits of foreground RGB from 'channels', split into subchannels.
|
||||
|
@ -1353,16 +1353,14 @@ channels_blend(notcurses* nc, unsigned c1, unsigned c2, unsigned* blends){
|
||||
}else if(c2palette){
|
||||
ncchannel_set_palindex(&c1, ncchannel_palindex(c2));
|
||||
}else{
|
||||
ncchannel_set(&c1, c2 & NC_BG_RGB_MASK);
|
||||
ncchannel_set(&c1, ncchannel_rgb(c2));
|
||||
}
|
||||
ncchannel_set_alpha(&c1, ncchannel_alpha(c2));
|
||||
}else if(!c2default && !ncchannel_default_p(c1)){
|
||||
unsigned rsum, gsum, bsum;
|
||||
if(c2palette){
|
||||
uint32_t rgb = nc->palette.chans[ncchannel_palindex(c2)];
|
||||
bsum = rgb & 0xff;
|
||||
gsum = (rgb >> 8u) & 0xff;
|
||||
rsum = (rgb >> 16u) & 0xff;
|
||||
ncchannel_rgb8(nc->palette.chans[ncchannel_palindex(c2)],
|
||||
&rsum, &gsum, &bsum);
|
||||
}else{
|
||||
ncchannel_rgb8(c2, &rsum, &gsum, &bsum);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user