|
|
@ -3,7 +3,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
static const uint32_t LOWCOLOR = 0x004080;
|
|
|
|
static const uint32_t LOWCOLOR = 0x004080;
|
|
|
|
static const uint32_t HICOLOR = 0xddffdd;
|
|
|
|
static const uint32_t HICOLOR = 0xddffdd;
|
|
|
|
static const uint32_t NANOSEC = 1000000000ull / 60; // 60 cps
|
|
|
|
static const uint32_t GIG = 1000000000ull;
|
|
|
|
|
|
|
|
static const uint32_t NANOSEC = GIG / 60; // 60 cps
|
|
|
|
|
|
|
|
static const int FRAMERATIO = 2; // display 1 of every FRAMERATIO frames
|
|
|
|
#define MARGIN 2
|
|
|
|
#define MARGIN 2
|
|
|
|
|
|
|
|
|
|
|
|
static struct notcurses*
|
|
|
|
static struct notcurses*
|
|
|
@ -60,6 +62,34 @@ colorize(struct ncplane* n){
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// whenever the text indicates a lengthy delay, keep the frame rolling...
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
|
|
|
longdelay(struct notcurses* nc, struct ncvisual* ncv, struct ncvisual_options* vopts){
|
|
|
|
|
|
|
|
struct timespec now;
|
|
|
|
|
|
|
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
|
|
|
|
|
|
|
uint64_t nowns, deadlinens;
|
|
|
|
|
|
|
|
nowns = now.tv_sec * GIG + now.tv_nsec;
|
|
|
|
|
|
|
|
deadlinens = nowns + 5ull * GIG;
|
|
|
|
|
|
|
|
do{
|
|
|
|
|
|
|
|
if(ncv){
|
|
|
|
|
|
|
|
for(int i = 0 ; i < FRAMERATIO ; ++i){
|
|
|
|
|
|
|
|
ncvisual_decode(ncv);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if(ncvisual_render(nc, ncv, vopts) == NULL){
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if(notcurses_render(nc)){
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
// FIXME clock_nanosleep
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
|
|
|
|
|
|
|
nowns = now.tv_sec * GIG + now.tv_nsec;
|
|
|
|
|
|
|
|
}while(nowns < deadlinens);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
static int
|
|
|
|
textplay(struct notcurses* nc, struct ncplane* tplane, struct ncvisual* ncv){
|
|
|
|
textplay(struct notcurses* nc, struct ncplane* tplane, struct ncvisual* ncv){
|
|
|
|
char* buf = NULL;
|
|
|
|
char* buf = NULL;
|
|
|
@ -110,10 +140,15 @@ textplay(struct notcurses* nc, struct ncplane* tplane, struct ncvisual* ncv){
|
|
|
|
if(!ncv){
|
|
|
|
if(!ncv){
|
|
|
|
clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL);
|
|
|
|
clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL);
|
|
|
|
}else{
|
|
|
|
}else{
|
|
|
|
for(int i = 0 ; i < 2 ; ++i){
|
|
|
|
for(int i = 0 ; i < FRAMERATIO ; ++i){
|
|
|
|
ncvisual_decode(ncv);
|
|
|
|
ncvisual_decode(ncv);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(wc == L'…'){
|
|
|
|
|
|
|
|
if(longdelay(nc, ncv, &vopts)){
|
|
|
|
|
|
|
|
goto err;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ncplane_destroy(vopts.n);
|
|
|
|
ncplane_destroy(vopts.n);
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
@ -131,14 +166,14 @@ textplane(struct notcurses* nc){
|
|
|
|
struct ncplane_options nopts = {
|
|
|
|
struct ncplane_options nopts = {
|
|
|
|
.y = MARGIN * 2 + 2,
|
|
|
|
.y = MARGIN * 2 + 2,
|
|
|
|
.x = MARGIN * 4 + 2,
|
|
|
|
.x = MARGIN * 4 + 2,
|
|
|
|
.rows = dimy - MARGIN * 4,
|
|
|
|
.rows = dimy - MARGIN * 4 + 1,
|
|
|
|
.cols = dimx - MARGIN * 8,
|
|
|
|
.cols = dimx - MARGIN * 8,
|
|
|
|
.name = "text",
|
|
|
|
.name = "text",
|
|
|
|
};
|
|
|
|
};
|
|
|
|
struct ncplane* n = ncplane_create(stdn, &nopts);
|
|
|
|
struct ncplane* n = ncplane_create(stdn, &nopts);
|
|
|
|
uint64_t channels = 0;
|
|
|
|
uint64_t channels = CHANNELS_RGB_INITIALIZER(0, 0, 0, 0x22, 0x22, 0x22);
|
|
|
|
ncchannels_set_fg_alpha(&channels, CELL_ALPHA_TRANSPARENT);
|
|
|
|
/*ncchannels_set_fg_alpha(&channels, CELL_ALPHA_TRANSPARENT);
|
|
|
|
ncchannels_set_bg_alpha(&channels, CELL_ALPHA_TRANSPARENT);
|
|
|
|
ncchannels_set_bg_alpha(&channels, CELL_ALPHA_TRANSPARENT);*/
|
|
|
|
if(n){
|
|
|
|
if(n){
|
|
|
|
ncplane_set_base(n, "", 0, channels);
|
|
|
|
ncplane_set_base(n, "", 0, channels);
|
|
|
|
}
|
|
|
|
}
|
|
|
|