mirror of
https://github.com/vale981/openAV-Luppp
synced 2025-03-05 09:01:39 -05:00
-Refactored ClipSelector
This commit is contained in:
parent
3348646fad
commit
f259f3add9
1 changed files with 83 additions and 76 deletions
|
@ -44,22 +44,12 @@ namespace Avtk
|
|||
class ClipState
|
||||
{
|
||||
public:
|
||||
enum State {
|
||||
CLIP_EMPTY = 0,
|
||||
CLIP_LOADED,
|
||||
CLIP_QUEUED,
|
||||
CLIP_PLAYING,
|
||||
CLIP_RECORDING,
|
||||
CLIP_STOPPING,
|
||||
};
|
||||
ClipState()
|
||||
{
|
||||
state = CLIP_EMPTY;
|
||||
loaded = false;
|
||||
name = "";
|
||||
}
|
||||
|
||||
State state;
|
||||
bool loaded;
|
||||
std::string name;
|
||||
};
|
||||
|
@ -81,8 +71,27 @@ class ClipSelector : public Fl_Button
|
|||
|
||||
highlight = false;
|
||||
mouseOver = false;
|
||||
|
||||
playingClip = -1;
|
||||
queuedClip = -1;
|
||||
recordingClip = -1;
|
||||
}
|
||||
|
||||
|
||||
int ID;
|
||||
|
||||
static const int numClips = 10;
|
||||
ClipState clips[numClips];
|
||||
|
||||
int playingClip;
|
||||
int queuedClip;
|
||||
int recordingClip;
|
||||
|
||||
bool mouseOver;
|
||||
bool highlight;
|
||||
int x, y, w, h;
|
||||
const char* label;
|
||||
|
||||
void setID( int id )
|
||||
{
|
||||
ID = id;
|
||||
|
@ -95,7 +104,6 @@ class ClipSelector : public Fl_Button
|
|||
{
|
||||
clips[clip].loaded = true;
|
||||
clips[clip].name = name;
|
||||
clips[clip].state = ClipState::CLIP_LOADED;
|
||||
}
|
||||
|
||||
/** converts the Looper::State into the UI represnted ClipSelector state.
|
||||
|
@ -106,43 +114,33 @@ class ClipSelector : public Fl_Button
|
|||
switch(s)
|
||||
{
|
||||
case Looper::STATE_PLAYING:
|
||||
clips[clipNum].state = ClipState::CLIP_PLAYING;
|
||||
playingClip = clipNum;
|
||||
printf("clipSelector setState() clip %i = CLIP_PLAYING\n", clipNum);
|
||||
break;
|
||||
case Looper::STATE_PLAY_QUEUED:
|
||||
clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
queuedClip = clipNum;
|
||||
printf("clipSelector setState() clip %i = CLIP_QUEUED\n", clipNum);
|
||||
break;
|
||||
case Looper::STATE_RECORDING:
|
||||
clips[clipNum].state = ClipState::CLIP_RECORDING;
|
||||
//clips[clipNum].state = ClipState::CLIP_RECORDING;
|
||||
printf("clipSelector setState() clip %i = CLIP_RECORDING\n", clipNum);
|
||||
break;
|
||||
case Looper::STATE_RECORD_QUEUED:
|
||||
clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
//clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
printf("clipSelector setState() clip %i = CLIP_QUEUED\n", clipNum);
|
||||
break;
|
||||
case Looper::STATE_STOPPED:
|
||||
clips[clipNum].state = ClipState::CLIP_LOADED;
|
||||
//clips[clipNum].state = ClipState::CLIP_LOADED;
|
||||
printf("clipSelector setState() clip %i = CLIP_LOADED\n", clipNum);
|
||||
break;
|
||||
case Looper::STATE_STOP_QUEUED:
|
||||
clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
//clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
printf("clipSelector setState() clip %i = CLIP_QUEUED\n", clipNum);
|
||||
break;
|
||||
}
|
||||
redraw();
|
||||
}
|
||||
|
||||
int ID;
|
||||
|
||||
static const int numClips = 10;
|
||||
ClipState clips[numClips];
|
||||
|
||||
bool mouseOver;
|
||||
bool highlight;
|
||||
int x, y, w, h;
|
||||
const char* label;
|
||||
|
||||
void draw()
|
||||
{
|
||||
if (damage() & FL_DAMAGE_ALL)
|
||||
|
@ -171,55 +169,62 @@ class ClipSelector : public Fl_Button
|
|||
cairo_fill(cr);
|
||||
|
||||
cairo_rectangle( cr, x+1, drawY, clipHeight - 2, clipHeight - 4 );
|
||||
switch( clips[i].state )
|
||||
|
||||
if ( i == recordingClip )
|
||||
{
|
||||
case ClipState::CLIP_EMPTY:
|
||||
cairo_set_source_rgba(cr, 66 / 255.f, 66 / 255.f , 66 / 255.f, 1.f);
|
||||
cairo_fill(cr);
|
||||
break;
|
||||
case ClipState::CLIP_LOADED:
|
||||
cairo_set_source_rgba(cr, 1.0, 0.6, 0, 1.f);
|
||||
cairo_fill(cr);
|
||||
cairo_arc( cr, x+14, drawY+13, 4.3, 0, 6.29 );
|
||||
cairo_set_source_rgba(cr, 0, 0, 0, 1.f);
|
||||
cairo_set_line_width(cr, 2.2f);
|
||||
cairo_stroke(cr);
|
||||
break;
|
||||
case ClipState::CLIP_QUEUED:
|
||||
cairo_set_source_rgba( cr, 0 / 255.f, 153 / 255.f , 255 / 255.f , 1 );
|
||||
cairo_fill(cr);
|
||||
cairo_move_to( cr, x+11, drawY+8 );
|
||||
cairo_line_to( cr, x+11, drawY+18 );
|
||||
cairo_move_to( cr, x+17, drawY+8 );
|
||||
cairo_line_to( cr, x+17, drawY+18 );
|
||||
cairo_set_source_rgba(cr, 0, 0, 0, 1.f);
|
||||
cairo_set_line_width(cr, 2.8f);
|
||||
cairo_stroke(cr);
|
||||
break;
|
||||
case ClipState::CLIP_PLAYING:
|
||||
cairo_set_source_rgba(cr, 0.0, 1.0, 0, 1.f );
|
||||
cairo_fill(cr);
|
||||
cairo_move_to( cr, x+10, drawY+8 );
|
||||
cairo_line_to( cr, x+19, drawY+13 );
|
||||
cairo_line_to( cr, x+10, drawY+18 );
|
||||
cairo_close_path(cr);
|
||||
cairo_set_source_rgba(cr, 0, 0, 0, 1.f);
|
||||
cairo_fill(cr);
|
||||
break;
|
||||
case ClipState::CLIP_RECORDING:
|
||||
cairo_set_source_rgba(cr, 1.f, 0 / 255.f , 0 / 255.f, 1.f);
|
||||
cairo_fill(cr);
|
||||
cairo_arc( cr, x+14, drawY+13, 4.3, 0, 6.29 );
|
||||
cairo_set_source_rgba(cr, 0, 0, 0, 1.f);
|
||||
cairo_fill(cr);
|
||||
break;
|
||||
case ClipState::CLIP_STOPPING:
|
||||
cairo_set_source_rgba(cr, 0 / 255.f, 0 / 255.f , 0 / 255.f, 1.0);
|
||||
cairo_fill(cr);
|
||||
cairo_rectangle( cr, x+9, drawY+8, 9, 9 );
|
||||
cairo_set_source_rgba(cr, 1, 1, 1, 0.6);
|
||||
cairo_fill(cr);
|
||||
break;
|
||||
cairo_set_source_rgba(cr, 1.f, 0 / 255.f , 0 / 255.f, 1.f);
|
||||
cairo_fill(cr);
|
||||
cairo_arc( cr, x+14, drawY+13, 4.3, 0, 6.29 );
|
||||
cairo_set_source_rgba(cr, 0, 0, 0, 1.f);
|
||||
cairo_fill(cr);
|
||||
}
|
||||
else if ( i == playingClip )
|
||||
{
|
||||
cairo_set_source_rgba(cr, 0.0, 1.0, 0, 1.f );
|
||||
cairo_fill(cr);
|
||||
cairo_move_to( cr, x+10, drawY+8 );
|
||||
cairo_line_to( cr, x+19, drawY+13 );
|
||||
cairo_line_to( cr, x+10, drawY+18 );
|
||||
cairo_close_path(cr);
|
||||
cairo_set_source_rgba(cr, 0, 0, 0, 1.f);
|
||||
cairo_fill(cr);
|
||||
}
|
||||
else if ( i == queuedClip )
|
||||
{
|
||||
cairo_set_source_rgba( cr, 0 / 255.f, 153 / 255.f , 255 / 255.f , 1 );
|
||||
cairo_fill(cr);
|
||||
cairo_move_to( cr, x+11, drawY+8 );
|
||||
cairo_line_to( cr, x+11, drawY+18 );
|
||||
cairo_move_to( cr, x+17, drawY+8 );
|
||||
cairo_line_to( cr, x+17, drawY+18 );
|
||||
cairo_set_source_rgba(cr, 0, 0, 0, 1.f);
|
||||
cairo_set_line_width(cr, 2.8f);
|
||||
cairo_stroke(cr);
|
||||
}
|
||||
else if ( clips[i].loaded )
|
||||
{
|
||||
cairo_set_source_rgba(cr, 1.0, 0.6, 0, 1.f);
|
||||
cairo_fill(cr);
|
||||
cairo_arc( cr, x+14, drawY+13, 4.3, 0, 6.29 );
|
||||
cairo_set_source_rgba(cr, 0, 0, 0, 1.f);
|
||||
cairo_set_line_width(cr, 2.2f);
|
||||
cairo_stroke(cr);
|
||||
}
|
||||
else if ( false )
|
||||
{
|
||||
// stop symbol: not currently used
|
||||
/*
|
||||
cairo_set_source_rgba(cr, 0 / 255.f, 0 / 255.f , 0 / 255.f, 1.0);
|
||||
cairo_fill(cr);
|
||||
cairo_rectangle( cr, x+9, drawY+8, 9, 9 );
|
||||
cairo_set_source_rgba(cr, 1, 1, 1, 0.6);
|
||||
cairo_fill(cr);
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
cairo_set_source_rgba(cr, 66 / 255.f, 66 / 255.f , 66 / 255.f, 1.f);
|
||||
cairo_fill(cr);
|
||||
}
|
||||
|
||||
cairo_rectangle( cr, x+1, drawY, clipWidth, clipHeight - 2 );
|
||||
|
@ -327,13 +332,14 @@ class ClipSelector : public Fl_Button
|
|||
}
|
||||
else if ( strcmp(m->label(), "Record") == 0 )
|
||||
{
|
||||
clips[clipNum].state = ClipState::CLIP_RECORDING;
|
||||
//clips[clipNum].state = ClipState::CLIP_RECORDING;
|
||||
EventLooperState e = EventLooperState( ID, clipNum, Looper::STATE_RECORD_QUEUED);
|
||||
writeToDspRingbuffer( &e );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
switch( clips[clipNum].state )
|
||||
{
|
||||
case ClipState::CLIP_EMPTY:
|
||||
|
@ -372,6 +378,7 @@ class ClipSelector : public Fl_Button
|
|||
printf("Avtk::ClipSelector, warning: unknown clip type\n");
|
||||
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
redraw();
|
||||
|
|
Loading…
Add table
Reference in a new issue