From 962ad874e4e81c8fab2974e23fd4d398a6cf522d Mon Sep 17 00:00:00 2001 From: nick black Date: Wed, 24 Feb 2021 00:23:38 -0500 Subject: [PATCH] nctree PoC: set backgrounds relative to active #1164 --- src/lib/tree.c | 29 ++++++++++++++++++++++++++--- src/poc/tree.c | 15 ++++++++++++--- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/lib/tree.c b/src/lib/tree.c index 137327223..b25dfa137 100644 --- a/src/lib/tree.c +++ b/src/lib/tree.c @@ -196,7 +196,18 @@ nctree_prev_internal(nctree* n, unsigned* newpath){ } void* nctree_prev(nctree* n){ - n->curitem = nctree_prev_internal(n, n->currentpath); + int rows = 0; + if(n->curitem->ncp){ + rows = ncplane_dim_y(n->curitem->ncp); + } + nctree_int_item* tmp = nctree_prev_internal(n, n->currentpath); + if(tmp != n->curitem){ + n->curitem = tmp; + n->activerow -= rows; + if(n->activerow < 0){ + n->activerow = 0; + } + } return n->curitem->curry; } @@ -232,8 +243,18 @@ nctree_next_internal(nctree* n, unsigned* newpath){ } void* nctree_next(nctree* n){ - // FIXME update n->activerow, redraw - n->curitem = nctree_next_internal(n, n->currentpath); + int rows = 0; + if(n->curitem->ncp){ + rows = ncplane_dim_y(n->curitem->ncp); + } + nctree_int_item* tmp = nctree_next_internal(n, n->currentpath); + if(tmp != n->curitem){ + n->curitem = tmp; + n->activerow += rows; + if(n->activerow >= ncplane_dim_y(n->items.ncp)){ + n->activerow = ncplane_dim_y(n->items.ncp) - 1; + } + } return n->curitem->curry; } @@ -332,7 +353,9 @@ nctree_inner_redraw(nctree* n, unsigned* tmppath){ } distance = 0; n->activerow = ncplane_y(n->curitem->ncp); + nii = n->curitem; // draw items below the current one FIME + memcpy(tmppath, n->currentpath, sizeof(*tmppath) * (n->maxdepth + 1)); while(frontierb < ncplane_dim_y(n->items.ncp)){ if((tmpnii = nctree_next_internal(n, tmppath)) == nii){ break; diff --git a/src/poc/tree.c b/src/poc/tree.c index 0a3dab6ee..73ed5bcd3 100644 --- a/src/poc/tree.c +++ b/src/poc/tree.c @@ -369,13 +369,19 @@ callback(struct ncplane* ncp, void* curry, int dizzy){ uint64_t channels = 0; if(dizzy == 0){ channels_set_bg_rgb(&channels, 0x006060); + ncplane_set_fg_rgb(ncp, 0xffffff); }else if(dizzy < 0){ - channels_set_bg_rgb8(&channels, 0, 60 + dizzy, 0); + float f = -dizzy / 80.0; + channels_set_bg_rgb8(&channels, 0, 60 - 60 * f, 0); + ncplane_set_fg_rgb(ncp, 0xbbbbbb); }else if(dizzy > 0){ - channels_set_bg_rgb8(&channels, 0, 60 - dizzy, 0); + float f = dizzy / 80.0; + channels_set_bg_rgb8(&channels, 0, 60 - 60 * f, 0); + ncplane_set_fg_rgb(ncp, 0xbbbbbb); } - ncplane_set_base(ncp, " ", 0, channels); + ncplane_set_base(ncp, "", 0, channels); ncplane_putstr(ncp, curry); +fprintf(stderr, "DIZZY (%s) %d\n", (const char*)curry, dizzy); return 0; } @@ -387,6 +393,9 @@ tree_ui(struct notcurses* nc, struct nctree* tree){ if(nctree_redraw(tree)){ return -1; } + if(notcurses_render(nc)){ + return -1; + } continue; } if(ni.id == 'q'){