From 8dfd050ab7c98f1b8ddd8fe461e37d46ec1600af Mon Sep 17 00:00:00 2001 From: nick black Date: Wed, 27 Nov 2019 17:22:35 -0500 Subject: [PATCH] add ncplane_destroy() #26 --- CMakeLists.txt | 3 +++ src/lib/notcurses.c | 10 ++++++++++ src/view/main.cpp | 22 +++++++++++++--------- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 98d3d080e..702ccb6ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(TERMINFO REQUIRED tinfo>=6.1) pkg_check_modules(AVUTIL REQUIRED libavutil) pkg_check_modules(AVFORMAT REQUIRED libavformat) +pkg_check_modules(SWSCALE REQUIRED libswscale) find_library(LIBRT rt) file(GLOB LIBSRCS CONFIGURE_DEPENDS src/lib/*.c) @@ -26,11 +27,13 @@ target_include_directories(notcurses "${PROJECT_BINARY_DIR}/include" "${TERMINFO_INCLUDE_DIR}" "${AVFORMAT_INCLUDE_DIR}" + "${SWSCALE_INCLUDE_DIR}" ) target_link_libraries(notcurses PRIVATE "${TERMINFO_LIBRARIES}" "${AVFORMAT_LIBRARIES}" + "${SWSCALE_LIBRARIES}" "${LIBRT}" ) set_target_properties(notcurses PROPERTIES diff --git a/src/lib/notcurses.c b/src/lib/notcurses.c index 4ef1b2d55..3d288feca 100644 --- a/src/lib/notcurses.c +++ b/src/lib/notcurses.c @@ -325,6 +325,16 @@ const ncplane* notcurses_stdplane_const(const notcurses* nc){ return nc->stdscr; } +int ncplane_destroy(notcurses* nc, ncplane* ncp){ + if(ncp){ + if(nc->stdscr == ncp){ + return -1; + } + // FIXME close it up + } + return 0; +} + static int interrogate_terminfo(notcurses* nc, const notcurses_options* opts){ char* longname_term = longname(); diff --git a/src/view/main.cpp b/src/view/main.cpp index c3679febe..fcc7e7420 100644 --- a/src/view/main.cpp +++ b/src/view/main.cpp @@ -14,7 +14,7 @@ void usage(std::ostream& o, const char* name, int exitcode){ exit(exitcode); } -int ncview(struct ncvisual* ncv, const notcurses_options* opts){ +int ncview(struct ncvisual* ncv){ AVFrame* avf; if((avf = ncvisual_decode(ncv)) == nullptr){ return -1; @@ -22,12 +22,7 @@ int ncview(struct ncvisual* ncv, const notcurses_options* opts){ printf("%s: %dx%d aspect %d:%d %d\n", avf->key_frame ? "Keyframe" : "Frame", avf->height, avf->width, avf->sample_aspect_ratio.num, avf->sample_aspect_ratio.den, avf->format); - auto nc = notcurses_init(opts); - if(nc == nullptr){ - return -1; - } - ncvisual_destroy(ncv); - return notcurses_stop(nc); + return 0; } int main(int argc, char** argv){ @@ -37,15 +32,24 @@ int main(int argc, char** argv){ notcurses_options opts{}; opts.outfp = stdout; bool success = true; + auto nc = notcurses_init(&opts); + if(nc == nullptr){ + return -1; + } + auto ncp = notcurses_stdplane(nc); for(int i = 1 ; i < argc ; ++i){ - auto ncv = notcurses_visual_open(nullptr, argv[i]); + auto ncv = ncplane_visual_open(ncp, argv[i]); if(ncv == nullptr){ success = false; continue; } - if(ncview(ncv, &opts)){ + if(ncview(ncv)){ success = false; } + ncvisual_destroy(ncv); + } + if(notcurses_stop(nc)){ + success = false; } if(!success){ return EXIT_FAILURE;