fix some issues with delta clocks, while introducing a couple more since the clock...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 18 Nov 2011 18:06:16 +0000 (18:06 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 18 Nov 2011 18:06:16 +0000 (18:06 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@10681 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui2.cc
gtk2_ardour/ardour_ui_ed.cc
gtk2_ardour/audio_clock.cc
gtk2_ardour/audio_clock.h
gtk2_ardour/editor.cc
gtk2_ardour/region_layering_order_editor.cc

index 72b39ce8ba978ce4dc803c5bb8a2e19a1f2abb14..2a1ab97b2669191a2955f466a855b6c3d6c8b874 100644 (file)
@@ -3596,13 +3596,13 @@ void
 ARDOUR_UI::update_transport_clocks (framepos_t pos)
 {
        if (Config->get_primary_clock_delta_edit_cursor()) {
-               primary_clock->set (pos, false, editor->get_preferred_edit_position(), 1);
+               primary_clock->set (pos, false, editor->get_preferred_edit_position());
        } else {
-               primary_clock->set (pos, 0, true);
+               primary_clock->set (pos);
        }
 
        if (Config->get_secondary_clock_delta_edit_cursor()) {
-               secondary_clock->set (pos, false, editor->get_preferred_edit_position(), 2);
+               secondary_clock->set (pos, false, editor->get_preferred_edit_position());
        } else {
                secondary_clock->set (pos);
        }
index f353c1c39d71a1aa8a464dc0a855721de8187d80..f940890244da0576b50e7ee11f23151db4b209e6 100644 (file)
@@ -297,8 +297,8 @@ ARDOUR_UI::setup_transport ()
 
        /* clocks, etc. */
 
-       ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (primary_clock, &AudioClock::set), 'p'));
-       ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (secondary_clock, &AudioClock::set), 's'));
+       ARDOUR_UI::Clock.connect (sigc::mem_fun (primary_clock, &AudioClock::set));
+       ARDOUR_UI::Clock.connect (sigc::mem_fun (secondary_clock, &AudioClock::set));
 
        primary_clock->ValueChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::primary_clock_value_changed));
        secondary_clock->ValueChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed));
index 41a113b430b4eec571099bced262e15105543afa..28e6e60fa7ee68ccd7c401c46fec87fc7865df50 100644 (file)
@@ -633,7 +633,7 @@ ARDOUR_UI::use_menubar_as_top_menubar ()
 void
 ARDOUR_UI::setup_clock ()
 {
-       ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (big_clock, &AudioClock::set), false));
+       ARDOUR_UI::Clock.connect (sigc::mem_fun (big_clock, &AudioClock::set));
 
        big_clock_window->set (new Window (WINDOW_TOPLEVEL), false);
 
index 166a76efcea142b7f5d85d7f2493fc0a5804597d..dde1c70b7106d2ea47e5f88ab80f89adc152935b 100644 (file)
@@ -114,6 +114,10 @@ AudioClock::set_widget_name (const string& str)
        } else {
                set_name (str + " clock");
        }
+
+       if (is_realized()) {
+               set_colors ();
+       }
 }
 
 
@@ -660,39 +664,20 @@ AudioClock::session_configuration_changed (std::string p)
 }
 
 void
-AudioClock::set (framepos_t when, bool force, framecnt_t offset, char which)
+AudioClock::set (framepos_t when, bool force, framecnt_t offset)
 {
        if ((!force && !is_visible()) || _session == 0) {
                return;
        }
 
-       bool const pdelta = Config->get_primary_clock_delta_edit_cursor ();
-       bool const sdelta = Config->get_secondary_clock_delta_edit_cursor ();
-
-       if (offset && which == 'p' && pdelta) {
-               when = (when > offset) ? when - offset : offset - when;
-       } else if (offset && which == 's' && sdelta) {
-               when = (when > offset) ? when - offset : offset - when;
-       }
+       if (is_duration) {
+               when = when - offset;
+       } 
 
        if (when == last_when && !force) {
                return;
        }
 
-       if (which == 'p' && pdelta && !last_pdelta) {
-               set_name("TransportClockDisplayDelta");
-               last_pdelta = true;
-       } else if (which == 'p' && !pdelta && last_pdelta) {
-               set_name("TransportClockDisplay");
-               last_pdelta = false;
-       } else if (which == 's' && sdelta && !last_sdelta) {
-               set_name("SecondaryClockDisplayDelta");
-               last_sdelta = true;
-       } else if (which == 's' && !sdelta && last_sdelta) {
-               set_name("SecondaryClockDisplay");
-               last_sdelta = false;
-       }
-
        if (!editing) {
 
                switch (_mode) {
@@ -1160,7 +1145,7 @@ AudioClock::on_button_press_event (GdkEventButton *ev)
 {
        switch (ev->button) {
        case 1:
-               if (editable) {
+               if (editable && !_off) {
                        dragging = true;
                        /* make absolutely sure that the pointer is grabbed */
                        gdk_pointer_grab(ev->window,false ,
@@ -1172,8 +1157,17 @@ AudioClock::on_button_press_event (GdkEventButton *ev)
                        
                        int index;
                        int trailing;
+                       int y;
+                       int x;
 
-                       if (_layout->xy_to_index (ev->x * PANGO_SCALE, ev->y * PANGO_SCALE, index, trailing)) {                 
+                       /* the text has been centered vertically, so adjust
+                        * x and y. 
+                        */
+
+                       y = ev->y - ((get_height() - layout_height)/2);
+                       x = ev->x - x_leading_padding;
+                       
+                       if (_layout->xy_to_index (x * PANGO_SCALE, y * PANGO_SCALE, index, trailing)) {                 
                                drag_field = index_to_field (index);
                        } else {
                                drag_field = Field (0);
@@ -1192,7 +1186,7 @@ AudioClock::on_button_press_event (GdkEventButton *ev)
 bool
 AudioClock::on_button_release_event (GdkEventButton *ev)
 {
-       if (editable) {
+       if (editable && !_off) {
                if (dragging) {
                        gdk_pointer_ungrab (GDK_CURRENT_TIME);
                        dragging = false;
@@ -1238,11 +1232,21 @@ AudioClock::on_scroll_event (GdkEventScroll *ev)
        int index;
        int trailing;
 
-       if (_session == 0 || !editable) {
+       if (_session == 0 || !editable || _off) {
                return false;
        }
 
-       if (!_layout->xy_to_index (ev->x * PANGO_SCALE, ev->y * PANGO_SCALE, index, trailing)) {
+       int y;
+       int x;
+       
+       /* the text has been centered vertically, so adjust
+        * x and y. 
+        */
+
+       y = ev->y - ((get_height() - layout_height)/2);
+       x = ev->x - x_leading_padding;
+
+       if (!_layout->xy_to_index (x * PANGO_SCALE, y * PANGO_SCALE, index, trailing)) {
                /* not in the main layout */
                return false;
        }
@@ -1572,7 +1576,7 @@ AudioClock::build_ops_menu ()
        ops_items.push_back (MenuElem (_("Minutes:Seconds"), sigc::bind (sigc::mem_fun(*this, &AudioClock::set_mode), MinSec)));
        ops_items.push_back (MenuElem (_("Samples"), sigc::bind (sigc::mem_fun(*this, &AudioClock::set_mode), Frames)));
 
-       if (editable && !is_duration && !_follows_playhead) {
+       if (editable && !_off && !is_duration && !_follows_playhead) {
                ops_items.push_back (SeparatorElem());
                ops_items.push_back (MenuElem (_("Set From Playhead"), sigc::mem_fun(*this, &AudioClock::set_from_playhead)));
                ops_items.push_back (MenuElem (_("Locate to This Time"), sigc::mem_fun(*this, &AudioClock::locate)));
@@ -1668,7 +1672,7 @@ AudioClock::set_is_duration (bool yn)
        }
 
        is_duration = yn;
-       set (last_when, true, 0, 's');
+       set (last_when, true);
 }
 
 void
index 912d0b68fe4b32fa05e46fea6964beb9bfbe568c..9ad017055b657bbc0164932f0fe63c88a1a271c7 100644 (file)
@@ -62,7 +62,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
 
        void focus ();
 
-       void set (framepos_t, bool force = false, ARDOUR::framecnt_t offset = 0, char which = 0);
+       void set (framepos_t, bool force = false, ARDOUR::framecnt_t offset = 0);
        void set_from_playhead ();
        void locate ();
        void set_mode (Mode);
index f5d5370b1f52dd9a5d9a1a2ec613e5b92564d7dc..c830b5cfe4326660d662a1164a7d4ec19f19d7e5 100644 (file)
@@ -1213,10 +1213,11 @@ Editor::set_session (Session *t)
                bbt.ticks = 120;
                framepos_t pos = _session->tempo_map().bbt_duration_at (0, bbt, 1);
                nudge_clock->set_mode(AudioClock::BBT);
-               nudge_clock->set (pos, true, 0, AudioClock::BBT);
+               nudge_clock->set (pos, true);
 
        } else {
-               nudge_clock->set (_session->frame_rate() * 5, true, 0, AudioClock::Timecode); // default of 5 seconds
+               nudge_clock->set_mode (AudioClock::Timecode);
+               nudge_clock->set (_session->frame_rate() * 5, true);
        }
 
        playhead_cursor->canvas_item.show ();
index de97e0a1902b7f6c2eb40c99b953d69d20d1ba65..d2e0db5e11eba42c08ce14c3698459e79272b368 100644 (file)
@@ -159,7 +159,7 @@ RegionLayeringOrderEditor::set_context (const string& a_name, Session* s, const
         track_name_label.set_text (a_name);
 
        clock.set_session (s);
-       clock.set (pos, true, 0, 0);
+       clock.set (pos, true);
 
        playlist_modified_connection.disconnect ();
        playlist = pl;