| @@ -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() ) | ||||
| @@ -122,7 +123,7 @@ if ( nsm && nsm->is_active() ) | |||||
| { | { | ||||
| ui->menu_new->deactivate(); | ui->menu_new->deactivate(); | ||||
| ui->menu_open->deactivate(); | ui->menu_open->deactivate(); | ||||
| ui->menu_save_as->deactivate(); | |||||
| ui->menu_save_as->deactivate(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -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 | |||||
| code0 {o->box( FL_NO_BOX );} | |||||
| xywh {253 125 607 549} color 48 align 1 resizable | |||||
| 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 ); | |||||
| phrase_c->signal_pan.connect( sigc::mem_fun( phrase_canvas_widget, &O_Canvas::handle_pan ) );} | |||||
| code1 {o->box( FL_NO_BOX );} | |||||
| code0 {o->set_canvas( phrase_c );} | |||||
| code1 {phrase_c->signal_pan.connect( sigc::mem_fun( phrase_canvas_widget, &O_Canvas::handle_pan ) );} | |||||
| 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 ); | |||||
| pattern_c->signal_pan.connect( sigc::mem_fun( pattern_canvas_widget, &O_Canvas::handle_pan ) );} | |||||
| code1 {o->set_canvas( pattern_c );} | |||||
| 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) ) | |||||
| if ( damage() & FL_DAMAGE_ALL ) | |||||
| { | { | ||||
| draw_box( FL_FLAT_BOX, x(), y(), w(), h(), canvas_background_color ); | |||||
| _c->redraw(); | |||||
| draw_box( FL_FLAT_BOX, x(), y(), w(), h(), canvas_background_color ); | |||||
| _border_drawn = false; | |||||
| draw_border(); | |||||
| _c->redraw(); | |||||
| _c->draw_playhead(); | |||||
| } | } | ||||
| if ( damage() & (FL_DAMAGE_ALL | FL_DAMAGE_SCROLL) ) | |||||
| { | |||||
| else | |||||
| { | |||||
| if ( damage() & FL_DAMAGE_SCROLL ) | |||||
| { | |||||
| // optimized draw | // optimized draw | ||||
| _c->draw(); | _c->draw(); | ||||
| } | |||||
| else | |||||
| if ( damage() & (FL_DAMAGE_ALL | FL_DAMAGE_USER1) ) | |||||
| { | |||||
| } | |||||
| if ( damage() & FL_DAMAGE_USER1 ) | |||||
| { | |||||
| // playhead | // playhead | ||||
| _c->draw_playhead(); | _c->draw_playhead(); | ||||
| } | |||||
| else | |||||
| if ( damage() & FL_DAMAGE_ALL ) | |||||
| { | |||||
| draw_box( FL_FLAT_BOX, x(), y(), w(), h(), canvas_background_color ); | |||||
| _border_drawn = false; | |||||
| draw_border(); | |||||
| _c->redraw(); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| 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() ); | |||||
| damage( FL_DAMAGE_USER2 ); | |||||
| _flags |= FL_DAMAGE_USER2;} {} | |||||
| code {redraw();} {} | |||||
| } | } | ||||
| 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. | |||||
| _flags |= FL_DAMAGE_SCROLL;} {} | |||||
| // this might be called from within draw(), in which case the above does nothing.} {} | |||||
| } | } | ||||
| 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; | ||||