X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_tempodisplay.cc;h=5f998ada9fa5a0602c39cb874a790d9b8e5ffb60;hb=912da52a539981193941d8739fa6f103b5e406db;hp=804fe3eabc381f48140ce3dba862286cccf194c7;hpb=183f69970c6c436b102f8b2fbe1bc6070c9e9bfe;p=ardour.git diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index 804fe3eabc..5f998ada9f 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -24,7 +24,7 @@ #include #include -#include +#include #include @@ -34,20 +34,24 @@ #include #include #include +#include #include "editor.h" #include "marker.h" -#include "canvas-simpleline.h" +#include "simpleline.h" #include "tempo_dialog.h" #include "rgb_macros.h" #include "gui_thread.h" +#include "color.h" #include "i18n.h" using namespace std; using namespace sigc; using namespace ARDOUR; +using namespace PBD; using namespace Gtk; +using namespace Gtkmm2ext; using namespace Editing; void @@ -72,11 +76,11 @@ Editor::draw_metric_marks (const Metrics& metrics) if ((ms = dynamic_cast(*i)) != 0) { snprintf (buf, sizeof(buf), "%g/%g", ms->beats_per_bar(), ms->note_divisor ()); metric_marks.push_back (new MeterMarker (*this, *meter_group, color_map[cMeterMarker], buf, - *(const_cast(ms)), PublicEditor::canvas_meter_marker_event)); + *(const_cast(ms)))); } else if ((ts = dynamic_cast(*i)) != 0) { snprintf (buf, sizeof (buf), "%.2f", ts->beats_per_minute()); metric_marks.push_back (new TempoMarker (*this, *tempo_group, color_map[cTempoMarker], buf, - *(const_cast(ts)), PublicEditor::canvas_tempo_marker_event)); + *(const_cast(ts)))); } } @@ -126,14 +130,13 @@ Editor::hide_measures () used_measure_lines.clear (); } -Gnome::Canvas::Line * +ArdourCanvas::SimpleLine * Editor::get_time_line () { - Gnome::Canvas::Line *line; + ArdourCanvas::SimpleLine *line; if (free_measure_lines.empty()) { - line = new Gnome::Canvas::Line (*time_line_group); - // cerr << "measure line @ " << line << endl; + line = new ArdourCanvas::SimpleLine (*time_line_group); used_measure_lines.push_back (line); } else { line = free_measure_lines.front(); @@ -153,7 +156,7 @@ Editor::draw_measures () TempoMap::BBTPointList::iterator i; TempoMap::BBTPointList *all_bbt_points; - Gnome::Canvas::Line *line; + ArdourCanvas::SimpleLine *line; gdouble xpos, last_xpos; uint32_t cnt; uint32_t color; @@ -180,7 +183,7 @@ Editor::draw_measures () break; case TempoMap::Beat: - xpos = p.frame / (gdouble) frames_per_unit; + xpos = frame_to_unit (p.frame); if (last_beat < xpos) { beat_spacing = xpos - last_beat; } @@ -188,6 +191,9 @@ Editor::draw_measures () } } + double x1, x2, y1, y2; + track_canvas.get_scroll_region (x1, y1, x2, y2); + for (i = all_bbt_points->begin(); i != all_bbt_points->end(); ++i) { TempoMap::BBTPoint& p = (*i); @@ -197,8 +203,8 @@ Editor::draw_measures () break; case TempoMap::Beat: - xpos = p.frame / (gdouble) frames_per_unit; - + xpos = frame_to_unit (p.frame); + if (p.beat == 1) { color = color_map[cMeasureLineBeat]; } else { @@ -212,13 +218,13 @@ Editor::draw_measures () break; } } - + if (cnt == 0 || xpos - last_xpos > 4.0) { line = get_time_line (); - line->set_property ("x1", xpos); - line->set_property ("x2", xpos); - line->set_property ("y2", (gdouble) canvas_height); - line->set_property ("color_rgba", color); + line->property_x1() = xpos; + line->property_x2() = xpos; + line->property_y2() = y2; + line->property_color_rgba() = color; line->raise_to_top(); line->show(); last_xpos = xpos; @@ -243,41 +249,36 @@ Editor::mouse_add_new_tempo_event (jack_nframes_t frame) return; } - TempoMap& map(session->tempo_map()); TempoDialog tempo_dialog (map, frame, _("add")); - tempo_dialog.bpm_entry.signal_activate().connect (bind (mem_fun (tempo_dialog, &ArdourDialog::stop), 0)); - tempo_dialog.ok_button.signal_clicked().connect (bind (mem_fun (tempo_dialog, &ArdourDialog::stop), 0)); - tempo_dialog.cancel_button.signal_clicked().connect (bind (mem_fun (tempo_dialog, &ArdourDialog::stop), -1)); - tempo_dialog.set_position (Gtk::WIN_POS_MOUSE); - // GTK2FIX - // tempo_dialog.realize (); - // tempo_dialog.get_window()->set_decorations (Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)); + tempo_dialog.signal_realize().connect (bind (sigc::ptr_fun (set_decoration), &tempo_dialog, Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH))); ensure_float (tempo_dialog); - tempo_dialog.run(); - - if (tempo_dialog.run_status() == 0) { - - double bpm = 0; - BBT_Time requested; - - bpm = tempo_dialog.get_bpm (); - bpm = max (0.01, bpm); - - tempo_dialog.get_bbt_time (requested); - - begin_reversible_command (_("add tempo mark")); - session->add_undo (map.get_memento()); - map.add_tempo (Tempo (bpm), requested); - session->add_redo_no_execute (map.get_memento()); - commit_reversible_command (); - - map.dump (cerr); + switch (tempo_dialog.run()) { + case RESPONSE_ACCEPT: + break; + default: + return; } + + double bpm = 0; + BBT_Time requested; + + bpm = tempo_dialog.get_bpm (); + bpm = max (0.01, bpm); + + tempo_dialog.get_bbt_time (requested); + + begin_reversible_command (_("add tempo mark")); + session->add_undo (map.get_memento()); + map.add_tempo (Tempo (bpm), requested); + session->add_redo_no_execute (map.get_memento()); + commit_reversible_command (); + + map.dump (cerr); } void @@ -291,45 +292,42 @@ Editor::mouse_add_new_meter_event (jack_nframes_t frame) TempoMap& map(session->tempo_map()); MeterDialog meter_dialog (map, frame, _("add")); - meter_dialog.ok_button.signal_clicked().connect (bind (mem_fun (meter_dialog, &ArdourDialog::stop), 0)); - meter_dialog.cancel_button.signal_clicked().connect (bind (mem_fun (meter_dialog, &ArdourDialog::stop), -1)); - meter_dialog.set_position (Gtk::WIN_POS_MOUSE); - // GTK2FIX - // meter_dialog.realize (); - // meter_dialog.get_window()->set_decorations (Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)); + meter_dialog.signal_realize().connect (bind (sigc::ptr_fun (set_decoration), &meter_dialog, Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH))); ensure_float (meter_dialog); - meter_dialog.run (); - - if (meter_dialog.run_status() == 0) { - - double bpb = meter_dialog.get_bpb (); - bpb = max (1.0, bpb); // XXX is this a reasonable limit? - - double note_type = meter_dialog.get_note_type (); - BBT_Time requested; - - meter_dialog.get_bbt_time (requested); - - begin_reversible_command (_("add meter mark")); - session->add_undo (map.get_memento()); - map.add_meter (Meter (bpb, note_type), requested); - session->add_redo_no_execute (map.get_memento()); - commit_reversible_command (); - - map.dump (cerr); + switch (meter_dialog.run ()) { + case RESPONSE_ACCEPT: + break; + default: + return; } + + double bpb = meter_dialog.get_bpb (); + bpb = max (1.0, bpb); // XXX is this a reasonable limit? + + double note_type = meter_dialog.get_note_type (); + BBT_Time requested; + + meter_dialog.get_bbt_time (requested); + + begin_reversible_command (_("add meter mark")); + session->add_undo (map.get_memento()); + map.add_meter (Meter (bpb, note_type), requested); + session->add_redo_no_execute (map.get_memento()); + commit_reversible_command (); + + map.dump (cerr); } void -Editor::remove_tempo_marker (Gnome::Canvas::Item* item) +Editor::remove_tempo_marker (ArdourCanvas::Item* item) { Marker* marker; TempoMarker* tempo_marker; - if ((marker = reinterpret_cast (gtk_object_get_data (GTK_OBJECT(item), "marker"))) == 0) { + if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; /*NOTREACHED*/ } @@ -349,31 +347,27 @@ Editor::edit_meter_section (MeterSection* section) { MeterDialog meter_dialog (*section, _("done")); - meter_dialog.ok_button.signal_clicked().connect (bind (mem_fun (meter_dialog, &ArdourDialog::stop), 0)); - meter_dialog.cancel_button.signal_clicked().connect (bind (mem_fun (meter_dialog, &ArdourDialog::stop), -1)); - meter_dialog.set_position (Gtk::WIN_POS_MOUSE); - // GTK2FIX - // meter_dialog.realize (); - // meter_dialog.get_window()->set_decorations (Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)); ensure_float (meter_dialog); - meter_dialog.run (); - - if (meter_dialog.run_status() == 0) { - - double bpb = meter_dialog.get_bpb (); - bpb = max (1.0, bpb); // XXX is this a reasonable limit? + switch (meter_dialog.run()) { + case RESPONSE_ACCEPT: + break; + default: + return; + } - double note_type = meter_dialog.get_note_type (); + double bpb = meter_dialog.get_bpb (); + bpb = max (1.0, bpb); // XXX is this a reasonable limit? + + double note_type = meter_dialog.get_note_type (); - begin_reversible_command (_("replace tempo mark")); - session->add_undo (session->tempo_map().get_memento()); - session->tempo_map().replace_meter (*section, Meter (bpb, note_type)); - session->add_redo_no_execute (session->tempo_map().get_memento()); - commit_reversible_command (); - } + begin_reversible_command (_("replace tempo mark")); + session->add_undo (session->tempo_map().get_memento()); + session->tempo_map().replace_meter (*section, Meter (bpb, note_type)); + session->add_redo_no_execute (session->tempo_map().get_memento()); + commit_reversible_command (); } void @@ -381,42 +375,37 @@ Editor::edit_tempo_section (TempoSection* section) { TempoDialog tempo_dialog (*section, _("done")); - tempo_dialog.bpm_entry.signal_activate().connect (bind (mem_fun (tempo_dialog, &ArdourDialog::stop), 0)); - tempo_dialog.ok_button.signal_clicked().connect (bind (mem_fun (tempo_dialog, &ArdourDialog::stop), 0)); - tempo_dialog.cancel_button.signal_clicked().connect (bind (mem_fun (tempo_dialog, &ArdourDialog::stop), -1)); - tempo_dialog.set_position (Gtk::WIN_POS_MOUSE); - // GTK2FIX - // tempo_dialog.realize (); - // tempo_dialog.get_window()->set_decorations (Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)); ensure_float (tempo_dialog); - tempo_dialog.run (); - - if (tempo_dialog.run_status() == 0) { - - double bpm = tempo_dialog.get_bpm (); - BBT_Time when; - tempo_dialog.get_bbt_time(when); - bpm = max (0.01, bpm); - - begin_reversible_command (_("replace tempo mark")); - session->add_undo (session->tempo_map().get_memento()); - session->tempo_map().replace_tempo (*section, Tempo (bpm)); - session->tempo_map().move_tempo (*section, when); - session->add_redo_no_execute (session->tempo_map().get_memento()); - commit_reversible_command (); + switch (tempo_dialog.run ()) { + case RESPONSE_ACCEPT: + break; + default: + return; } + + double bpm = tempo_dialog.get_bpm (); + BBT_Time when; + tempo_dialog.get_bbt_time(when); + bpm = max (0.01, bpm); + + begin_reversible_command (_("replace tempo mark")); + session->add_undo (session->tempo_map().get_memento()); + session->tempo_map().replace_tempo (*section, Tempo (bpm)); + session->tempo_map().move_tempo (*section, when); + session->add_redo_no_execute (session->tempo_map().get_memento()); + commit_reversible_command (); } void -Editor::edit_tempo_marker (Gnome::Canvas::Item *item) +Editor::edit_tempo_marker (ArdourCanvas::Item *item) { Marker* marker; TempoMarker* tempo_marker; - if ((marker = reinterpret_cast (gtk_object_get_data (GTK_OBJECT(item), "marker"))) == 0) { + if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; /*NOTREACHED*/ } @@ -430,12 +419,12 @@ Editor::edit_tempo_marker (Gnome::Canvas::Item *item) } void -Editor::edit_meter_marker (Gnome::Canvas::Item *item) +Editor::edit_meter_marker (ArdourCanvas::Item *item) { Marker* marker; MeterMarker* meter_marker; - if ((marker = reinterpret_cast (gtk_object_get_data (GTK_OBJECT(item), "marker"))) == 0) { + if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; /*NOTREACHED*/ } @@ -461,12 +450,12 @@ Editor::real_remove_tempo_marker (TempoSection *section) } void -Editor::remove_meter_marker (Gnome::Canvas::Item* item) +Editor::remove_meter_marker (ArdourCanvas::Item* item) { Marker* marker; MeterMarker* meter_marker; - if ((marker = reinterpret_cast (gtk_object_get_data (GTK_OBJECT(item), "marker"))) == 0) { + if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: meter marker canvas item has no marker object pointer!") << endmsg; /*NOTREACHED*/ }