mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-09 17:19:03 -04:00
implement child plane scrolling #1883
This commit is contained in:
parent
8db6e3abaa
commit
1f254c47b2
@ -383,8 +383,9 @@ other rows are moved up, the last row is cleared, and output begins at the
|
|||||||
beginning of the last row. This does not take place until output is generated
|
beginning of the last row. This does not take place until output is generated
|
||||||
(i.e. it is possible to fill a plane when scrolling is enabled).
|
(i.e. it is possible to fill a plane when scrolling is enabled).
|
||||||
|
|
||||||
By default, planes bound to a scrolling plane will scroll along with it. This
|
By default, planes bound to a scrolling plane will scroll along with it, if
|
||||||
can be disabled with the **NCPLANE_OPTION_FIXED** flag.
|
they intersect the plane. This can be disabled with the
|
||||||
|
**NCPLANE_OPTION_FIXED** flag.
|
||||||
|
|
||||||
## Bitmaps
|
## Bitmaps
|
||||||
|
|
||||||
|
@ -100,6 +100,7 @@ typedef struct ncplane {
|
|||||||
uint16_t stylemask; // same deal as in a cell
|
uint16_t stylemask; // same deal as in a cell
|
||||||
int margin_b, margin_r;// bottom and right margins, stored for resize
|
int margin_b, margin_r;// bottom and right margins, stored for resize
|
||||||
bool scrolling; // is scrolling enabled? always disabled by default
|
bool scrolling; // is scrolling enabled? always disabled by default
|
||||||
|
bool fixedbound; // are we fixed relative to the parent's scrolling?
|
||||||
} ncplane;
|
} ncplane;
|
||||||
|
|
||||||
// current presentation state of the terminal. it is carried across render
|
// current presentation state of the terminal. it is carried across render
|
||||||
|
@ -417,6 +417,7 @@ ncplane* ncplane_new_internal(notcurses* nc, ncplane* n,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
p->scrolling = false;
|
p->scrolling = false;
|
||||||
|
p->fixedbound = nopts->flags & NCPLANE_OPTION_FIXED;
|
||||||
if(nopts->flags & NCPLANE_OPTION_MARGINALIZED){
|
if(nopts->flags & NCPLANE_OPTION_MARGINALIZED){
|
||||||
p->margin_b = nopts->margin_b;
|
p->margin_b = nopts->margin_b;
|
||||||
p->margin_r = nopts->margin_r;
|
p->margin_r = nopts->margin_r;
|
||||||
@ -1529,7 +1530,8 @@ nccell_obliterate(ncplane* n, nccell* c){
|
|||||||
nccell_init(c);
|
nccell_init(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
// increment y by 1 and rotate the framebuffer up one line. x moves to 0.
|
// increment y by 1 and rotate the framebuffer up one line. x moves to 0. any
|
||||||
|
// non-fixed bound planes move up 1 line if they intersect the plane.
|
||||||
void scroll_down(ncplane* n){
|
void scroll_down(ncplane* n){
|
||||||
//fprintf(stderr, "pre-scroll: %d/%d %d/%d log: %d scrolling: %u\n", n->y, n->x, n->leny, n->lenx, n->logrow, n->scrolling);
|
//fprintf(stderr, "pre-scroll: %d/%d %d/%d log: %d scrolling: %u\n", n->y, n->x, n->leny, n->lenx, n->logrow, n->scrolling);
|
||||||
n->x = 0;
|
n->x = 0;
|
||||||
@ -1546,6 +1548,12 @@ void scroll_down(ncplane* n){
|
|||||||
}else{
|
}else{
|
||||||
++n->y;
|
++n->y;
|
||||||
}
|
}
|
||||||
|
for(struct ncplane* c = n->blist ; c ; c = c->bnext){
|
||||||
|
if(!c->fixedbound){
|
||||||
|
// FIXME ought only be performed if we intersect the parent plane
|
||||||
|
ncplane_moverel(c, -1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int nccell_width(const ncplane* n __attribute__ ((unused)), const nccell* c){
|
int nccell_width(const ncplane* n __attribute__ ((unused)), const nccell* c){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user