+ _bbt_ruler = gtk_custom_hruler_new ();
+ bbt_ruler = Glib::wrap (_bbt_ruler);
+ bbt_ruler->set_name ("BBTRuler");
+ bbt_ruler->set_size_request (-1, (int)timebar_height);
+ gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_bbt_ruler), &ruler_metrics[ruler_metric_bbt]);
+ bbt_ruler->hide ();
+ bbt_ruler->set_no_show_all();
+ minsec_ruler->hide ();
+ minsec_ruler->set_no_show_all();
+ minsec_nmarks = 0;
+
+ 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::iterator canvaspos = ruler_children.begin();
+
+ lab_children.push_back (Element(meter_label, PACK_SHRINK, PACK_START));
+ lab_children.push_back (Element(tempo_label, PACK_SHRINK, PACK_START));
+ lab_children.push_back (Element(range_mark_label, PACK_SHRINK, PACK_START));
+ 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));
+
+ ruler_lab_children.push_back (Element(minsec_label, PACK_SHRINK, PACK_START));
+ ruler_children.insert (canvaspos, Element(*minsec_ruler, PACK_SHRINK, PACK_START));
+ ruler_lab_children.push_back (Element(timecode_label, PACK_SHRINK, PACK_START));
+ ruler_children.insert (canvaspos, Element(*timecode_ruler, PACK_SHRINK, PACK_START));
+ ruler_lab_children.push_back (Element(frame_label, PACK_SHRINK, PACK_START));
+ ruler_children.insert (canvaspos, Element(*frames_ruler, PACK_SHRINK, PACK_START));
+ ruler_lab_children.push_back (Element(bbt_label, PACK_SHRINK, PACK_START));
+ ruler_children.insert (canvaspos, Element(*bbt_ruler, PACK_SHRINK, PACK_START));
+
+ timecode_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
+ bbt_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
+ frames_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
+ minsec_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
+
+ timecode_ruler->signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_release));
+ bbt_ruler->signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_release));
+ frames_ruler->signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_release));
+ minsec_ruler->signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_release));
+
+ timecode_ruler->signal_button_press_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_press));
+ bbt_ruler->signal_button_press_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_press));
+ frames_ruler->signal_button_press_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_press));
+ minsec_ruler->signal_button_press_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_press));
+
+ timecode_ruler->signal_motion_notify_event().connect (sigc::mem_fun(*this, &Editor::ruler_mouse_motion));
+ bbt_ruler->signal_motion_notify_event().connect (sigc::mem_fun(*this, &Editor::ruler_mouse_motion));
+ frames_ruler->signal_motion_notify_event().connect (sigc::mem_fun(*this, &Editor::ruler_mouse_motion));
+ minsec_ruler->signal_motion_notify_event().connect (sigc::mem_fun(*this, &Editor::ruler_mouse_motion));
+
+ timecode_ruler->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::ruler_scroll));
+ bbt_ruler->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::ruler_scroll));
+ frames_ruler->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::ruler_scroll));
+ 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
+Editor::ruler_scroll (GdkEventScroll* event)
+{
+ nframes64_t xdelta;
+ int direction = event->direction;
+ bool handled = false;
+
+ switch (direction) {
+ case GDK_SCROLL_UP:
+ temporal_zoom_step (true);
+ handled = true;
+ break;
+
+ case GDK_SCROLL_DOWN:
+ temporal_zoom_step (false);
+ handled = true;
+ break;