1 /*
2  *                           0BSD
3  *
4  *                    BSD Zero Clause License
5  *
6  *  Copyright (c) 2019 Hermann Meyer
7  *
8  * Permission to use, copy, modify, and/or distribute this software for any
9  * purpose with or without fee is hereby granted.
10 
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
12  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13  * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
14  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
16  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  *
19  */
20 
21 
22 #include "xwaveview.h"
23 #include "xwaveview_private.h"
24 
25 
add_waveview(Widget_t * parent,const char * label,int x,int y,int width,int height)26 Widget_t* add_waveview(Widget_t *parent, const char * label,
27                 int x, int y, int width, int height) {
28 
29     Widget_t *wid = create_widget(parent->app, parent, x, y, width, height);
30     wid->label = label;
31     wid->flags |= HAS_MEM;
32     wid->scale.gravity = CENTER;
33     WaveView_t *wave_view;
34     wave_view = (WaveView_t*)malloc(sizeof(WaveView_t));
35     wave_view->wave = NULL;
36     wave_view->size = 0;
37     wid->private_struct = wave_view;
38     wid->func.expose_callback = _draw_waveview;
39     wid->func.mem_free_callback = waveview_mem_free;
40     return wid;
41 }
42 
update_waveview(Widget_t * waveview,float * wave,int size)43 void update_waveview(Widget_t *waveview, float* wave, int size) {
44     WaveView_t *wave_view = (WaveView_t*)waveview->private_struct;
45     if (size !=wave_view->size && size>1) {
46         free(wave_view->wave);
47         wave_view->wave = NULL;
48         wave_view->size = size;
49         wave_view->wave = (float*)malloc(size*sizeof(float));
50     }
51     if (wave_view->size>1) {
52         memcpy(wave_view->wave, wave, size*sizeof(float));
53         expose_widget(waveview);
54     }
55 }
56 
waveview_mem_free(void * w_,void * user_data)57 void waveview_mem_free(void *w_, void* user_data) {
58     Widget_t *w = (Widget_t*)w_;
59     WaveView_t *wave_view = (WaveView_t*)w->private_struct;
60     free(wave_view->wave);
61     free(wave_view);
62 }
63