enable blitterstacking unit test -- fails for now

pull/1328/head
nick black 4 years ago committed by Nick Black
parent 0f5c76d070
commit 0446dc0f6d

@ -275,24 +275,6 @@ paint(const ncplane* p, struct crender* rvec, int dstleny, int dstlenx,
if(cell_wide_right_p(targc)){
continue;
}
// Background color takes effect independently of whether we have a
// glyph. If we've already locked in the background, it has no effect.
// If it's transparent, it has no effect. Otherwise, update the
// background channel and balpha.
// Evaluate the background first, in case we have HIGHCONTRAST fg text.
if(cell_bg_alpha(targc) > CELL_ALPHA_OPAQUE){
const nccell* vis = &p->fb[nfbcellidx(p, y, x)];
if(cell_bg_default_p(vis)){
vis = &p->basecell;
}
if(cell_bg_palindex_p(vis)){
if(cell_bg_alpha(targc) == CELL_ALPHA_TRANSPARENT){
cell_set_bg_palindex(targc, cell_bg_palindex(vis));
}
}else{
cell_blend_bchannel(targc, cell_bchannel(vis), &crender->bgblends);
}
}
if(cell_fg_alpha(targc) > CELL_ALPHA_OPAQUE){
const nccell* vis = &p->fb[nfbcellidx(p, y, x)];
@ -319,6 +301,39 @@ paint(const ncplane* p, struct crender* rvec, int dstleny, int dstlenx,
}
}
// Background color takes effect independently of whether we have a
// glyph. If we've already locked in the background, it has no effect.
// If it's transparent, it has no effect. Otherwise, update the
// background channel and balpha.
// Evaluate the background first, in case we have HIGHCONTRAST fg text.
if(cell_bg_alpha(targc) > CELL_ALPHA_OPAQUE){
const nccell* vis = &p->fb[nfbcellidx(p, y, x)];
// FIXME need check maps to determine whether inversion is appropriate
if(!crender->blitterstacked || !cell_blitted_p(vis)){
if(cell_bg_default_p(vis)){
vis = &p->basecell;
}
if(cell_bg_palindex_p(vis)){
if(cell_bg_alpha(targc) == CELL_ALPHA_TRANSPARENT){
cell_set_bg_palindex(targc, cell_bg_palindex(vis));
}
}else{
cell_blend_bchannel(targc, cell_bchannel(vis), &crender->bgblends);
}
}else{ // use the local foreground; we're stacking blittings
if(cell_fg_default_p(vis)){
vis = &p->basecell;
}
if(cell_fg_palindex_p(vis)){
if(cell_bg_alpha(targc) == CELL_ALPHA_TRANSPARENT){
cell_set_bg_palindex(targc, cell_fg_palindex(vis));
}
}else{
cell_blend_bchannel(targc, cell_fchannel(vis), &crender->bgblends);
}
}
}
// if we never loaded any content into the cell (or obliterated it by
// writing in a zero), use the plane's base cell.
// if we have no character in this cell, we continue to look for a

@ -35,16 +35,16 @@ TEST_CASE("Stacking") {
REQUIRE(nullptr != top);
CHECK(0 == ncplane_set_fg_rgb(top, 0xffffff));
CHECK(0 == ncplane_set_fg_rgb(n_, 0xffffff));
CHECK(1 == ncplane_putwc(top, L'\u2580'));
CHECK(1 == ncplane_putwc(n_, L'\u2584'));
CHECK(1 == ncplane_putwc(top, L'\u2580')); // upper half block
CHECK(1 == ncplane_putwc(n_, L'\u2584')); // lower half block
CHECK(0 == notcurses_render(nc_));
uint64_t channels;
auto egc = notcurses_at_yx(nc_, 0, 0, nullptr, &channels);
REQUIRE(nullptr != egc);
// ought yield space with white background
WARN(0 == strcmp(" ", egc));
WARN(0xffffff == channels_fg_rgb(channels));
WARN(0xffffff == channels_bg_rgb(channels));
CHECK(0 == strcmp(" ", egc));
CHECK(0xffffff == channels_fg_rgb(channels));
CHECK(0xffffff == channels_bg_rgb(channels));
ncplane_destroy(top);
}

Loading…
Cancel
Save