diff options
author | FreeArtMan <dos21h@gmail.com> | 2016-05-08 16:02:01 +0100 |
---|---|---|
committer | FreeArtMan <dos21h@gmail.com> | 2016-05-08 16:02:01 +0100 |
commit | e42911405c4bc2f8c097f47d4598baf8522ef3da (patch) | |
tree | 9eb767c5e6a4443e8773b18ea76cf4216f6c8758 /src/draw/glui.c | |
parent | 9b95088bddcf1f83e3a8f73f08f49b38ecb0f500 (diff) | |
download | radiola-master.tar.gz radiola-master.zip |
Diffstat (limited to 'src/draw/glui.c')
-rw-r--r-- | src/draw/glui.c | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/src/draw/glui.c b/src/draw/glui.c new file mode 100644 index 0000000..0f1e360 --- /dev/null +++ b/src/draw/glui.c @@ -0,0 +1,174 @@ +#include "glui.h" + +#if def(OS_LINUX) + +#define DEFAULT_TITLE "RADIOLA" +#define SCREEN_X 1024 +#define SCREEN_Y 480 + +int glui_init( glui_t **t ) +{ + int ret=-1; + + glui_t *tui = NULL; + + tui = malloc( sizeof(glui_t) ); + if (tui == NULL) + { + return -1; + } + + memset(tui, 0, sizeof(glui_t)); + + if ( SDL_Init(SDL_INIT_VIDEO) != 0) + { + printf("Cannot init sdl\n"); + return -1; + } + + tui->h = SCREEN_Y; + tui->w = SCREEN_X; + tui->win = SDL_CreateWindow("Hello World!", tui->w, tui->h, SCREEN_X, SCREEN_Y, SDL_WINDOW_SHOWN); + if (tui->win == NULL) + { + printf("Couldnt create SDL window\n"); + return -1; + } + + *t = tui; + ret = 0; + + return ret; +} + + +//init waterfall +int glui_waterfall( glui_t **t, glui_waterfall_t **w ) +{ + int ret=-1; + + glui_waterfall_t *wtf = NULL; + + wtf = malloc( sizeof(glui_waterfall_t) ); + if ( wtf == NULL ) + { + printf("Cannot alloc waterfall\n"); + return -1; + } + + memset( wtf, 0, sizeof(glui_waterfall_t) ); + + wtf->h = (*t)->h; + wtf->w = (*t)->w; + wtf->cur_h = 5; + + + wtf->rend = SDL_CreateRenderer( (*t)->win, -1, SDL_RENDERER_ACCELERATED); + if ( wtf->rend == NULL ) + { + printf("Canno create SDL Rendered\n"); + return -1; + } + + (*w) = wtf; + (*t)->wf = wtf; + + ret = 0; + + return ret; +} + + +//first draw, draw all buffer +int glui_waterfall_draw( glui_waterfall_t *w ) +{ + int ret=-1; + + + + return ret; +} + + +//redraw only changed lines +int glui_waterfall_redraw( glui_waterfall_t *w ) +{ + int ret=-1; + + + return ret; +} + + +//update params of waterfall and then need to draw not redraw +int glui_waterfall_update( glui_t *w ) +{ + int ret=-1; + + + return ret; +} + + +//push one line of data to buffer +int glui_waterfall_data( glui_t *t, int len, uint8_t *buf ) +{ + int ret=-1; + int i; + int y; + glui_color_t c = glui_waterfall_color(0); + SDL_Point *pt = NULL; + + SDL_SetRenderDrawColor( t->wf->rend, c.r, c.g, c.b, c.a ); + + y = t->wf->cur_h; + t->wf->cur_h += 1; + pt = malloc( sizeof(SDL_Point) ); + for ( i=0; i<len; i++ ) + { + c = glui_waterfall_color(buf[i]); + SDL_SetRenderDrawColor( t->wf->rend, c.r, c.g, c.b, c.a ); + pt[0].x = i; + pt[0].y = y; + SDL_RenderDrawPoints( t->wf->rend, pt, 1 ); + } + + + SDL_RenderPresent( t->wf->rend ); + ret = 0; + + return ret; +} + + +//return color +glui_color_t glui_waterfall_color( uint8_t d ) +{ + glui_color_t c; + + c.r = d*10; + c.g = d*10; + c.b = d*10; + + return c; +} + + +//close terminal ui +int glui_close( glui_t *t ) +{ + int ret=0; + + + if ( t->win != NULL ) + { + SDL_DestroyWindow( t->win ); + } + + SDL_Quit(); + + + return ret; +} + +#endif |