diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-07-09 09:11:52 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-07-09 09:11:52 -0400 |
commit | 38f2aa51bd007eaeeaa8ee140143f70f7c53753a (patch) | |
tree | 66172c8ee65f6c2f2cc52b062622014fd2c7b8c3 | |
parent | 37743ea9b1bfda241f8ada87470631acef1e5c4e (diff) | |
parent | 07be5beee7941a193fd55b584e72dbd9c8bea6fb (diff) |
Merge branch 'master' into cairocanvas
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_dialogs.cc | 14 | ||||
-rw-r--r-- | gtk2_ardour/ardour_window.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/io_selector.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/location_ui.cc | 57 | ||||
-rw-r--r-- | gtk2_ardour/location_ui.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/midi_time_axis.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/plugin_ui.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/port_insert_ui.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/region_editor.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/return_ui.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/route_params_ui.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/send_ui.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/splash.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/step_editor.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/window_manager.cc | 53 | ||||
-rw-r--r-- | gtk2_ardour/window_manager.h | 29 | ||||
-rw-r--r-- | libs/ardour/meter.cc | 12 | ||||
-rw-r--r-- | libs/ardour/track.cc | 2 |
20 files changed, 135 insertions, 66 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 0998546888..20b6515739 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -153,6 +153,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) /* big clock */ , big_clock (new AudioClock (X_("bigclock"), false, "big", true, true, false, false)) + , video_timeline(0) /* start of private members */ @@ -903,6 +904,7 @@ If you still wish to quit, please use the\n\n\ } delete ARDOUR_UI::instance()->video_timeline; + ARDOUR_UI::instance()->video_timeline = NULL; stop_video_server(); /* Save state before deleting the session, as that causes some diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 02b1efaa2e..e8d94bbe04 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -65,14 +65,7 @@ ARDOUR_UI::set_session (Session *s) { SessionHandlePtr::set_session (s); - if (audio_port_matrix) { - audio_port_matrix->set_session (s); - } - - if (midi_port_matrix) { - midi_port_matrix->set_session (s); - } - + WM::Manager::instance().set_session (s); if (!_session) { /* Session option editor cannot exist across change-of-session */ @@ -95,7 +88,6 @@ ARDOUR_UI::set_session (Session *s) } AutomationWatch::instance().set_session (s); - WM::Manager::instance().set_session (s); if (shuttle_box) { shuttle_box->set_session (s); @@ -106,7 +98,6 @@ ARDOUR_UI::set_session (Session *s) big_clock->set_session (s); time_info_box->set_session (s); video_timeline->set_session (s); - location_ui->set_session (s); /* sensitize menu bar options that are now valid */ @@ -222,6 +213,9 @@ ARDOUR_UI::unload_session (bool hide_stuff) editor->hide (); mixer->hide (); theme_manager->hide (); + audio_port_matrix->hide(); + midi_port_matrix->hide(); + route_params->hide(); } second_connection.disconnect (); diff --git a/gtk2_ardour/ardour_window.cc b/gtk2_ardour/ardour_window.cc index eb5b919b52..b50a83c31f 100644 --- a/gtk2_ardour/ardour_window.cc +++ b/gtk2_ardour/ardour_window.cc @@ -84,7 +84,6 @@ ArdourWindow::on_unmap () bool ArdourWindow::on_delete_event (GdkEventAny*) { - hide (); return false; } diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 2929d5cb2b..c38f5dbb63 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -969,7 +969,7 @@ GainMeter::render_metrics (Gtk::Widget& w, vector<DataType> types) //font = w.get_style()->get_font(); font.set_weight (Pango::WEIGHT_NORMAL); - font.set_size (10.0 * PANGO_SCALE); + font.set_size (9.0 * PANGO_SCALE); font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font)); audio_font_attributes.change (*font_attr); delete font_attr; @@ -1057,10 +1057,11 @@ GainMeter::render_metrics (Gtk::Widget& w, vector<DataType> types) } gint const pos = height - (gint) floor (height * fraction); + float const linepos = min((float) height, (float)(pos + .5f)); cairo_set_line_width (cr, 1.0); - cairo_move_to (cr, 0, pos); - cairo_line_to (cr, 3.5, pos); + cairo_move_to (cr, 0, linepos); + cairo_line_to (cr, 3.5, linepos); cairo_stroke (cr); snprintf (buf, sizeof (buf), "%2d", abs (*j)); diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc index 544963f666..31f8cfa1cb 100644 --- a/gtk2_ardour/io_selector.cc +++ b/gtk2_ardour/io_selector.cc @@ -235,8 +235,7 @@ bool IOSelectorWindow::wm_delete (GdkEventAny* /*event*/) { _selector.Finished (IOSelector::Accepted); - hide (); - return true; + return false; } diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc index 9b9f3bfa22..92f11da019 100644 --- a/gtk2_ardour/location_ui.cc +++ b/gtk2_ardour/location_ui.cc @@ -307,6 +307,10 @@ LocationEditRow::set_location (Location *loc) end_clock.show(); length_clock.show(); + if (location->is_cd_marker()) { + show_cd_track_details (); + } + ARDOUR_UI::instance()->set_tip (remove_button, _("Remove this range")); ARDOUR_UI::instance()->set_tip (start_clock, _("Start time - middle click to locate here")); ARDOUR_UI::instance()->set_tip (end_clock, _("End time - middle click to locate here")); @@ -447,6 +451,34 @@ LocationEditRow::clock_changed (LocationPart part) } void +LocationEditRow::show_cd_track_details () +{ + + if (location->cd_info.find("isrc") != location->cd_info.end()) { + isrc_entry.set_text(location->cd_info["isrc"]); + } + if (location->cd_info.find("performer") != location->cd_info.end()) { + performer_entry.set_text(location->cd_info["performer"]); + } + if (location->cd_info.find("composer") != location->cd_info.end()) { + composer_entry.set_text(location->cd_info["composer"]); + } + if (location->cd_info.find("scms") != location->cd_info.end()) { + scms_check_button.set_active(true); + } + if (location->cd_info.find("preemph") != location->cd_info.end()) { + preemph_check_button.set_active(true); + } + + + if (!cd_track_details_hbox.get_parent()) { + item_table.attach (cd_track_details_hbox, 0, 7, 1, 2, FILL | EXPAND, FILL, 4, 0); + } + // item_table.resize(2, 7); + cd_track_details_hbox.show_all(); +} + +void LocationEditRow::cd_toggled () { if (i_am_the_modifier || !location) { @@ -469,27 +501,7 @@ LocationEditRow::cd_toggled () if (location->is_cd_marker() && !(location->is_mark())) { - if (location->cd_info.find("isrc") != location->cd_info.end()) { - isrc_entry.set_text(location->cd_info["isrc"]); - } - if (location->cd_info.find("performer") != location->cd_info.end()) { - performer_entry.set_text(location->cd_info["performer"]); - } - if (location->cd_info.find("composer") != location->cd_info.end()) { - composer_entry.set_text(location->cd_info["composer"]); - } - if (location->cd_info.find("scms") != location->cd_info.end()) { - scms_check_button.set_active(true); - } - if (location->cd_info.find("preemph") != location->cd_info.end()) { - preemph_check_button.set_active(true); - } - - if (!cd_track_details_hbox.get_parent()) { - item_table.attach (cd_track_details_hbox, 0, 7, 1, 2, FILL | EXPAND, FILL, 4, 0); - } - // item_table.resize(2, 7); - cd_track_details_hbox.show_all(); + show_cd_track_details (); } else if (cd_track_details_hbox.get_parent()){ @@ -1153,8 +1165,7 @@ LocationUIWindow::on_map () bool LocationUIWindow::on_delete_event (GdkEventAny*) { - hide (); - return true; + return false; } void diff --git a/gtk2_ardour/location_ui.h b/gtk2_ardour/location_ui.h index b01b63e8e4..395464e049 100644 --- a/gtk2_ardour/location_ui.h +++ b/gtk2_ardour/location_ui.h @@ -140,6 +140,7 @@ class LocationEditRow : public Gtk::HBox, public ARDOUR::SessionHandlePtr void position_lock_style_changed (ARDOUR::Location *); void set_clock_editable_status (); + void show_cd_track_details (); PBD::ScopedConnectionList connections; }; diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index b4841a50c6..002efb9910 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -199,7 +199,7 @@ MidiTimeAxisView::set_route (boost::shared_ptr<Route> rt) v->pack_start (*manage (new Label ("")), true, true); v->show (); h->show (); - controls_hbox.pack_start(*v); + controls_hbox.pack_start(*v, false, false); controls_ebox.set_name ("MidiTrackControlsBaseUnselected"); controls_base_selected_name = "MidiTrackControlsBaseSelected"; diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index 9a85b78454..d9741f5e39 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -148,7 +148,6 @@ PluginUIWindow::PluginUIWindow ( set_name ("PluginEditor"); add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window*> (this)), false); insert->DropReferences.connect (death_connection, invalidator (*this), boost::bind (&PluginUIWindow::plugin_going_away, this), gui_context()); gint h = _pluginui->get_preferred_height (); diff --git a/gtk2_ardour/port_insert_ui.cc b/gtk2_ardour/port_insert_ui.cc index 16beb75877..0511b357db 100644 --- a/gtk2_ardour/port_insert_ui.cc +++ b/gtk2_ardour/port_insert_ui.cc @@ -184,7 +184,7 @@ bool PortInsertWindow::wm_delete (GdkEventAny* /*event*/) { accept (); - return true; + return false; } void diff --git a/gtk2_ardour/region_editor.cc b/gtk2_ardour/region_editor.cc index 51e4deddc8..564938ad5c 100644 --- a/gtk2_ardour/region_editor.cc +++ b/gtk2_ardour/region_editor.cc @@ -161,7 +161,6 @@ RegionEditor::RegionEditor (Session* s, boost::shared_ptr<Region> r) set_name ("RegionEditorWindow"); add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK); - signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (this))); signal_response().connect (sigc::mem_fun (*this, &RegionEditor::handle_response)); set_title (string_compose (_("Region '%1'"), _region->name())); diff --git a/gtk2_ardour/return_ui.cc b/gtk2_ardour/return_ui.cc index 8120534b7d..592fff0a0e 100644 --- a/gtk2_ardour/return_ui.cc +++ b/gtk2_ardour/return_ui.cc @@ -111,7 +111,6 @@ ReturnUIWindow::ReturnUIWindow (boost::shared_ptr<Return> r, ARDOUR::Session* s) set_name ("ReturnUIWindow"); r->DropReferences.connect (going_away_connection, invalidator (*this), boost::bind (&ReturnUIWindow::return_going_away, this), gui_context()); - signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window *> (this))); } ReturnUIWindow::~ReturnUIWindow () diff --git a/gtk2_ardour/route_params_ui.cc b/gtk2_ardour/route_params_ui.cc index 56ed380404..e9ddb54d41 100644 --- a/gtk2_ardour/route_params_ui.cc +++ b/gtk2_ardour/route_params_ui.cc @@ -146,11 +146,6 @@ RouteParams_UI::RouteParams_UI () add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::BUTTON_RELEASE_MASK); _plugin_selector = new PluginSelector (PluginManager::instance()); - _plugin_selector->signal_delete_event().connect (sigc::bind (ptr_fun (just_hide_it), - static_cast<Window *> (_plugin_selector))); - - - signal_delete_event().connect(sigc::bind(ptr_fun(just_hide_it), static_cast<Gtk::Window *>(this))); } RouteParams_UI::~RouteParams_UI () diff --git a/gtk2_ardour/send_ui.cc b/gtk2_ardour/send_ui.cc index e9699f2cfe..4a16c57259 100644 --- a/gtk2_ardour/send_ui.cc +++ b/gtk2_ardour/send_ui.cc @@ -133,10 +133,6 @@ SendUIWindow::SendUIWindow (boost::shared_ptr<Send> s, Session* session) hpacker.show (); s->DropReferences.connect (going_away_connection, invalidator (*this), boost::bind (&SendUIWindow::send_going_away, this), gui_context()); - - signal_delete_event().connect (sigc::bind ( - sigc::ptr_fun (just_hide_it), - reinterpret_cast<Window *> (this))); } SendUIWindow::~SendUIWindow () diff --git a/gtk2_ardour/splash.cc b/gtk2_ardour/splash.cc index 99adff68e9..b606ec6050 100644 --- a/gtk2_ardour/splash.cc +++ b/gtk2_ardour/splash.cc @@ -236,7 +236,7 @@ Splash::message (const string& msg) } while (!expose_done) { - gtk_main_iteration (); + if(gtk_main_iteration ()) return; // quit was called } gdk_display_flush (gdk_display_get_default()); } diff --git a/gtk2_ardour/step_editor.cc b/gtk2_ardour/step_editor.cc index c6c34d6c17..4665da348b 100644 --- a/gtk2_ardour/step_editor.cc +++ b/gtk2_ardour/step_editor.cc @@ -149,7 +149,7 @@ bool StepEditor::step_editor_hidden (GdkEventAny*) { step_editor_hide (); - return true; + return true; // XXX remember position ?! } void diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index b76958d4d4..629e24419b 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -52,6 +52,10 @@ Manager::Manager () { } +Manager::~Manager () +{ +} + void Manager::register_window (ProxyBase* info) { @@ -120,11 +124,9 @@ Manager::add_state (XMLNode& root) const void Manager::set_session (ARDOUR::Session* s) { + SessionHandlePtr::set_session (s); for (Windows::const_iterator i = _windows.begin(); i != _windows.end(); ++i) { - ARDOUR::SessionHandlePtr* sp = (*i)->session_handle (); - if (sp) { - sp->set_session (s); - } + (*i)->set_session(s); } } @@ -263,8 +265,27 @@ ProxyBase::toggle() _window->show_all(); /* we'd like to just call this and nothing else */ _window->present (); + + if (_width != -1 && _height != -1) { + _window->set_default_size (_width, _height); + } + if (_x_off != -1 && _y_off != -1) { + _window->move (_x_off, _y_off); + } + } else { + if (_window->is_mapped()) { + save_pos_and_size(); + } vistracker->cycle_visibility (); + if (_window->is_mapped()) { + if (_width != -1 && _height != -1) { + _window->set_default_size (_width, _height); + } + if (_x_off != -1 && _y_off != -1) { + _window->move (_x_off, _y_off); + } + } } } @@ -281,8 +302,10 @@ ProxyBase::get_state () const /* we have a window, so use current state */ _visible = vistracker->partially_visible (); - _window->get_position (_x_off, _y_off); - _window->get_size (_width, _height); + if (_visible) { + _window->get_position (_x_off, _y_off); + _window->get_size (_width, _height); + } } node->add_property (X_("visible"), _visible? X_("yes") : X_("no")); @@ -325,6 +348,7 @@ ProxyBase::setup () assert (_window); vistracker = new Gtkmm2ext::VisibilityTracker (*_window); + _window->signal_delete_event().connect (sigc::mem_fun (*this, &ProxyBase::handle_win_event)); if (_width != -1 || _height != -1 || _x_off != -1 || _y_off != -1) { /* cancel any mouse-based positioning */ @@ -338,6 +362,7 @@ ProxyBase::setup () if (_x_off != -1 && _y_off != -1) { _window->move (_x_off, _y_off); } + set_session(_session); } void @@ -379,10 +404,25 @@ ProxyBase::hide () { Gtk::Window* win = get (false); if (win) { + save_pos_and_size(); win->hide (); } } +bool +ProxyBase::handle_win_event (GdkEventAny *ev) +{ + hide(); + return true; +} + +void +ProxyBase::save_pos_and_size () +{ + Gtk::Window* win = get (false); + win->get_position (_x_off, _y_off); + win->get_size (_width, _height); +} /*-----------------------*/ ProxyTemporary::ProxyTemporary (const string& name, Gtk::Window* win) @@ -395,6 +435,7 @@ ProxyTemporary::~ProxyTemporary () { } + ARDOUR::SessionHandlePtr* ProxyTemporary::session_handle() { diff --git a/gtk2_ardour/window_manager.h b/gtk2_ardour/window_manager.h index 7138a95e7b..3a80840891 100644 --- a/gtk2_ardour/window_manager.h +++ b/gtk2_ardour/window_manager.h @@ -47,7 +47,7 @@ namespace WM { class ProxyBase; -class Manager +class Manager : public ARDOUR::SessionHandlePtr { public: static Manager& instance(); @@ -75,7 +75,7 @@ class Manager static Manager* _instance; }; -class ProxyBase : public sigc::trackable { +class ProxyBase : public ARDOUR::SessionHandlePtr, public sigc::trackable { public: ProxyBase (const std::string& name, const std::string& menu_name); ProxyBase (const std::string& name, const std::string& menu_name, const XMLNode&); @@ -106,7 +106,7 @@ class ProxyBase : public sigc::trackable { XMLNode& get_state () const; virtual ARDOUR::SessionHandlePtr* session_handle () = 0; - + operator bool() const { return _window != 0; } protected: @@ -120,6 +120,9 @@ class ProxyBase : public sigc::trackable { mutable int _width; ///< width mutable int _height; ///< height Gtkmm2ext::VisibilityTracker* vistracker; + + void save_pos_and_size (); + bool handle_win_event (GdkEventAny *ev); void setup (); }; @@ -137,7 +140,7 @@ class ProxyTemporary: public ProxyBase { Gtk::Window* operator->() { return _window; } - + ARDOUR::SessionHandlePtr* session_handle (); }; @@ -175,6 +178,15 @@ class ProxyWithConstructor: public ProxyBase { return dynamic_cast<T*> (_window); } + void set_session(ARDOUR::Session *s) { + SessionHandlePtr::set_session (s); + ARDOUR::SessionHandlePtr* sp = session_handle (); + if (sp) { + sp->set_session (s); + dynamic_cast<T*>(_window)->set_session(s); + } + } + private: boost::function<T*()> creator; }; @@ -213,6 +225,15 @@ class Proxy : public ProxyBase { return dynamic_cast<T*> (_window); } + void set_session(ARDOUR::Session *s) { + SessionHandlePtr::set_session (s); + ARDOUR::SessionHandlePtr* sp = session_handle (); + if (sp) { + sp->set_session (s); + dynamic_cast<T*>(_window)->set_session(s); + } + } + private: boost::function<T*()> creator; }; diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc index 38c5bb63de..4d096aae89 100644 --- a/libs/ardour/meter.cc +++ b/libs/ardour/meter.cc @@ -137,6 +137,18 @@ PeakMeter::reflect_inputs (const ChanCount& in) { current_meters = in; + const size_t limit = min (_peak_power.size(), (size_t) current_meters.n_total ()); + const size_t n_midi = min (_peak_power.size(), (size_t) current_meters.n_midi()); + + for (size_t n = 0; n < limit; ++n) { + if (n < n_midi) { + _visible_peak_power[n] = 0; + } else { + _visible_peak_power[n] = -INFINITY; + } + } + reset_max(); + ConfigurationChanged (in, in); /* EMIT SIGNAL */ } diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index dd21819e47..6d153e1cbf 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -945,6 +945,6 @@ Track::set_monitoring (MonitorChoice mc) MeterState Track::metering_state () const { - return _diskstream->record_enabled() ? MeteringInput : MeteringRoute; + return (_diskstream->record_enabled() || _meter_point == MeterInput) ? MeteringInput : MeteringRoute; } |