13
0

Tweak Mixer screenshot method, include VCA, master-bus

This commit is contained in:
Robin Gareus 2019-07-18 00:05:32 +02:00
parent 9cd1fd9e4a
commit c4cb9ef4d7
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
4 changed files with 81 additions and 11 deletions

View File

@ -607,11 +607,7 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
control_slave_ui.set_sensitive(true); control_slave_ui.set_sensitive(true);
} }
if (_mixer_owned && route()->is_master() ) { hide_master_spacer (false);
spacer.show();
} else {
spacer.hide();
}
if (is_track()) { if (is_track()) {
monitor_input_button->show (); monitor_input_button->show ();
@ -2675,3 +2671,13 @@ MixerStrip::set_marked_for_display (bool yn)
{ {
return RouteUI::mark_hidden (!yn); return RouteUI::mark_hidden (!yn);
} }
void
MixerStrip::hide_master_spacer (bool yn)
{
if (_mixer_owned && route()->is_master() && !yn) {
spacer.show();
} else {
spacer.hide();
}
}

View File

@ -114,6 +114,9 @@ public:
return _mixer_owned; return _mixer_owned;
} }
/* used for screenshots */
void hide_master_spacer (bool);
void hide_things (); void hide_things ();
sigc::signal<void> WidthChanged; sigc::signal<void> WidthChanged;

View File

@ -3503,21 +3503,82 @@ Mixer_UI::vca_unassign (boost::shared_ptr<VCA> vca)
} }
} }
void bool
Mixer_UI::screenshot (std::string const& filename) Mixer_UI::screenshot (std::string const& filename)
{ {
Gtk::OffscreenWindow osw; if (!_session) {
return false;
}
int height = strip_packer.get_height(); int height = strip_packer.get_height();
bool with_vca = vca_vpacker.is_visible ();
MixerStrip* master = strip_by_route (_session->master_out ());
Gtk::OffscreenWindow osw;
Gtk::HBox b;
osw.add (b);
b.show ();
/* unpack widgets, add to OffscreenWindow */
strip_group_box.remove (strip_packer); strip_group_box.remove (strip_packer);
osw.add (strip_packer); b.pack_start (strip_packer, false, false);
/* hide extra elements inside strip_packer */
add_button.hide (); add_button.hide ();
scroller_base.hide ();
#ifdef MIXBUS
mb_shadow.hide();
#endif
if (with_vca) {
/* work around Gtk::ScrolledWindow */
Gtk::Viewport* viewport = (Gtk::Viewport*) vca_scroller.get_child();
viewport->remove (); // << vca_hpacker
b.pack_start (vca_hpacker, false, false);
/* hide some growing widgets */
add_vca_button.hide ();
vca_scroller_base.hide();
}
if (master) {
out_packer.remove (*master);
b.pack_start (*master, false, false);
master->hide_master_spacer (true);
}
/* prepare the OffscreenWindow for rendering */
osw.set_size_request (-1, height); osw.set_size_request (-1, height);
osw.show (); osw.show ();
osw.queue_resize ();
osw.queue_draw ();
osw.get_window()->process_updates (true); osw.get_window()->process_updates (true);
/* create screenshot */
Glib::RefPtr<Gdk::Pixbuf> pb = osw.get_pixbuf (); Glib::RefPtr<Gdk::Pixbuf> pb = osw.get_pixbuf ();
pb->save (filename, "png"); pb->save (filename, "png");
osw.remove ();
pb.release (); /* unpack elements before destorying the Box & OffscreenWindow */
add_button.show (); list<Gtk::Widget*> children = b.get_children();
strip_group_box.pack_start (strip_packer); for (list<Gtk::Widget*>::iterator child = children.begin(); child != children.end(); ++child) {
b.remove (**child);
}
osw.remove ();
/* now re-pack the widgets into the main mixer window */
add_button.show ();
scroller_base.show ();
#ifdef MIXBUS
mb_shadow.show();
#endif
strip_group_box.pack_start (strip_packer);
if (with_vca) {
add_vca_button.show ();
vca_scroller_base.show();
vca_scroller.add (vca_hpacker);
}
if (master) {
master->hide_master_spacer (false);
out_packer.pack_start (*master, false, false);
}
return true;
} }

View File

@ -147,7 +147,7 @@ public:
void showhide_mixbusses (bool on); void showhide_mixbusses (bool on);
#endif #endif
void screenshot (std::string const&); bool screenshot (std::string const&);
protected: protected:
void set_axis_targets_for_operation (); void set_axis_targets_for_operation ();