Browse Source

Allow copying of regions.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
894d5d85d0
5 changed files with 47 additions and 7 deletions
  1. +28
    -3
      Region.C
  2. +3
    -1
      Region.H
  3. +1
    -1
      Waveform.C
  4. +12
    -1
      Waveform.H
  5. +3
    -1
      main.C

+ 28
- 3
Region.C View File

@@ -30,7 +30,7 @@


extern Timeline timeline; extern Timeline timeline;


Region::Region ( int X, int Y, int W, int H, const char *L=0 ) : Waveform( X, Y, W, H, L )
Region::Region ( int X, int Y, int W, int H, const char *L ) : Waveform( X, Y, W, H, L )
{ {
align( FL_ALIGN_INSIDE | FL_ALIGN_LEFT | FL_ALIGN_BOTTOM | FL_ALIGN_CLIP ); align( FL_ALIGN_INSIDE | FL_ALIGN_LEFT | FL_ALIGN_BOTTOM | FL_ALIGN_CLIP );
labeltype( FL_SHADOW_LABEL ); labeltype( FL_SHADOW_LABEL );
@@ -40,6 +40,17 @@ Region::Region ( int X, int Y, int W, int H, const char *L=0 ) : Waveform( X, Y,
_track = NULL; _track = NULL;
} }


Region::Region ( const Region & rhs ) : Waveform( rhs )
{
box( rhs.box() );
align( rhs.align() );
color( rhs.color() );
selection_color( rhs.selection_color() );
labelcolor( rhs.labelcolor() );

_track = rhs._track;
}

void void
Region::trim ( enum trim_e t, int X ) Region::trim ( enum trim_e t, int X )
{ {
@@ -79,6 +90,8 @@ Region::handle ( int m )
static int ox, oy; static int ox, oy;
static enum trim_e trimming; static enum trim_e trimming;


static bool copied = false;

switch ( m ) switch ( m )
{ {
case FL_PUSH: case FL_PUSH:
@@ -86,7 +99,7 @@ Region::handle ( int m )
int X = Fl::event_x(); int X = Fl::event_x();
int Y = Fl::event_y(); int Y = Fl::event_y();


if ( Fl::event_state() & FL_CTRL )
if ( Fl::event_state() & FL_SHIFT )
{ {
switch ( Fl::event_button() ) switch ( Fl::event_button() )
{ {
@@ -119,10 +132,12 @@ Region::handle ( int m )
} }
case FL_RELEASE: case FL_RELEASE:
fl_cursor( FL_CURSOR_DEFAULT ); fl_cursor( FL_CURSOR_DEFAULT );
copied = false;
trimming = NO;
return 1; return 1;
case FL_DRAG: case FL_DRAG:


if ( Fl::event_state() & FL_CTRL )
if ( Fl::event_state() & FL_SHIFT )
if ( trimming ) if ( trimming )
{ {
trim( trimming, Fl::event_x() ); trim( trimming, Fl::event_x() );
@@ -131,6 +146,16 @@ Region::handle ( int m )
else else
return 0; return 0;


if ( Fl::event_state() & FL_CTRL )
{
if ( ! copied )
{
_track->add( new Region( *this ) );
copied = true;
return 1;
}
}

if ( ox + Fl::event_x() >= _track->x() ) if ( ox + Fl::event_x() >= _track->x() )
position( ox + Fl::event_x(), y() ); position( ox + Fl::event_x(), y() );




+ 3
- 1
Region.H View File

@@ -34,7 +34,9 @@ class Region : public Waveform


public: public:


Region ( int X, int Y, int W, int H, const char *L );
Region ( int X, int Y, int W, int H, const char *L=0 );

Region ( const Region & rhs );


int handle ( int m ); int handle ( int m );
void draw ( void ); void draw ( void );


+ 1
- 1
Waveform.C View File

@@ -30,7 +30,7 @@
extern Fl_Color velocity_colors[]; extern Fl_Color velocity_colors[];




Waveform::Waveform ( int X, int Y, int W, int H, const char *L=0 ) : Fl_Widget( X, Y, W, H, L )
Waveform::Waveform ( int X, int Y, int W, int H, const char *L ) : Fl_Widget( X, Y, W, H, L )
{ {






+ 12
- 1
Waveform.H View File

@@ -26,7 +26,9 @@ typedef unsigned long tick_t;


class Waveform : public Fl_Widget class Waveform : public Fl_Widget
{ {

protected: protected:

float *_peaks; float *_peaks;


tick_t _start; tick_t _start;
@@ -37,7 +39,16 @@ protected:


public: public:


Waveform ( int X, int Y, int W, int H, const char *L );
Waveform ( int X, int Y, int W, int H, const char *L=0 );

Waveform ( const Waveform & rhs ) : Fl_Widget( rhs.x(), rhs.y(), rhs.w(), rhs.h(), rhs.label() )
{
// Fl_Widget::resize( rhs.x(), rhs.y(), rhs.w(), rhs.h() );

_peaks = rhs._peaks;
_start = rhs._start;
_end = rhs._end;
}


int handle ( int m ); int handle ( int m );
void draw ( void ); void draw ( void );


+ 3
- 1
main.C View File

@@ -106,7 +106,9 @@ main ( int argc, char **argv )


Track *track2 = new Track( 40, 0, 5000, 100 ); Track *track2 = new Track( 40, 0, 5000, 100 );


Region *wave2 = new Region( 0, 0, 350, 100, "bar" );
// Region *wave2 = new Region( 0, 0, 350, 100, "bar" );

Region *wave2 = new Region( *wave );


wave2->peaks( peaks ); wave2->peaks( peaks );
wave2->start( 300 ); wave2->start( 300 );


Loading…
Cancel
Save