mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 03:36:32 +01:00
the big rework of window management. probably not complete at thsi point, but this is mostly functional
This commit is contained in:
parent
69a3310037
commit
40944574c6
27 changed files with 506 additions and 875 deletions
|
|
@ -85,118 +85,6 @@ ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
|
|||
s->restore_history ("");
|
||||
}
|
||||
|
||||
static bool
|
||||
_hide_splash (gpointer arg)
|
||||
{
|
||||
((ARDOUR_UI*)arg)->hide_splash();
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::goto_editor_window ()
|
||||
{
|
||||
if (splash && splash->is_visible()) {
|
||||
// in 2 seconds, hide the splash screen
|
||||
Glib::signal_timeout().connect (sigc::bind (sigc::ptr_fun (_hide_splash), this), 2000);
|
||||
}
|
||||
|
||||
editor->show_window ();
|
||||
editor->present ();
|
||||
flush_pending ();
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::goto_mixer_window ()
|
||||
{
|
||||
if (!editor) {
|
||||
return;
|
||||
}
|
||||
|
||||
Glib::RefPtr<Gdk::Window> win = editor->get_window ();
|
||||
Glib::RefPtr<Gdk::Screen> screen;
|
||||
|
||||
if (win) {
|
||||
screen = win->get_screen();
|
||||
} else {
|
||||
screen = Gdk::Screen::get_default();
|
||||
}
|
||||
|
||||
if (screen && screen->get_height() < 700) {
|
||||
Gtk::MessageDialog msg (_("This screen is not tall enough to display the mixer window"));
|
||||
msg.run ();
|
||||
return;
|
||||
}
|
||||
|
||||
mixer->show_window ();
|
||||
mixer->present ();
|
||||
flush_pending ();
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::toggle_mixer_window ()
|
||||
{
|
||||
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer"));
|
||||
if (!act) {
|
||||
return;
|
||||
}
|
||||
|
||||
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
|
||||
|
||||
if (tact->get_active()) {
|
||||
goto_mixer_window ();
|
||||
} else {
|
||||
mixer->hide ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::toggle_editor_mixer ()
|
||||
{
|
||||
if (editor && mixer) {
|
||||
|
||||
if (editor->get_screen() != mixer->get_screen()) {
|
||||
// different screens, so don't do anything
|
||||
return;
|
||||
}
|
||||
|
||||
/* See if they are obscuring each other */
|
||||
|
||||
gint ex, ey, ew, eh;
|
||||
gint mx, my, mw, mh;
|
||||
|
||||
editor->get_position (ex, ey);
|
||||
editor->get_size (ew, eh);
|
||||
|
||||
mixer->get_position (mx, my);
|
||||
mixer->get_size (mw, mh);
|
||||
|
||||
GdkRectangle e;
|
||||
GdkRectangle m;
|
||||
GdkRectangle r;
|
||||
|
||||
e.x = ex;
|
||||
e.y = ey;
|
||||
e.width = ew;
|
||||
e.height = eh;
|
||||
|
||||
m.x = mx;
|
||||
m.y = my;
|
||||
m.width = mw;
|
||||
m.height = mh;
|
||||
|
||||
if (!gdk_rectangle_intersect (&e, &m, &r)) {
|
||||
/* they do not intersect so do not toggle */
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (mixer && mixer->fully_visible()) {
|
||||
goto_editor_window ();
|
||||
} else {
|
||||
goto_mixer_window ();
|
||||
}
|
||||
}
|
||||
|
||||
/** The main editor window has been closed */
|
||||
gint
|
||||
ARDOUR_UI::exit_on_main_window_close (GdkEventAny * /*ev*/)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue