X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_tempodisplay.cc;h=cbb3dcbdfedb287fb810bf4d7d24f3f2379ffdef;hb=f4203cce7ec0b8be13293e0a86f69693ec1cd977;hp=7421ebee47865b09dc37d11b13e806d0e06efe0b;hpb=96eee9e7a162e3e26dd9c1ea4d8fc1ad02a3dda9;p=ardour.git diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index 7421ebee47..cbb3dcbdfe 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -40,6 +40,7 @@ #include "canvas/canvas.h" #include "canvas/item.h" +#include "canvas/line_set.h" #include "editor.h" #include "marker.h" @@ -49,7 +50,6 @@ #include "time_axis_view.h" #include "ardour_ui.h" #include "tempo_lines.h" -#include "utils.h" #include "i18n.h" @@ -85,15 +85,15 @@ Editor::draw_metric_marks (const Metrics& metrics) if ((ms = dynamic_cast(*i)) != 0) { snprintf (buf, sizeof(buf), "%g/%g", ms->divisions_per_bar(), ms->note_divisor ()); - metric_marks.push_back (new MeterMarker (*this, *meter_group, ARDOUR_UI::config()->get_canvasvar_MeterMarker(), buf, + metric_marks.push_back (new MeterMarker (*this, *meter_group, ARDOUR_UI::config()->color ("meter marker"), buf, *(const_cast(ms)))); } else if ((ts = dynamic_cast(*i)) != 0) { - if (Config->get_allow_non_quarter_pulse()) { + if (ARDOUR_UI::config()->get_allow_non_quarter_pulse()) { snprintf (buf, sizeof (buf), "%.2f/%.0f", ts->beats_per_minute(), ts->note_type()); } else { snprintf (buf, sizeof (buf), "%.2f", ts->beats_per_minute()); } - metric_marks.push_back (new TempoMarker (*this, *tempo_group, ARDOUR_UI::config()->get_canvasvar_TempoMarker(), buf, + metric_marks.push_back (new TempoMarker (*this, *tempo_group, ARDOUR_UI::config()->color ("tempo marker"), buf, *(const_cast(ts)))); } @@ -119,7 +119,7 @@ Editor::tempo_map_changed (const PropertyChange& /*ignored*/) compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_samples(), begin, end); _session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers - redraw_measures (); + draw_measures (begin, end); update_tempo_based_rulers (begin, end); } @@ -130,22 +130,18 @@ Editor::redisplay_tempo (bool immediate_redraw) return; } - ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin; - ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end; - - compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_samples(), - current_bbt_points_begin, current_bbt_points_end); - if (immediate_redraw) { - redraw_measures (); + ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin; + ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end; + + compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_samples(), + current_bbt_points_begin, current_bbt_points_end); + draw_measures (current_bbt_points_begin, current_bbt_points_end); + update_tempo_based_rulers (current_bbt_points_begin, current_bbt_points_end); // redraw rulers and measures + } else { -#ifdef GTKOSX - redraw_measures (); -#else - Glib::signal_idle().connect (sigc::mem_fun (*this, &Editor::redraw_measures)); -#endif + Glib::signal_idle().connect (sigc::bind_return (sigc::bind (sigc::mem_fun (*this, &Editor::redisplay_tempo), true), false)); } - update_tempo_based_rulers (current_bbt_points_begin, current_bbt_points_end); // redraw rulers and measures } void @@ -166,20 +162,9 @@ Editor::compute_current_bbt_points (framepos_t leftmost, framepos_t rightmost, void Editor::hide_measures () { - if (tempo_lines) + if (tempo_lines) { tempo_lines->hide(); -} - -bool -Editor::redraw_measures () -{ - ARDOUR::TempoMap::BBTPointList::const_iterator begin; - ARDOUR::TempoMap::BBTPointList::const_iterator end; - - compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_samples(), begin, end); - draw_measures (begin, end); - - return false; + } } void @@ -191,10 +176,11 @@ Editor::draw_measures (ARDOUR::TempoMap::BBTPointList::const_iterator& begin, } if (tempo_lines == 0) { - tempo_lines = new TempoLines (*_track_canvas_viewport, time_line_group, physical_screen_height(get_window())); + tempo_lines = new TempoLines (time_line_group, ArdourCanvas::LineSet::Vertical); } - - tempo_lines->draw (begin, end, samples_per_pixel); + + const unsigned divisions = get_grid_beat_divisions(leftmost_frame); + tempo_lines->draw (begin, end, divisions, leftmost_frame, _session->frame_rate()); } void @@ -207,7 +193,6 @@ Editor::mouse_add_new_tempo_event (framepos_t frame) TempoMap& map(_session->tempo_map()); TempoDialog tempo_dialog (map, frame, _("add")); - tempo_dialog.set_position (Gtk::WIN_POS_MOUSE); //this causes compiz to display no border. //tempo_dialog.signal_realize().connect (sigc::bind (sigc::ptr_fun (set_decoration), &tempo_dialog, Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH))); @@ -250,8 +235,6 @@ Editor::mouse_add_new_meter_event (framepos_t frame) TempoMap& map(_session->tempo_map()); MeterDialog meter_dialog (map, frame, _("add")); - meter_dialog.set_position (Gtk::WIN_POS_MOUSE); - //this causes compiz to display no border.. //meter_dialog.signal_realize().connect (sigc::bind (sigc::ptr_fun (set_decoration), &meter_dialog, Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH))); @@ -289,12 +272,12 @@ Editor::remove_tempo_marker (ArdourCanvas::Item* item) if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((tempo_marker = dynamic_cast (marker)) == 0) { fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (tempo_marker->tempo().movable()) { @@ -307,8 +290,6 @@ Editor::edit_meter_section (MeterSection* section) { MeterDialog meter_dialog (*section, _("done")); - meter_dialog.set_position (Gtk::WIN_POS_MOUSE); - ensure_float (meter_dialog); switch (meter_dialog.run()) { @@ -339,8 +320,6 @@ Editor::edit_tempo_section (TempoSection* section) { TempoDialog tempo_dialog (*section, _("done")); - tempo_dialog.set_position (Gtk::WIN_POS_MOUSE); - ensure_float (tempo_dialog); switch (tempo_dialog.run ()) { @@ -365,41 +344,15 @@ Editor::edit_tempo_section (TempoSection* section) } void -Editor::edit_tempo_marker (ArdourCanvas::Item *item) +Editor::edit_tempo_marker (TempoMarker& tm) { - Marker* marker; - TempoMarker* tempo_marker; - - if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { - fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ - } - - if ((tempo_marker = dynamic_cast (marker)) == 0) { - fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg; - /*NOTREACHED*/ - } - - edit_tempo_section (&tempo_marker->tempo()); + edit_tempo_section (&tm.tempo()); } void -Editor::edit_meter_marker (ArdourCanvas::Item *item) +Editor::edit_meter_marker (MeterMarker& mm) { - Marker* marker; - MeterMarker* meter_marker; - - if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { - fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ - } - - if ((meter_marker = dynamic_cast (marker)) == 0) { - fatal << _("programming error: marker for meter is not a meter marker!") << endmsg; - /*NOTREACHED*/ - } - - edit_meter_section (&meter_marker->meter()); + edit_meter_section (&mm.meter()); } gint @@ -423,12 +376,12 @@ Editor::remove_meter_marker (ArdourCanvas::Item* item) if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: meter marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((meter_marker = dynamic_cast (marker)) == 0) { fatal << _("programming error: marker for meter is not a meter marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (meter_marker->meter().movable()) {