an awful lot of tweaks to drawing details
[ardour.git] / gtk2_ardour / audio_region_view.cc
index 169c66874b4f6da704e101449abf74b89e9d7749..077755ff83a3bba949f544342deac35dd450eab0 100644 (file)
@@ -43,6 +43,7 @@
 #include "canvas/line.h"
 #include "canvas/text.h"
 #include "canvas/debug.h"
+#include "canvas/utils.h"
 
 #include "streamview.h"
 #include "audio_region_view.h"
@@ -234,8 +235,12 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd)
        setup_waveform_shape ();
        setup_waveform_scale ();
 
-       frame_handle_start->raise_to_top ();
-       frame_handle_end->raise_to_top ();
+       if (frame_handle_start) {
+               frame_handle_start->raise_to_top ();
+       }
+       if (frame_handle_end) {
+               frame_handle_end->raise_to_top ();
+       }
 
        /* XXX sync mark drag? */
 }
@@ -1182,16 +1187,34 @@ AudioRegionView::create_one_wave (uint32_t which, bool /*direct*/)
 
        if (_recregion) {
                wave->set_outline_color (_region->muted() ? UINT_RGBA_CHANGE_A(ARDOUR_UI::config()->get_canvasvar_RecWaveForm(), MUTED_ALPHA) : ARDOUR_UI::config()->get_canvasvar_RecWaveForm());
+
+
+
                wave->set_fill_color (ARDOUR_UI::config()->get_canvasvar_RecWaveFormFill());
        } else {
                wave->set_outline_color (_region->muted() ? UINT_RGBA_CHANGE_A(ARDOUR_UI::config()->get_canvasvar_WaveForm(), MUTED_ALPHA) : ARDOUR_UI::config()->get_canvasvar_WaveForm());
-               wave->set_fill_color (ARDOUR_UI::config()->get_canvasvar_WaveFormFill());
+
+               /* wave color is a saturated, whiter version of the frame's
+                * fill color 
+                */
+
+               ArdourCanvas::Color c = frame->fill_color ();
+               double h, s, v;
+               ArdourCanvas::color_to_hsv (c, h, s, v);
+
+               /* full saturate */
+               s = 1.0;
+               /* head towards white */
+               v = min (1.0, v * 3.0);
+               
+               c = ArdourCanvas::hsv_to_color (h, s, v, _region->muted() ? MUTED_ALPHA : 1.0);
+               
+               wave->set_fill_color (c);
        }
 
        wave->set_clip_color (ARDOUR_UI::config()->get_canvasvar_WaveFormClip());
        wave->set_zero_color (ARDOUR_UI::config()->get_canvasvar_ZeroLine());
-       // CAIROCANVAS
-       // wave->property_zero_line() = true;
+       wave->set_show_zero_line (true);
 
        switch (Config->get_waveform_shape()) {
        case Rectified:
@@ -1327,12 +1350,9 @@ AudioRegionView::setup_waveform_shape ()
 void
 AudioRegionView::setup_waveform_scale ()
 {
-       for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
-               (*wave)->set_logscaled (Config->get_waveform_scale() == Logarithmic);
-       }
+       WaveView::set_global_logscaled (Config->get_waveform_scale() == Logarithmic);
 }
 
-
 GhostRegion*
 AudioRegionView::add_ghost (TimeAxisView& tv)
 {
@@ -1540,7 +1560,6 @@ AudioRegionView::show_region_editor ()
        }
 
        editor->present ();
-       editor->set_position (Gtk::WIN_POS_MOUSE);
        editor->show_all();
 }