@@ -92,7 +92,7 @@ Engine::sync ( jack_transport_state_t state, jack_position_t *pos ) | |||
/* FIXME: what's the right thing to do here? */ | |||
// request_locate( pos->frame ); | |||
return 1; | |||
// return transport.frame == pos->frame; | |||
// return transport->frame == pos->frame; | |||
break; | |||
default: | |||
printf( "unknown transport state.\n" ); | |||
@@ -105,9 +105,9 @@ Engine::sync ( jack_transport_state_t state, jack_position_t *pos ) | |||
int | |||
Engine::process ( nframes_t nframes ) | |||
{ | |||
transport.poll(); | |||
transport->poll(); | |||
if ( ! transport.rolling ) | |||
if ( ! transport->rolling ) | |||
/* FIXME: fill all ports with silence */ | |||
return 0; | |||
@@ -561,7 +561,7 @@ Timeline::draw ( void ) | |||
void | |||
Timeline::draw_playhead ( void ) | |||
{ | |||
int x = ( ts_to_x( transport.frame ) - ts_to_x( xoffset ) ) + tracks->x() + Track::width(); | |||
int x = ( ts_to_x( transport->frame ) - ts_to_x( xoffset ) ) + tracks->x() + Track::width(); | |||
if ( x < tracks->x() + Track::width() || x > tracks->x() + tracks->w() ) | |||
return; | |||
@@ -590,10 +590,10 @@ Timeline::redraw_playhead ( void ) | |||
{ | |||
static nframes_t last_playhead = -1; | |||
if ( last_playhead != transport.frame ) | |||
if ( last_playhead != transport->frame ) | |||
{ | |||
redraw_overlay(); | |||
last_playhead = transport.frame; | |||
last_playhead = transport->frame; | |||
} | |||
} | |||
@@ -702,19 +702,21 @@ Timeline::handle ( int m ) | |||
return 1; | |||
} | |||
case FL_Home: | |||
transport.locate( 0 ); | |||
return 1; | |||
case ' ': | |||
transport.toggle(); | |||
return 1; | |||
/* case FL_Home: */ | |||
/* transport->locate( 0 ); */ | |||
/* return 1; */ | |||
/* case ' ': */ | |||
/* transport->toggle(); */ | |||
/* return 1; */ | |||
case 'p': | |||
{ | |||
int X = Fl::event_x() - Track::width(); | |||
if ( X > 0 ) | |||
{ | |||
transport.locate( xoffset + x_to_ts( X ) ); | |||
transport->locate( xoffset + x_to_ts( X ) ); | |||
} | |||
return 1; | |||
@@ -62,9 +62,9 @@ Track::cb_button ( Fl_Widget *w ) | |||
{ | |||
/* FIXME: wrong place for this! */ | |||
if ( record_button->value() ) | |||
record_ds->start( transport.frame ); | |||
record_ds->start( transport->frame ); | |||
else | |||
record_ds->stop( transport.frame ); | |||
record_ds->stop( transport->frame ); | |||
} | |||
else | |||
if ( w == take_menu ) | |||
@@ -20,7 +20,7 @@ | |||
#include "Transport.H" | |||
#include "Engine.H" | |||
Transport transport; | |||
// Transport transport; | |||
#define client engine->client() | |||
@@ -22,8 +22,69 @@ | |||
#include <jack/transport.h> | |||
#include "types.h" | |||
struct Transport : public jack_position_t | |||
#include <FL/Fl_Pack.H> | |||
#include <FL/Fl_Button.H> | |||
#include <stdio.h> | |||
struct Transport : public jack_position_t, public Fl_Pack | |||
{ | |||
private: | |||
Fl_Button *_home_button; | |||
Fl_Button *_play_button; | |||
Fl_Button *_record_button; | |||
static | |||
void | |||
cb_button ( Fl_Widget *w, void *v ) | |||
{ | |||
((Transport*)v)->cb_button( w ); | |||
} | |||
void | |||
cb_button ( Fl_Widget *w ) | |||
{ | |||
if ( w == _home_button ) | |||
locate( 0 ); | |||
else if ( w == _play_button ) | |||
toggle(); | |||
else if ( w == _record_button ) | |||
printf( "FIXME: record now\n" ); | |||
} | |||
public: | |||
Transport ( int X, int Y, int W, int H, const char *L=0 ) | |||
: Fl_Pack( X, Y, W, H, L ) | |||
{ | |||
const int bw = W / 3; | |||
type( HORIZONTAL ); | |||
Fl_Button *o; | |||
_home_button = o = new Fl_Button( 0, 0, bw, 0, "@<|" ); | |||
o->labeltype( FL_EMBOSSED_LABEL ); | |||
o->callback( cb_button, this ); | |||
o->shortcut( FL_Home ); | |||
o->box( FL_UP_BOX ); | |||
_play_button = o = new Fl_Button( 0, 0, bw, 0, "@>" ); | |||
o->labeltype( FL_EMBOSSED_LABEL ); | |||
o->callback( cb_button, this ); | |||
o->shortcut( ' ' ); | |||
o->box( FL_UP_BOX ); | |||
_record_button = o = new Fl_Button( 0, 0, bw, 0, "@circle" ); | |||
o->labeltype( FL_EMBOSSED_LABEL ); | |||
o->labelcolor( FL_RED ); | |||
o->shortcut( 'R' ); | |||
o->callback( cb_button, this ); | |||
o->box( FL_UP_BOX ); | |||
end(); | |||
} | |||
bool rolling; | |||
void poll ( void ); | |||
@@ -33,4 +94,4 @@ struct Transport : public jack_position_t | |||
void toggle ( void ); | |||
}; | |||
extern Transport transport; | |||
extern Transport* transport; |
@@ -47,14 +47,16 @@ | |||
#include "Time_Sequence.H" | |||
#include "Control_Sequence.H" | |||
#include "Transport.H" | |||
#include "Loggable.H" | |||
#include "Track.H" | |||
// #include "const.h" | |||
#include "Engine.H" | |||
Engine *engine; | |||
Timeline *timeline; | |||
Transport *transport; | |||
void cb_undo ( Fl_Widget *w, void *v ) | |||
{ | |||
@@ -67,6 +69,7 @@ main ( int argc, char **argv ) | |||
Fl_Window *main_window = new Fl_Window( 0, 0, 1024, 768 ); | |||
Fl::visual( FL_RGB8 ); | |||
Fl::visible_focus( 0 ); | |||
Fl::get_system_colors(); | |||
Fl::scheme( "plastic" ); | |||
@@ -83,6 +86,10 @@ main ( int argc, char **argv ) | |||
/* TODO: change to seesion dir */ | |||
transport = new Transport( 0, 0, 300, 24 ); | |||
main_window->add( transport ); | |||
/* we don't really need a pointer for this */ | |||
engine = new Engine; | |||
engine->init(); | |||