|
|
@@ -53,6 +53,16 @@ protected: |
|
|
|
|
|
|
|
public: |
|
|
|
|
|
|
|
Track_Widget ( ) |
|
|
|
{ |
|
|
|
_track = NULL; |
|
|
|
|
|
|
|
_offset = _start = _end = 0; |
|
|
|
|
|
|
|
_selected = false; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Fl_Group * parent ( void ) const { return _track; } |
|
|
|
|
|
|
|
int scroll_x ( void ) const { return timeline.ts_to_x( timeline.xoffset ); } |
|
|
@@ -63,7 +73,7 @@ public: |
|
|
|
int x ( void ) const { return _offset < timeline.xoffset ? -1 : min( 32767, _track->x() + timeline.ts_to_x( _offset - timeline.xoffset ) ); } |
|
|
|
// int x ( void ) const { return (short)( _track->x() + timeline.ts_to_x( _offset - timeline.xoffset )); } |
|
|
|
|
|
|
|
int w ( void ) const { return timeline.ts_to_x( _end - _start ); } |
|
|
|
virtual int w ( void ) const { return timeline.ts_to_x( _end - _start ); } |
|
|
|
// int w ( void ) const { return timeline.ts_to_x( (_end - _start) - ( timeline.xoffset - _offset) ); } |
|
|
|
|
|
|
|
Fl_Color color ( void ) { return _color; } |
|
|
@@ -80,60 +90,130 @@ public: |
|
|
|
void start ( nframes_t v ) { _start = v; } |
|
|
|
nframes_t start ( void ) const { return _start; } |
|
|
|
|
|
|
|
nframes_t length ( void ) const { return _end - _start; } |
|
|
|
virtual nframes_t length ( void ) const { return _end - _start; } |
|
|
|
|
|
|
|
/* just draw a simple box */ |
|
|
|
virtual void |
|
|
|
draw ( int X, int Y, int W, int H ) |
|
|
|
{ |
|
|
|
fl_draw_box( FL_FLAT_BOX, X, Y, W, H, _box_color ); |
|
|
|
fl_draw_box( FL_FLAT_BOX, x(), y(), w(), y(), _box_color ); |
|
|
|
} |
|
|
|
|
|
|
|
/* base hanlde just does basic dragging */ |
|
|
|
virtual int |
|
|
|
handle ( int m ) { return 0; } |
|
|
|
handle ( int m ) |
|
|
|
{ |
|
|
|
static int ox, oy; |
|
|
|
|
|
|
|
int X = Fl::event_x(); |
|
|
|
int Y = Fl::event_y(); |
|
|
|
|
|
|
|
switch ( m ) |
|
|
|
{ |
|
|
|
case FL_PUSH: |
|
|
|
{ |
|
|
|
ox = x() - X; |
|
|
|
oy = y() - Y; |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
case FL_RELEASE: |
|
|
|
fl_cursor( FL_CURSOR_DEFAULT ); |
|
|
|
return 1; |
|
|
|
case FL_DRAG: |
|
|
|
{ |
|
|
|
if ( ox + X >= _track->x() ) |
|
|
|
{ |
|
|
|
int nx = ox + X; |
|
|
|
|
|
|
|
_offset = timeline.x_to_ts( nx ) + timeline.xoffset; |
|
|
|
|
|
|
|
_track->snap( this ); |
|
|
|
} |
|
|
|
|
|
|
|
_track->redraw(); |
|
|
|
fl_cursor( FL_CURSOR_MOVE ); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
default: |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
class Tempo_Point : public Track_Widget |
|
|
|
{ |
|
|
|
float _tempo; |
|
|
|
|
|
|
|
static Fl_Boxtype box ( void ) { return FL_UP_BOX; } |
|
|
|
|
|
|
|
class Tempo : public Track_Widget |
|
|
|
{ |
|
|
|
float _tempo; |
|
|
|
public: |
|
|
|
|
|
|
|
void |
|
|
|
draw ( int X, int Y, int W, int H ) |
|
|
|
{ |
|
|
|
Tempo_Point ( ) |
|
|
|
{ |
|
|
|
_tempo = 120; |
|
|
|
_offset = 0; |
|
|
|
_start = 0; |
|
|
|
_end = 300; |
|
|
|
} |
|
|
|
|
|
|
|
Tempo_Point ( nframes_t when, float bpm ) |
|
|
|
{ |
|
|
|
_tempo = bpm; |
|
|
|
_offset = when; |
|
|
|
_start = 0; |
|
|
|
_end = 300; |
|
|
|
} |
|
|
|
|
|
|
|
int w ( void ) const { return 10; } |
|
|
|
nframes_t length ( void ) const { return timeline.x_to_ts( w() ); } |
|
|
|
|
|
|
|
void |
|
|
|
draw ( int X, int Y, int W, int H ) |
|
|
|
{ |
|
|
|
if ( x() < 0 ) |
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
fl_draw_box( box(), x(), Y, w(), H, _box_color ); |
|
|
|
|
|
|
|
}; |
|
|
|
char pat[40]; |
|
|
|
|
|
|
|
class Region : public Track_Widget |
|
|
|
{ |
|
|
|
snprintf( pat, 40, "%.1f", _tempo ); |
|
|
|
|
|
|
|
Clip *_clip; /* clip this region represents */ |
|
|
|
fl_font( FL_HELVETICA, 14 ); |
|
|
|
fl_color( FL_YELLOW ); |
|
|
|
fl_draw( pat, x() + w(), Y, w(), h(), FL_ALIGN_LEFT ); |
|
|
|
|
|
|
|
float _scale; /* amplitude adjustment */ |
|
|
|
} |
|
|
|
|
|
|
|
static Fl_Boxtype _box; |
|
|
|
static Fl_Color _selection_color; |
|
|
|
static Fl_Color selection_color ( void ) { return _selection_color; } |
|
|
|
static void selection_color ( Fl_Color v ) { _selection_color = v; } |
|
|
|
static Fl_Boxtype box ( void ) { return _box; } |
|
|
|
}; |
|
|
|
|
|
|
|
enum trim_e { NO, LEFT, RIGHT }; |
|
|
|
void trim ( enum trim_e t, int X ); |
|
|
|
void init ( void ); |
|
|
|
class Region : public Track_Widget |
|
|
|
{ |
|
|
|
|
|
|
|
public: |
|
|
|
Clip *_clip; /* clip this region represents */ |
|
|
|
|
|
|
|
Region ( const Region & rhs ); |
|
|
|
Region ( Clip *c ); |
|
|
|
float _scale; /* amplitude adjustment */ |
|
|
|
|
|
|
|
int handle ( int m ); |
|
|
|
void draw ( int X, int Y, int W, int H ); |
|
|
|
void resize ( void ); |
|
|
|
static Fl_Boxtype _box; |
|
|
|
static Fl_Color _selection_color; |
|
|
|
static Fl_Color selection_color ( void ) { return _selection_color; } |
|
|
|
static void selection_color ( Fl_Color v ) { _selection_color = v; } |
|
|
|
static Fl_Boxtype box ( void ) { return _box; } |
|
|
|
|
|
|
|
}; |
|
|
|
enum trim_e { NO, LEFT, RIGHT }; |
|
|
|
void trim ( enum trim_e t, int X ); |
|
|
|
void init ( void ); |
|
|
|
|
|
|
|
public: |
|
|
|
|
|
|
|
Region ( const Region & rhs ); |
|
|
|
Region ( Clip *c ); |
|
|
|
|
|
|
|
int handle ( int m ); |
|
|
|
void draw ( int X, int Y, int W, int H ); |
|
|
|
void resize ( void ); |
|
|
|
|
|
|
|
}; |