You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
notcurses/src/pocpp/resize.cpp

76 lines
1.7 KiB
C++

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <clocale>
#include <cassert>
#include <unistd.h>
#include <notcurses/notcurses.h>
int main(int argc, char** argv){
const char* file = "../data/changes.jpg";
setlocale(LC_ALL, "");
if(argc > 2){
fprintf(stderr, "usage: visual [ file ]\n");
return EXIT_FAILURE;
}else if(argc == 2){
file = argv[1];
}
notcurses_options opts{};
opts.flags = NCOPTION_INHIBIT_SETLOCALE
| NCOPTION_NO_ALTERNATE_SCREEN
| NCOPTION_DRAIN_INPUT;
struct notcurses* nc;
if((nc = notcurses_init(&opts, nullptr)) == nullptr){
return EXIT_FAILURE;
}
struct ncvisual_options vopts{};
bool failed = false;
unsigned dimy, dimx;
int top = 0;
int bot;
auto ncv = ncvisual_from_file(file);
if(!ncv){
goto err;
}
vopts.n = notcurses_stdplane(nc);
vopts.scaling = NCSCALE_STRETCH;
vopts.flags = NCVISUAL_OPTION_CHILDPLANE;
struct ncplane* ntarg;
if((ntarg = ncvisual_blit(nc, ncv, &vopts)) == nullptr){
goto err;
}
if(notcurses_render(nc)){
goto err;
}
ncplane_dim_yx(ntarg, &dimy, &dimx);
// start chopping off rows
bot = dimy - 1;
while(top <= bot){
// one from top
sleep(1);
if(ncplane_resize(ntarg, 1, 0, bot - top, dimx, 0, 0, bot - top, dimx)){
goto err;
}
++top;
if(notcurses_render(nc)){
goto err;
}
if(top >= bot){
break;
}
// one from bottom
if(ncplane_resize(ntarg, 0, 0, bot - top, dimx, 0, 0, bot - top, dimx)){
goto err;
}
--bot;
if(notcurses_render(nc)){
goto err;
}
}
return notcurses_stop(nc) || failed ? EXIT_FAILURE : EXIT_SUCCESS;
err:
notcurses_stop(nc);
return EXIT_FAILURE;
}