summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-07-09 09:11:52 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-07-09 09:11:52 -0400
commit38f2aa51bd007eaeeaa8ee140143f70f7c53753a (patch)
tree66172c8ee65f6c2f2cc52b062622014fd2c7b8c3
parent37743ea9b1bfda241f8ada87470631acef1e5c4e (diff)
parent07be5beee7941a193fd55b584e72dbd9c8bea6fb (diff)
Merge branch 'master' into cairocanvas
-rw-r--r--gtk2_ardour/ardour_ui.cc2
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc14
-rw-r--r--gtk2_ardour/ardour_window.cc1
-rw-r--r--gtk2_ardour/gain_meter.cc7
-rw-r--r--gtk2_ardour/io_selector.cc3
-rw-r--r--gtk2_ardour/location_ui.cc57
-rw-r--r--gtk2_ardour/location_ui.h1
-rw-r--r--gtk2_ardour/midi_time_axis.cc2
-rw-r--r--gtk2_ardour/plugin_ui.cc1
-rw-r--r--gtk2_ardour/port_insert_ui.cc2
-rw-r--r--gtk2_ardour/region_editor.cc1
-rw-r--r--gtk2_ardour/return_ui.cc1
-rw-r--r--gtk2_ardour/route_params_ui.cc5
-rw-r--r--gtk2_ardour/send_ui.cc4
-rw-r--r--gtk2_ardour/splash.cc2
-rw-r--r--gtk2_ardour/step_editor.cc2
-rw-r--r--gtk2_ardour/window_manager.cc53
-rw-r--r--gtk2_ardour/window_manager.h29
-rw-r--r--libs/ardour/meter.cc12
-rw-r--r--libs/ardour/track.cc2
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;
}