nctree: pass distance to cbfxn #1164

pull/1372/head
nick black 4 years ago committed by Nick Black
parent fe8abbecc5
commit 4ea2b67061

@ -104,6 +104,7 @@ nctree_inner_create(ncplane* n, const struct nctree_options* opts){
free(ret);
return NULL;
}
ncplane_set_base(n, " ", 0, opts->bchannels);
ret->items.ncp = n;
ret->items.curry = NULL;
nctree_redraw(ret);
@ -250,7 +251,7 @@ tree_path_length(const unsigned* path){
// *|frontierb|. otherwise, draw up from *|frontiert|.
static int
draw_tree_item(nctree* n, nctree_int_item* nii, const unsigned* path,
int* frontiert, int* frontierb){
int* frontiert, int* frontierb, int distance){
//fprintf(stderr, "drawing item ft: %d fb: %d %p\n", *frontiert, *frontierb, nii->ncp);
if(!nii->ncp){
const int startx = (tree_path_length(path) - 1) * n->indentcols;
@ -283,7 +284,7 @@ draw_tree_item(nctree* n, nctree_int_item* nii, const unsigned* path,
}else{
// FIXME move and possibly enlarge nii->ncp
}
int ret = n->cbfxn(nii->ncp, nii->curry, 0); // FIXME third param
int ret = n->cbfxn(nii->ncp, nii->curry, distance);
if(ret < 0){
return -1;
}
@ -309,7 +310,8 @@ nctree_inner_redraw(nctree* n, unsigned* tmppath){
int frontiert = n->activerow;
int frontierb = n->activerow;
nctree_int_item* nii = n->curitem;
if(draw_tree_item(n, nii, tmppath, &frontiert, &frontierb)){
int distance = 0;
if(draw_tree_item(n, nii, tmppath, &frontiert, &frontierb, distance)){
return -1;
}
nctree_int_item* tmpnii;
@ -319,7 +321,8 @@ nctree_inner_redraw(nctree* n, unsigned* tmppath){
break;
}
nii = tmpnii;
if(draw_tree_item(n, nii, tmppath, &frontiert, &frontierb)){
--distance;
if(draw_tree_item(n, nii, tmppath, &frontiert, &frontierb, distance)){
return -1;
}
}
@ -327,6 +330,7 @@ nctree_inner_redraw(nctree* n, unsigned* tmppath){
// move items up if there is a gap at the top FIXME
if(frontiert >= 0){
}
distance = 0;
n->activerow = ncplane_y(n->curitem->ncp);
// draw items below the current one FIME
while(frontierb < ncplane_dim_y(n->items.ncp)){
@ -334,7 +338,8 @@ nctree_inner_redraw(nctree* n, unsigned* tmppath){
break;
}
nii = tmpnii;
if(draw_tree_item(n, nii, tmppath, &frontiert, &frontierb)){
++distance;
if(draw_tree_item(n, nii, tmppath, &frontiert, &frontierb, distance)){
return -1;
}
}

@ -366,6 +366,15 @@ callback(struct ncplane* ncp, void* curry, int dizzy){
}
}
ncplane_cursor_move_yx(ncp, 0, 0);
uint64_t channels = 0;
if(dizzy == 0){
channels_set_bg_rgb(&channels, 0x006060);
}else if(dizzy < 0){
channels_set_bg_rgb8(&channels, 0, 60 + dizzy, 0);
}else if(dizzy > 0){
channels_set_bg_rgb8(&channels, 0, 60 - dizzy, 0);
}
ncplane_set_base(ncp, " ", 0, channels);
ncplane_putstr(ncp, curry);
return 0;
}
@ -394,6 +403,7 @@ create_tree(struct notcurses* nc){
.count = 1,
.nctreecb = callback,
.indentcols = 2,
.bchannels = 0,
.flags = 0,
};
struct nctree* tree = nctree_create(notcurses_stdplane(nc), &topts);

Loading…
Cancel
Save