Merge branch 'master' into cairocanvas
[ardour.git] / gtk2_ardour / editor_rulers.cc
index 76152208c3bfff1f7d4486c2d792c78f4d95521a..0a855d7f90efa50e4910ff5b863ad5f19a2683a6 100644 (file)
@@ -29,6 +29,8 @@
 
 #include <gtk/gtkaction.h>
 
+#include "canvas/group.h"
+
 #include "ardour/session.h"
 #include "ardour/tempo.h"
 #include "ardour/profile.h"
@@ -121,7 +123,7 @@ Editor::initialize_rulers ()
        using namespace Box_Helpers;
        BoxList & ruler_lab_children =  ruler_label_vbox.children();
        BoxList & ruler_children =  time_canvas_vbox.children();
-       BoxList & lab_children =  time_button_vbox.children();
+       BoxList & lab_children =  time_bars_vbox.children();
 
        BoxList::iterator canvaspos = ruler_children.begin();
 
@@ -131,9 +133,7 @@ Editor::initialize_rulers ()
        lab_children.push_back (Element(transport_mark_label, PACK_SHRINK, PACK_START));
        lab_children.push_back (Element(cd_mark_label, PACK_SHRINK, PACK_START));
        lab_children.push_back (Element(mark_label, PACK_SHRINK, PACK_START));
-#ifdef WITH_VIDEOTIMELINE
        lab_children.push_back (Element(videotl_label, PACK_SHRINK, PACK_START));
-#endif
 
        ruler_lab_children.push_back (Element(minsec_label, PACK_SHRINK, PACK_START));
        ruler_children.insert (canvaspos, Element(*minsec_ruler, PACK_SHRINK, PACK_START));
@@ -170,7 +170,6 @@ Editor::initialize_rulers ()
        minsec_ruler->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::ruler_scroll));
 
        visible_timebars = 0; /*this will be changed below */
-       canvas_timebars_vsize = 0;
 }
 
 bool
@@ -252,7 +251,7 @@ Editor::ruler_button_press (GdkEventButton* ev)
                }
 
                /* playhead cursor */
-               _drags->set (new CursorDrag (this, &playhead_cursor->canvas_item, false), reinterpret_cast<GdkEvent *> (ev));
+               _drags->set (new CursorDrag (this, &playhead_cursor->track_canvas_item (), false), reinterpret_cast<GdkEvent *> (ev));
                _dragging_playhead = true;
        }
 
@@ -371,7 +370,6 @@ Editor::popup_ruler_menu (framepos_t where, ItemType t)
                ruler_items.push_back (SeparatorElem ());
                break;
 
-#ifdef WITH_VIDEOTIMELINE
        case VideoBarItem:
                ruler_items.push_back (MenuElem (_("Timeline height")));
                static_cast<MenuItem*>(&ruler_items.back())->set_sensitive(false);
@@ -395,7 +393,6 @@ Editor::popup_ruler_menu (framepos_t where, ItemType t)
 
                ruler_items.push_back (SeparatorElem ());
                break;
-#endif
 
        default:
                break;
@@ -447,12 +444,10 @@ Editor::popup_ruler_menu (framepos_t where, ItemType t)
        if (action) {
                ruler_items.push_back (MenuElem (*action->create_menu_item()));
        }
-#ifdef WITH_VIDEOTIMELINE
        action = ActionManager::get_action ("Rulers", "toggle-video-ruler");
        if (action) {
                ruler_items.push_back (MenuElem (*action->create_menu_item()));
        }
-#endif
 
        editor_ruler_menu->popup (1, gtk_get_current_event_time());
 
@@ -474,9 +469,7 @@ Editor::store_ruler_visibility ()
        node->add_property (X_("rangemarker"), ruler_range_action->get_active() ? "yes": "no");
        node->add_property (X_("transportmarker"), ruler_loop_punch_action->get_active() ? "yes": "no");
        node->add_property (X_("cdmarker"), ruler_cd_marker_action->get_active() ? "yes": "no");
-#ifdef WITH_VIDEOTIMELINE
        node->add_property (X_("videotl"), ruler_video_action->get_active() ? "yes": "no");
-#endif
 
        _session->add_extra_xml (*node);
        _session->set_dirty ();
@@ -577,7 +570,6 @@ Editor::restore_ruler_visibility ()
                        }
                }
 
-#ifdef WITH_VIDEOTIMELINE
                if ((prop = node->property ("videotl")) != 0) {
                        if (string_is_affirmative (prop->value())) {
                                ruler_video_action->set_active (true);
@@ -585,7 +577,6 @@ Editor::restore_ruler_visibility ()
                                ruler_video_action->set_active (false);
                        }
                }
-#endif
 
        }
 
@@ -652,18 +643,16 @@ Editor::update_ruler_visibility ()
        transport_mark_label.hide();
        cd_mark_label.hide();
        mark_label.hide();
- #ifdef WITH_VIDEOTIMELINE
        videotl_label.hide();
- #endif
 #endif
        if (ruler_meter_action->get_active()) {
-               old_unit_pos = meter_group->property_y();
+               old_unit_pos = meter_group->position().y;
                if (tbpos != old_unit_pos) {
-                       meter_group->move ( 0.0, tbpos - old_unit_pos);
+                       meter_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
                }
-               old_unit_pos = meter_bar_group->property_y();
+               old_unit_pos = meter_bar_group->position().y;
                if (tbgpos != old_unit_pos) {
-                       meter_bar_group->move ( 0.0, tbgpos - old_unit_pos);
+                       meter_bar_group->move (ArdourCanvas::Duple (0.0, tbgpos - old_unit_pos));
                }
                meter_bar_group->show();
                meter_group->show();
@@ -678,13 +667,13 @@ Editor::update_ruler_visibility ()
        }
 
        if (ruler_tempo_action->get_active()) {
-               old_unit_pos = tempo_group->property_y();
+               old_unit_pos = tempo_group->position().y;
                if (tbpos != old_unit_pos) {
-                       tempo_group->move(0.0, tbpos - old_unit_pos);
+                       tempo_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
                }
-               old_unit_pos = tempo_bar_group->property_y();
+               old_unit_pos = tempo_bar_group->position().y;
                if (tbgpos != old_unit_pos) {
-                       tempo_bar_group->move ( 0.0, tbgpos - old_unit_pos);
+                       tempo_bar_group->move (ArdourCanvas::Duple (0.0, tbgpos - old_unit_pos));
                }
                tempo_bar_group->show();
                tempo_group->show();
@@ -699,13 +688,13 @@ Editor::update_ruler_visibility ()
        }
 
        if (!Profile->get_sae() && ruler_range_action->get_active()) {
-               old_unit_pos = range_marker_group->property_y();
+               old_unit_pos = range_marker_group->position().y;
                if (tbpos != old_unit_pos) {
-                       range_marker_group->move (0.0, tbpos - old_unit_pos);
+                       range_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
                }
-               old_unit_pos = range_marker_bar_group->property_y();
+               old_unit_pos = range_marker_bar_group->position().y;
                if (tbgpos != old_unit_pos) {
-                       range_marker_bar_group->move (0.0, tbgpos - old_unit_pos);
+                       range_marker_bar_group->move (ArdourCanvas::Duple (0.0, tbgpos - old_unit_pos));
                }
                range_marker_bar_group->show();
                range_marker_group->show();
@@ -721,13 +710,13 @@ Editor::update_ruler_visibility ()
        }
 
        if (ruler_loop_punch_action->get_active()) {
-               old_unit_pos = transport_marker_group->property_y();
+               old_unit_pos = transport_marker_group->position().y;
                if (tbpos != old_unit_pos) {
-                       transport_marker_group->move ( 0.0, tbpos - old_unit_pos);
+                       transport_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
                }
-               old_unit_pos = transport_marker_bar_group->property_y();
+               old_unit_pos = transport_marker_bar_group->position().y;
                if (tbgpos != old_unit_pos) {
-                       transport_marker_bar_group->move ( 0.0, tbgpos - old_unit_pos);
+                       transport_marker_bar_group->move (ArdourCanvas::Duple (0.0, tbgpos - old_unit_pos));
                }
                transport_marker_bar_group->show();
                transport_marker_group->show();
@@ -742,13 +731,13 @@ Editor::update_ruler_visibility ()
        }
 
        if (ruler_cd_marker_action->get_active()) {
-               old_unit_pos = cd_marker_group->property_y();
+               old_unit_pos = cd_marker_group->position().y;
                if (tbpos != old_unit_pos) {
-                       cd_marker_group->move (0.0, tbpos - old_unit_pos);
+                       cd_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
                }
-               old_unit_pos = cd_marker_bar_group->property_y();
+               old_unit_pos = cd_marker_bar_group->position().y;
                if (tbgpos != old_unit_pos) {
-                       cd_marker_bar_group->move (0.0, tbgpos - old_unit_pos);
+                       cd_marker_bar_group->move (ArdourCanvas::Duple (0.0, tbgpos - old_unit_pos));
                }
                cd_marker_bar_group->show();
                cd_marker_group->show();
@@ -767,13 +756,13 @@ Editor::update_ruler_visibility ()
        }
 
        if (ruler_marker_action->get_active()) {
-               old_unit_pos = marker_group->property_y();
+               old_unit_pos = marker_group->position().y;
                if (tbpos != old_unit_pos) {
-                       marker_group->move ( 0.0, tbpos - old_unit_pos);
+                       marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
                }
-               old_unit_pos = marker_bar_group->property_y();
+               old_unit_pos = marker_bar_group->position().y;
                if (tbgpos != old_unit_pos) {
-                       marker_bar_group->move ( 0.0, tbgpos - old_unit_pos);
+                       marker_bar_group->move (ArdourCanvas::Duple (0.0, tbgpos - old_unit_pos));
                }
                marker_bar_group->show();
                marker_group->show();
@@ -787,16 +776,14 @@ Editor::update_ruler_visibility ()
                mark_label.hide();
        }
 
-#ifdef WITH_VIDEOTIMELINE
-
        if (ruler_video_action->get_active()) {
-               old_unit_pos = videotl_group->property_y();
+               old_unit_pos = videotl_group->position().y;
                if (tbpos != old_unit_pos) {
-                       videotl_group->move ( 0.0, tbpos - old_unit_pos);
+                       videotl_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
                }
-               old_unit_pos = videotl_bar_group->property_y();
+               old_unit_pos = videotl_bar_group->position().y;
                if (tbgpos != old_unit_pos) {
-                       videotl_bar_group->move ( 0.0, tbgpos - old_unit_pos);
+                       videotl_bar_group->move (ArdourCanvas::Duple (0.0, tbgpos - old_unit_pos));
                }
                videotl_bar_group->show();
                videotl_group->show();
@@ -811,30 +798,6 @@ Editor::update_ruler_visibility ()
                videotl_label.hide();
          update_video_timeline(true);
        }
-#endif
-
-       gdouble old_canvas_timebars_vsize = canvas_timebars_vsize;
-       canvas_timebars_vsize = (timebar_height * visible_timebars) - 1;
-       gdouble vertical_pos_delta = canvas_timebars_vsize - old_canvas_timebars_vsize;
-       vertical_adjustment.set_upper(vertical_adjustment.get_upper() + vertical_pos_delta);
-       full_canvas_height += vertical_pos_delta;
-
-       if (vertical_adjustment.get_value() != 0 && (vertical_adjustment.get_value() + _canvas_height >= full_canvas_height)) {
-               /*if we're at the bottom of the canvas, don't move the _trackview_group*/
-               vertical_adjustment.set_value (full_canvas_height - _canvas_height + 1);
-       } else {
-               _trackview_group->property_y () = - get_trackview_group_vertical_offset ();
-               _background_group->property_y () = - get_trackview_group_vertical_offset ();
-               _trackview_group->move (0, 0);
-               _background_group->move (0, 0);
-               last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
-       }
-
-       gdouble bottom_track_pos = vertical_adjustment.get_value() + _canvas_height - canvas_timebars_vsize;
-       std::pair<TimeAxisView*, int> const p = trackview_by_y_position (bottom_track_pos);
-       if (p.first) {
-               p.first->clip_to_viewport ();
-       }
 
        ruler_label_vbox.set_size_request (-1, (int)(timebar_height * visible_rulers));
        time_canvas_vbox.set_size_request (-1,-1);
@@ -897,9 +860,9 @@ Editor::update_fixed_rulers ()
 
        compute_fixed_ruler_scale ();
 
-       ruler_metrics[ruler_metric_timecode].units_per_pixel = frames_per_unit;
-       ruler_metrics[ruler_metric_samples].units_per_pixel = frames_per_unit;
-       ruler_metrics[ruler_metric_minsec].units_per_pixel = frames_per_unit;
+       ruler_metrics[ruler_metric_timecode].units_per_pixel = frames_per_pixel;
+       ruler_metrics[ruler_metric_samples].units_per_pixel = frames_per_pixel;
+       ruler_metrics[ruler_metric_minsec].units_per_pixel = frames_per_pixel;
 
        rightmost_frame = leftmost_frame + current_page_frames();
 
@@ -934,7 +897,7 @@ Editor::update_tempo_based_rulers (ARDOUR::TempoMap::BBTPointList::const_iterato
        compute_bbt_ruler_scale (leftmost_frame, leftmost_frame+current_page_frames(),
                                 begin, end);
 
-       ruler_metrics[ruler_metric_bbt].units_per_pixel = frames_per_unit;
+       ruler_metrics[ruler_metric_bbt].units_per_pixel = frames_per_pixel;
 
        if (ruler_bbt_action->get_active()) {
                gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_bbt_ruler), leftmost_frame, leftmost_frame+current_page_frames(),