- if(thread)
- {
- int result = load_configuration();
- SpectrogramWindow *window = (SpectrogramWindow*)thread->get_window();
- window->lock_window("Spectrogram::update_gui");
- if(result) window->update_gui();
-
-
-//printf("Spectrogram::update_gui %d\n", __LINE__);
-// Shift in accumulated canvas columns
- if(frame_buffer.size())
- {
- SpectrogramCanvas *canvas = (SpectrogramCanvas*)window->canvas;
- canvas->draw_overlay();
-// Z to draw in this iteration
- int total_frames = timer->get_difference() *
- header.sample_rate /
- header.window_size /
- 1000;
-
-//printf("Spectrogram::update_gui %d %d %ld\n", __LINE__, frame_buffer.size(), timer->get_difference());
- if(total_frames) timer->subtract(total_frames *
- header.window_size *
- 1000 /
- header.sample_rate);
-
-// Add forced column drawing
- for(int i = 0; i < frame_buffer.size(); i++)
- if(frame_buffer.get(i)->force) total_frames++;
- total_frames = MIN(frame_buffer.size(), total_frames);
-
-// Limit to canvas width
- if(config.mode == HORIZONTAL)
- total_frames = MIN(canvas->get_w(), total_frames);
-
-
-
- if(config.mode == HORIZONTAL)
- {
+ if( !thread ) return;
+ SpectrogramWindow *window = (SpectrogramWindow*)thread->get_window();
+ if( !window ) return;
+ int result = load_configuration();
+ int total_frames = pending_gui_frames();
+ if( !result && !total_frames ) return;
+
+ window->lock_window("Spectrogram::update_gui");
+ if( result ) // widgets
+ window->update_gui();
+ if( total_frames ) { // spectrogram
+ SpectrogramCanvas *canvas = (SpectrogramCanvas*)window->canvas;
+ canvas->draw_overlay();
+
+ if( config.mode == HORIZONTAL ) {