add ncchannel_rgb(), use it in channels_blend()

pull/2485/head
nick black 2 years ago
parent 814432d65d
commit 9c3adaaea3
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -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…
Cancel
Save