a-fluidsynth: implement LV2_BANKPATCH__notify
[ardour.git] / gtk2_ardour / audio_clock.cc
index 4027890133f96b58336d3df4646b90ba81bba959..3c5d065264436e4a3f2b0f11de54ac001f185e05 100644 (file)
 #include <gtkmm/style.h>
 #include <sigc++/bind.h>
 
-#include "gtkmm2ext/cairocell.h"
 #include "gtkmm2ext/utils.h"
 #include "gtkmm2ext/rgb_macros.h"
 
+#include "widgets/tooltips.h"
+
 #include "ardour/profile.h"
 #include "ardour/lmath.h"
 #include "ardour/session.h"
@@ -42,7 +43,6 @@
 #include "enums_convert.h"
 #include "gui_thread.h"
 #include "keyboard.h"
-#include "tooltips.h"
 #include "ui_config.h"
 #include "utils.h"
 
@@ -50,6 +50,7 @@
 
 using namespace ARDOUR;
 using namespace ARDOUR_UI_UTILS;
+using namespace ArdourWidgets;
 using namespace PBD;
 using namespace Gtk;
 using namespace std;
@@ -327,10 +328,10 @@ AudioClock::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*
 
                                cairo_set_source_rgba (cr, cursor_r, cursor_g, cursor_b, cursor_a);
                                cairo_rectangle (cr,
-                                                min (get_width() - 2.0,
-                                                     (double) xcenter + cursor.get_x()/PANGO_SCALE + em_width),
-                                                (get_height() - layout_height)/2.0,
-                                                2.0, cursor.get_height()/PANGO_SCALE);
+                                                min (get_width() - 2.0,
+                                                (double) xcenter + cursor.get_x()/PANGO_SCALE + em_width),
+                                                (get_height() - layout_height)/2.0,
+                                                2.0, cursor.get_height()/PANGO_SCALE);
                                cairo_fill (cr);
                        } else {
                                /* we've entered all possible digits, no cursor */
@@ -812,7 +813,7 @@ AudioClock::session_configuration_changed (std::string p)
 void
 AudioClock::set (framepos_t when, bool force, framecnt_t offset)
 {
-       if ((!force && !is_visible()) || _session == 0) {
+       if ((!force && !is_visible()) || _session == 0) {
                return;
        }
 
@@ -1225,7 +1226,7 @@ AudioClock::set_session (Session *s)
 
                int64_t limit_sec = UIConfiguration::instance().get_clock_display_limit ();
                if (limit_sec > 0) {
-                       _limit_pos = (framecnt_t) floor (limit_sec * _session->frame_rate());
+                       _limit_pos = (framecnt_t) floor ((double)(limit_sec * _session->frame_rate()));
                }
 
                Config->ParameterChanged.connect (_session_connections, invalidator (*this), boost::bind (&AudioClock::session_configuration_changed, this, _1), gui_context());
@@ -1520,6 +1521,11 @@ AudioClock::index_to_field (int index) const
 bool
 AudioClock::on_button_press_event (GdkEventButton *ev)
 {
+       if (!_session || _session->actively_recording()) {
+               /* swallow event, do nothing */
+               return true;
+       }
+
        switch (ev->button) {
        case 1:
                if (editable && !_off) {
@@ -1563,6 +1569,11 @@ AudioClock::on_button_press_event (GdkEventButton *ev)
 bool
 AudioClock::on_button_release_event (GdkEventButton *ev)
 {
+       if (!_session || _session->actively_recording()) {
+               /* swallow event, do nothing */
+               return true;
+       }
+
        if (editable && !_off) {
                if (dragging) {
                        gdk_pointer_ungrab (GDK_CURRENT_TIME);
@@ -1636,7 +1647,7 @@ AudioClock::on_scroll_event (GdkEventScroll *ev)
        int index;
        int trailing;
 
-       if (editing || _session == 0 || !editable || _off) {
+       if (editing || _session == 0 || !editable || _off || _session->actively_recording())  {
                return false;
        }
 
@@ -1700,7 +1711,7 @@ AudioClock::on_scroll_event (GdkEventScroll *ev)
 bool
 AudioClock::on_motion_notify_event (GdkEventMotion *ev)
 {
-       if (editing || _session == 0 || !dragging) {
+       if (editing || _session == 0 || !dragging || _session->actively_recording()) {
                return false;
        }
 
@@ -1712,8 +1723,7 @@ AudioClock::on_motion_notify_event (GdkEventMotion *ev)
 
 
        if (Keyboard::modifier_state_contains (ev->state,
-                                              Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) {
-
+                                              Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) {
                pixel_frame_scale_factor = 0.025f;
        }
 
@@ -1736,9 +1746,9 @@ AudioClock::on_motion_notify_event (GdkEventMotion *ev)
                        set ((framepos_t) floor (pos - drag_accum * frames), false); // minus because up is negative in GTK
                } else {
                        set (0 , false);
-               }
+               }
 
-               drag_accum= 0;
+               drag_accum= 0;
                ValueChanged();  /* EMIT_SIGNAL */
        }
 
@@ -1871,7 +1881,7 @@ AudioClock::timecode_validate_edit (const string&)
        char ignored[2];
 
        if (sscanf (_layout->get_text().c_str(), "%[- _]%" PRId32 ":%" PRId32 ":%" PRId32 "%[:;]%" PRId32,
-                   ignored, &hours, &TC.minutes, &TC.seconds, ignored, &TC.frames) != 6) {
+                   ignored, &hours, &TC.minutes, &TC.seconds, ignored, &TC.frames) != 6) {
                return false;
        }
 
@@ -1986,10 +1996,10 @@ AudioClock::frames_from_bbt_string (framepos_t pos, const string& str) const
        if (is_duration) {
                any.bbt.bars++;
                any.bbt.beats++;
-                return _session->any_duration_to_frames (pos, any);
+               return _session->any_duration_to_frames (pos, any);
        } else {
-                return _session->convert_to_frames (any);
-        }
+               return _session->convert_to_frames (any);
+       }
 }