From: Michael Göhler Date: Fri, 29 Aug 2014 08:54:11 +0000 (+0200) Subject: added viewer to main program - display dummy text for testing X-Git-Url: https://git.danieliu.xyz/?a=commitdiff_plain;h=70ce4d7eba90b5da6f9187eb217794db6f153888;p=smdp.git added viewer to main program - display dummy text for testing --- diff --git a/Makefile b/Makefile index befbd52..97787c4 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,10 @@ -CFLAGS=-g -Wall +CFLAGS=-g -Wall -lncurses -tmp: tmp.c cstring.o markdown.o parser.o - cc $(CFLAGS) -o tmp tmp.c cstring.o markdown.o parser.o +tmp: tmp.c cstring.o markdown.o parser.o viewer.o + cc $(CFLAGS) -o tmp tmp.c cstring.o markdown.o parser.o viewer.o + +viewer.o: viewer.c + cc $(CFLAGS) -c viewer.c parser.o: parser.c cc $(CFLAGS) -c parser.c diff --git a/include/viewer.h b/include/viewer.h index 89837ec..96d113f 100644 --- a/include/viewer.h +++ b/include/viewer.h @@ -1,24 +1,17 @@ #if !defined( VIEWER_H ) #define VIEWER_H +#include + #define CP_WHITE 1 // 255 #define CP_BLUE 2 // 123 #define CP_RED 3 // 213 #define CP_YELLOW 4 // 208 -static short white_ramp[24] = { 16, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, - 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255 }; - -static short blue_ramp[24] = { 16, 17, 17, 18, 18, 19, - 19, 20, 20, 21, 27, 32, - 33, 38, 39, 44, 45, 45, - 81, 81, 51, 51, 123, 123 }; +#define FADE_DELAY 15000 // micro seconds -static short red_ramp[24] = { 16, 52, 52, 53, 53, 89, - 89, 90, 90, 126, 127, 127, - 163, 163, 164, 164, 200, 200, - 201, 201, 207, 207, 213, 213 }; +int ncurses_display(deck_t *deck, int notrans, int nofade); +void fade_out(WINDOW *window, int trans, int colors); +void fade_in(WINDOW *window, int trans, int colors); #endif // !defined( VIEWER_H ) diff --git a/tmp.c b/tmp.c index 8fbfa0d..a806ff4 100644 --- a/tmp.c +++ b/tmp.c @@ -5,6 +5,7 @@ #include #include "include/parser.h" +#include "include/viewer.h" void usage() { fprintf(stderr, "Usage: tmp [OPTION]... [FILE]\n"); @@ -59,15 +60,17 @@ int main(int argc, char *argv[]) { } // load deck object from input - deck_t *doc; - doc = markdown_load(input); + deck_t *deck; + deck = markdown_load(input); //TODO close file if(debug > 0) { - markdown_debug(doc, debug); + markdown_debug(deck, debug); } + ncurses_display(deck, 0, 0); + return(EXIT_SUCCESS); } diff --git a/viewer.c b/viewer.c index 8e5e741..d6b5c85 100644 --- a/viewer.c +++ b/viewer.c @@ -1,9 +1,25 @@ #include #include +#include #include "include/parser.h" #include "include/viewer.h" +static short white_ramp[24] = { 16, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, + 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255 }; + +static short blue_ramp[24] = { 16, 17, 17, 18, 18, 19, + 19, 20, 20, 21, 27, 32, + 33, 38, 39, 44, 45, 45, + 81, 81, 51, 51, 123, 123 }; + +static short red_ramp[24] = { 16, 52, 52, 53, 53, 89, + 89, 90, 90, 126, 127, 127, + 163, 163, 164, 164, 200, 200, + 201, 201, 207, 207, 213, 213 }; + int ncurses_display(deck_t *deck, int notrans, int nofade) { int c = 0; // char @@ -33,20 +49,24 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) { slide = slide->next; } + // replace stdin with current tty if markdown input was piped + freopen("/dev/tty", "rw", stdin); + + // init ncurses + initscr(); + if((max_cols > COLS) || (max_lines + bar_top + bar_bottom + 2 > LINES)) { fprintf(stderr, "Error: Terminal size %ix%i to small. Need at least %ix%i.\n", COLS, LINES, max_cols, max_lines + bar_top + bar_bottom + 2); + endwin(); return(1); } // replace stdin with current tty if markdown input was piped freopen("/dev/tty", "rw", stdin); - // init ncurses - initscr(); - // disable cursor curs_set(0); @@ -64,7 +84,7 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) { start_color(); use_default_colors(); - if(!notrans) trans = 0; // 0 is black + if(notrans) trans = 0; // 0 is black if(COLORS == 256) { // 256 color mode @@ -107,17 +127,28 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) { wprintw(stdscr, "footer"); } + // make header + fooder visible + wrefresh(stdscr); + // setup main window - WINDOW *content = newwin(LINES - bar_top - bar_bottom, COLS, 0, 0 + bar_top); + WINDOW *content = newwin(LINES - bar_top - bar_bottom, COLS, 0 + bar_top, 0); if(colors) wbkgd(content, COLOR_PAIR(CP_WHITE)); slide = deck->slide; while(slide) { - // fade out - // print header / footer - // print lines + // clear main window + werase(content); + + //TODO print lines + wprintw(content, "content"); + + // make content visible + wrefresh(content); + // fade in + if(fade) + fade_in(content, trans, colors); // wait for user input c = getch(); @@ -147,9 +178,15 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) { // quit case 'q': + // do not fade out on exit + fade = 0; slide = (void*)0; break; } + + // fade out + if(fade) + fade_out(content, trans, colors); } endwin(); @@ -157,3 +194,35 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) { return(0); } +void fade_out(WINDOW *window, int trans, int colors) { + int i; // increment + if(colors) { + for(i = 22; i >= 0; i--) { + // darken color pairs + init_pair(CP_WHITE, white_ramp[i], trans); + init_pair(CP_BLUE, blue_ramp[i], trans); + init_pair(CP_RED, red_ramp[i], trans); + // refresh window with new color + wrefresh(window); + // delay for our eyes to recognize the change + usleep(FADE_DELAY); + } + } +} + +void fade_in(WINDOW *window, int trans, int colors) { + int i; // increment + if(colors) { + for(i = 0; i <= 23; i++) { + // lighten color pairs + init_pair(CP_WHITE, white_ramp[i], trans); + init_pair(CP_BLUE, blue_ramp[i], trans); + init_pair(CP_RED, red_ramp[i], trans); + // refresh window with new color + wrefresh(window); + // delay for our eyes to recognize the change + usleep(FADE_DELAY); + } + } +} +