@@ -51,6 +51,10 @@ Region::init ( void ) | |||||
_end = 0; | _end = 0; | ||||
_scale = 1.0f; | _scale = 1.0f; | ||||
_clip = NULL; | _clip = NULL; | ||||
_box_color = FL_CYAN; | |||||
_color = FL_BLUE; | |||||
} | } | ||||
Region::Region ( const Region & rhs ) | Region::Region ( const Region & rhs ) | ||||
@@ -296,14 +300,20 @@ Region::draw ( int X, int Y, int W, int H ) | |||||
int rx = timeline.ts_to_x( _offset ) - X; | int rx = timeline.ts_to_x( _offset ) - X; | ||||
int rw = min( timeline.ts_to_x( _end - _start ), W ); | int rw = min( timeline.ts_to_x( _end - _start ), W ); | ||||
fl_draw_box( FL_PLASTIC_UP_BOX, rx, Y, rw, H, FL_CYAN ); | |||||
fl_push_clip( rx, Y, rw, H ); | |||||
/* dirty hack to keep the box from flipping to vertical at small sizes */ | |||||
fl_draw_box( FL_PLASTIC_UP_BOX, rx - 10, Y, rw + 50, H, _box_color ); | |||||
// fl_push_clip( x() + Fl::box_dx( box() ), y(), w() - Fl::box_dw( box() ), h() ); | // fl_push_clip( x() + Fl::box_dx( box() ), y(), w() - Fl::box_dw( box() ), h() ); | ||||
draw_waveform( rx, Y, rw, H, _clip, _start, _end, _scale, FL_GREEN ); | |||||
draw_waveform( rx, Y, rw, H, _clip, _start, _end, _scale, _color ); | |||||
// fl_pop_clip(); | |||||
fl_color( FL_BLACK ); | |||||
fl_line( rx, Y, rx, Y + H ); | |||||
fl_line( rx + rw - 1, Y, rx + rw - 1, Y + H ); | |||||
fl_pop_clip(); | |||||
fl_font( FL_HELVETICA, 14 ); | fl_font( FL_HELVETICA, 14 ); | ||||
fl_color( FL_BLACK ); | fl_color( FL_BLACK ); | ||||
@@ -27,6 +27,11 @@ | |||||
#include "Track.H" | #include "Track.H" | ||||
#include "Timeline.H" | #include "Timeline.H" | ||||
/* Regions are "virtual" FLTK widgets; this is necessary because the | |||||
* dimensions of real FLTK widgets are limited to 16-bits, which is | |||||
* far too little for our purposes */ | |||||
class Region | class Region | ||||
{ | { | ||||
@@ -40,6 +45,16 @@ class Region | |||||
float _scale; /* amplitude adjustment */ | float _scale; /* amplitude adjustment */ | ||||
bool _selected; | |||||
Fl_Color _color; /* color of waveform */ | |||||
Fl_Color _box_color; /* color of background (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; } | |||||
enum trim_e { NO, LEFT, RIGHT }; | enum trim_e { NO, LEFT, RIGHT }; | ||||
void trim ( enum trim_e t, int X ); | void trim ( enum trim_e t, int X ); | ||||
void init ( void ); | void init ( void ); | ||||
@@ -54,6 +69,11 @@ public: | |||||
int x ( void ) const { return _track->x() + timeline.ts_to_x( _offset - timeline.xoffset ); } | int x ( void ) const { return _track->x() + timeline.ts_to_x( _offset - timeline.xoffset ); } | ||||
int w ( void ) const { return timeline.ts_to_x( _end - _start ); } | int w ( void ) const { return timeline.ts_to_x( _end - _start ); } | ||||
Fl_Group * parent ( void ) const { return _track; } | |||||
Fl_Color color ( void ) { return _color; } | |||||
Fl_Color box_color ( void ) { return _box_color; } | |||||
int handle ( int m ); | int handle ( int m ); | ||||
void draw ( int X, int Y, int W, int H ); | void draw ( int X, int Y, int W, int H ); | ||||
void resize ( void ); | void resize ( void ); | ||||
@@ -22,14 +22,21 @@ | |||||
#include "Region.H" | #include "Region.H" | ||||
#include <FL/fl_draw.H> | |||||
void | void | ||||
Track::draw ( void ) | Track::draw ( void ) | ||||
{ | { | ||||
Fl_Group::draw(); | Fl_Group::draw(); | ||||
fl_push_clip( x(), y(), w(), h() ); | |||||
for ( list <Region *>::iterator r = _regions.begin(); r != _regions.end(); r++ ) | for ( list <Region *>::iterator r = _regions.begin(); r != _regions.end(); r++ ) | ||||
{ | { | ||||
(*r)->draw( timeline.xoffset + x(), y(), w(), h() ); | (*r)->draw( timeline.xoffset + x(), y(), w(), h() ); | ||||
} | } | ||||
fl_pop_clip(); | |||||
} | } | ||||
void | void | ||||