Tweak Mixer screenshot method, include VCA, master-bus
This commit is contained in:
parent
9cd1fd9e4a
commit
c4cb9ef4d7
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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 ();
|
||||||
|
Loading…
Reference in New Issue
Block a user