Sequencer: Eliminate some unnecessary drawing.

This commit is contained in:
Jonathan Moore Liles 2012-05-20 19:34:52 -07:00
parent 73d2c2d396
commit 0cc0bf2f00
1 changed files with 47 additions and 72 deletions

View File

@ -88,12 +88,11 @@ Function {update_transport( void * )} {open return_type void
handle_midi_input(); handle_midi_input();
ui->progress_group->do_callback(); ui->progress_group->do_callback();
ui->vmetro_widget->update(); ui->vmetro_widget->update();
if ( transport.rolling ) ui->triggers_widget->update();
ui->triggers_widget->update();
Fl::repeat_timeout( TRANSPORT_POLL_INTERVAL, update_transport ); Fl::repeat_timeout( TRANSPORT_POLL_INTERVAL, update_transport );
@ -101,6 +100,7 @@ static int oldstate = -1;
if ( transport.rolling != oldstate ) if ( transport.rolling != oldstate )
{ {
ui->play_button->label( transport.rolling ? "@square" : "@>" ); ui->play_button->label( transport.rolling ? "@square" : "@>" );
oldstate = transport.rolling; oldstate = transport.rolling;
@ -114,6 +114,7 @@ if ( transport.rolling != oldstate )
ui->menu_new->activate(); ui->menu_new->activate();
ui->menu_open->activate(); ui->menu_open->activate();
} }
} }
if ( nsm && nsm->is_active() ) if ( nsm && nsm->is_active() )
@ -130,10 +131,10 @@ if ( nsm && nsm->is_active() )
if ( transport.rolling ) if ( transport.rolling )
{ {
if ( ui->tabs->value() == ui->pattern_tab ) if ( ui->tabs->value() == ui->pattern_tab )
ui->pattern_canvas_widget->draw_playhead(); ui->pattern_canvas_widget->redraw_playhead();
else else
if ( ui->tabs->value() == ui->phrase_tab ) if ( ui->tabs->value() == ui->phrase_tab )
ui->phrase_canvas_widget->draw_playhead(); ui->phrase_canvas_widget->redraw_playhead();
} }
@ -264,10 +265,10 @@ if ( maybe_save_song() )
label Metronome label Metronome
xywh {395 34 461 60} type HORIZONTAL box UP_BOX color 40 selection_color 48 labelsize 33 align 0 resizable xywh {395 34 461 60} type HORIZONTAL box UP_BOX color 40 selection_color 48 labelsize 33 align 0 resizable
code0 {\#include "widgets.H"} code0 {\#include "widgets.H"}
code1 {o->box( FL_NO_BOX );} code1 {o->box( FL_FLAT_BOX );}
class Visual_Metronome class Visual_Metronome
} {} } {}
Fl_Pack transport_controls_group {open selected Fl_Pack transport_controls_group {open
xywh {4 32 160 44} type HORIZONTAL xywh {4 32 160 44} type HORIZONTAL
code0 {o->spacing( 2 );} code0 {o->spacing( 2 );}
class Fl_Scalepack class Fl_Scalepack
@ -486,8 +487,8 @@ else
} }
Fl_Box triggers_widget { Fl_Box triggers_widget {
label Patterns label Patterns
xywh {253 125 607 549} box UP_BOX color 72 align 1 resizable xywh {253 125 607 549} color 48 align 1 resizable
code0 {o->box( FL_NO_BOX );} code0 {o->color( FL_BACKGROUND_COLOR );}
class Triggers class Triggers
} }
Fl_Group progress_group { Fl_Group progress_group {
@ -516,15 +517,14 @@ if ( playlist->length() )
} }
Fl_Group phrase_tab { Fl_Group phrase_tab {
label Phrase open label Phrase open
xywh {0 102 865 674} color 47 xywh {0 102 865 674} color 47 hide
code0 {update_phrase_widgets();} code0 {update_phrase_widgets();}
} { } {
Fl_Box phrase_canvas_widget { Fl_Box phrase_canvas_widget {
label Phrase label Phrase
xywh {1 103 863 587} box FLAT_BOX color 37 labelsize 100 align 16 resizable xywh {1 103 863 587} box FLAT_BOX color 37 labelsize 100 align 16 resizable
code0 {o->set_canvas( phrase_c ); code0 {o->set_canvas( phrase_c );}
phrase_c->signal_pan.connect( sigc::mem_fun( phrase_canvas_widget, &O_Canvas::handle_pan ) );} code1 {phrase_c->signal_pan.connect( sigc::mem_fun( phrase_canvas_widget, &O_Canvas::handle_pan ) );}
code1 {o->box( FL_NO_BOX );}
class O_Canvas class O_Canvas
} }
Fl_Group {} {open Fl_Group {} {open
@ -568,16 +568,16 @@ o->maximum( phrase::phrases() );}
} }
Fl_Group pattern_tab { Fl_Group pattern_tab {
label Pattern open label Pattern open
xywh {0 102 865 674} color 47 hide xywh {0 102 865 674} color 47
code0 {update_pattern_widgets();} code0 {update_pattern_widgets();}
} { } {
Fl_Box pattern_canvas_widget { Fl_Box pattern_canvas_widget {
label Pattern label Pattern selected
xywh {1 103 863 587} box FLAT_BOX color 37 labelsize 100 align 16 resizable xywh {1 103 863 587} box FLAT_BOX color 37 labelsize 100 align 16 resizable
code0 {\#include "draw.H"} code0 {\#include "draw.H"}
code1 {o->set_canvas( pattern_c ); code1 {o->set_canvas( pattern_c );}
pattern_c->signal_pan.connect( sigc::mem_fun( pattern_canvas_widget, &O_Canvas::handle_pan ) );}
code2 {\#include "input.H"} code2 {\#include "input.H"}
code3 {pattern_c->signal_pan.connect( sigc::mem_fun( pattern_canvas_widget, &O_Canvas::handle_pan ) );}
class O_Canvas class O_Canvas
} }
Fl_Group {} {open Fl_Group {} {open
@ -1147,10 +1147,6 @@ ab.run();}
label SM label SM
xywh {825 8 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 46 selection_color 93 labelfont 3 labelcolor 39 deactivate xywh {825 8 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 46 selection_color 93 labelfont 3 labelcolor 39 deactivate
} }
Fl_Box {} {
label label
xywh {15 15 35 16} hide resizable
}
} }
} }
} }
@ -1489,13 +1485,11 @@ class O_Canvas {open : {public Fl_Widget}
} }
decl {bool _border_drawn;} {private local decl {bool _border_drawn;} {private local
} }
decl {uint _flags;} {private local
}
Function {O_Canvas( int X, int Y, int W, int H, const char*L=0) : Fl_Widget(X,Y,W,H,L)} {open Function {O_Canvas( int X, int Y, int W, int H, const char*L=0) : Fl_Widget(X,Y,W,H,L)} {open
} { } {
code {_c = NULL; code {_c = NULL;
_border_drawn = false; _border_drawn = false;
_flags = 0;} {} box(FL_FLAT_BOX);} {}
} }
Function {handle( int m )} {open return_type int Function {handle( int m )} {open return_type int
} { } {
@ -1503,7 +1497,7 @@ _flags = 0;} {}
if ( m == FL_FOCUS || m == FL_UNFOCUS ) if ( m == FL_FOCUS || m == FL_UNFOCUS )
{ {
_border_drawn = false; _border_drawn = false;
draw_playhead(); redraw_playhead();
return 1; return 1;
} }
@ -1553,53 +1547,36 @@ if ( _c )
if ( _c ) if ( _c )
{ {
/*
damage( _flags );
_flags = 0;
/*
if ( damage() & FL_DAMAGE_ALL ) printf( " damage_all" ); if ( damage() & FL_DAMAGE_ALL ) printf( " damage_all" );
if ( damage() & FL_DAMAGE_SCROLL ) printf( " damage_scroll" ); if ( damage() & FL_DAMAGE_SCROLL ) printf( " damage_scroll" );
if ( damage() & FL_DAMAGE_USER1 ) printf( " damage_user1" ); if ( damage() & FL_DAMAGE_USER1 ) printf( " damage_user1" );
if ( damage() & FL_DAMAGE_USER2 ) printf( " damage_user2" ); if ( damage() & FL_DAMAGE_USER2 ) printf( " damage_user2" );
if ( damage() & FL_DAMAGE_EXPOSE ) printf( " damage_expose" ); if ( damage() & FL_DAMAGE_EXPOSE ) printf( " damage_expose" );
printf("\\n"); printf("\\n");
*/ */
if ( damage() & FL_DAMAGE_EXPOSE )
{
draw_box( FL_FLAT_BOX, x(), y(), w(), h(), canvas_background_color );
_c->redraw();
return;
}
if ( damage() & (FL_DAMAGE_ALL | FL_DAMAGE_USER2) )
{
draw_box( FL_FLAT_BOX, x(), y(), w(), h(), canvas_background_color );
_c->redraw();
}
if ( damage() & (FL_DAMAGE_ALL | FL_DAMAGE_SCROLL) )
{
// optimized draw
_c->draw();
}
else
if ( damage() & (FL_DAMAGE_ALL | FL_DAMAGE_USER1) )
{
// playhead
_c->draw_playhead();
}
else
if ( damage() & FL_DAMAGE_ALL ) if ( damage() & FL_DAMAGE_ALL )
{ {
draw_box( FL_FLAT_BOX, x(), y(), w(), h(), canvas_background_color ); draw_box( FL_FLAT_BOX, x(), y(), w(), h(), canvas_background_color );
_border_drawn = false; _border_drawn = false;
draw_border(); draw_border();
_c->redraw(); _c->redraw();
_c->draw_playhead();
} }
else
{
if ( damage() & FL_DAMAGE_SCROLL )
{
// optimized draw
_c->draw();
}
if ( damage() & FL_DAMAGE_USER1 )
{
// playhead
_c->draw_playhead();
}
}
} }
else else
{ {
@ -1612,7 +1589,7 @@ else
_c->resize( x(), y(), w(), h() ); _c->resize( x(), y(), w(), h() );
_c->signal_draw.connect( sigc::mem_fun( this, &O_Canvas::draw_notes ) ); _c->signal_draw.connect( sigc::mem_fun( this, &O_Canvas::redraw_notes ) );
_c->signal_resize.connect( sigc::mem_fun( this, &O_Canvas::clear ) ); _c->signal_resize.connect( sigc::mem_fun( this, &O_Canvas::clear ) );
_c->signal_settings_change.connect( sigc::ptr_fun( &UI::update_canvas_widgets ) ); _c->signal_settings_change.connect( sigc::ptr_fun( &UI::update_canvas_widgets ) );
@ -1624,20 +1601,15 @@ _c->signal_settings_change.connect( sigc::mem_fun( song, &song_settings::set_dir
} }
Function {clear( void )} {open return_type void Function {clear( void )} {open return_type void
} { } {
code {// parent()->parent()->damage( FL_DAMAGE_ALL, x(), y(), w(), h() ); code {redraw();} {}
damage( FL_DAMAGE_USER2 );
_flags |= FL_DAMAGE_USER2;} {}
} }
Function {draw_notes( void )} {open return_type void Function {redraw_notes( void )} {open return_type void
} { } {
code {damage( FL_DAMAGE_SCROLL ); code {damage( FL_DAMAGE_SCROLL );
// this might be called from within draw(), in which case the above does nothing. // this might be called from within draw(), in which case the above does nothing.} {}
_flags |= FL_DAMAGE_SCROLL;} {}
} }
Function {draw_playhead( void )} {open return_type void Function {redraw_playhead( void )} {open return_type void
} { } {
code {if ( _c && _c->playhead_moved() ) code {if ( _c && _c->playhead_moved() )
{ {
@ -1894,6 +1866,9 @@ redraw();} {}
} { } {
code {++_timer; code {++_timer;
if ( !visible_r() )
return;
if ( ! takesevents() ) if ( ! takesevents() )
return; return;