From 29c5d3b83ae1cca066184cf8e44b52032945dc4d Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 22 Aug 2013 02:13:14 +0100 Subject: [PATCH] -Updated Avtk::RadialStatus, updated LooperClip logic to send 0 on stop --- src/avtk/avtk_radial_status.h | 38 ++++++++++++++++++++++++----------- src/looperclip.cxx | 2 ++ src/trackoutput.cxx | 1 - 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/avtk/avtk_radial_status.h b/src/avtk/avtk_radial_status.h index 45ba21e..cb60a1f 100644 --- a/src/avtk/avtk_radial_status.h +++ b/src/avtk/avtk_radial_status.h @@ -41,6 +41,8 @@ class RadialStatus : public Fl_Slider label = _label; + previousAngle = -1; + _r = 1.0; _g = 0.48; _b = 0.0; @@ -53,11 +55,16 @@ class RadialStatus : public Fl_Slider mouseOver = false; } + bool _recording; + void recording(bool r){_recording = r; redraw();} + bool mouseOver; bool highlight; int x, y, w, h; const char* label; + int previousAngle; + float _r, _g, _b; // foreground colour float _bgr, _bgg, _bgb; // background colour float _outr, _outg, _outb; // outline colour @@ -78,7 +85,11 @@ class RadialStatus : public Fl_Slider void draw() { - if (damage() & FL_DAMAGE_ALL) + // check that its a new "segment" to redraw + int newAngle = (value() * 16); + + if (damage() & FL_DAMAGE_ALL && + previousAngle != newAngle ) { cairo_t *cr = Fl::cairo_cc(); @@ -87,7 +98,7 @@ class RadialStatus : public Fl_Slider int xc = (w) / 2.f; int yc = (h) / 2.f; - float angle = value(); + float angle = newAngle / 16.f; /* // draw background quadrants @@ -99,18 +110,21 @@ class RadialStatus : public Fl_Slider } */ - if ( angle > 0.001 ) + cairo_set_line_cap ( cr, CAIRO_LINE_CAP_ROUND ); + //cairo_move_to( cr, x + xc, y + yc ); + cairo_arc( cr, x + xc, y + yc, xc - 10, -(3.1415/2), angle * 6.28 - (3.1415/2) ); + cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.8 ); + cairo_set_line_width(cr, 13.2); + cairo_stroke_preserve(cr); + + cairo_set_source_rgba (cr, 1.0, 0.48, 0.0, 1 ); + cairo_set_line_width(cr, 8.2); + cairo_stroke(cr); + + // recording? + if ( _recording ) { - cairo_set_line_cap ( cr, CAIRO_LINE_CAP_ROUND ); - //cairo_move_to( cr, x + xc, y + yc ); - cairo_arc( cr, x + xc, y + yc, xc - 10, -(3.1415/2), angle * 6.28 - (3.1415/2) ); - cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.8 ); - cairo_set_line_width(cr, 13.2); - cairo_stroke_preserve(cr); - cairo_set_source_rgba (cr, 1.0, 0.48, 0.0, 1 ); - cairo_set_line_width(cr, 8.2); - cairo_stroke(cr); } // inside circle diff --git a/src/looperclip.cxx b/src/looperclip.cxx index 4eb8c0f..ec50aeb 100644 --- a/src/looperclip.cxx +++ b/src/looperclip.cxx @@ -149,6 +149,8 @@ void LooperClip::bar() _recording = false; _queueStop = false; change = true; + // set "progress" to zero, as we're stopped! + jack->getControllerUpdater()->setTrackSceneProgress(track, scene, 0 ); } else if ( _queueRecord ) { diff --git a/src/trackoutput.cxx b/src/trackoutput.cxx index 52edfad..7aa35d6 100644 --- a/src/trackoutput.cxx +++ b/src/trackoutput.cxx @@ -58,7 +58,6 @@ void TrackOutput::process(unsigned int nframes, Buffers* buffers) // call process() up the chain previousInChain->process( nframes, buffers ); - // run the meter dbMeter.process( nframes, trackBuffer, trackBuffer );