OS X-based fixes for splash screen mgmt
git-svn-id: svn://localhost/ardour2/branches/3.0@13006 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
7aa66b6623
commit
2de80a5e90
@ -2396,20 +2396,6 @@ ARDOUR_UI::idle_load (const std::string& path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ARDOUR_UI::loading_message (const std::string& msg)
|
|
||||||
{
|
|
||||||
if (ARDOUR_COMMAND_LINE::no_splash) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!splash) {
|
|
||||||
show_splash ();
|
|
||||||
}
|
|
||||||
|
|
||||||
splash->message (msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param quit_on_cancel true if exit() should be called if the user clicks `cancel' in the new session dialog */
|
/** @param quit_on_cancel true if exit() should be called if the user clicks `cancel' in the new session dialog */
|
||||||
int
|
int
|
||||||
ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, string load_template)
|
ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, string load_template)
|
||||||
@ -2814,7 +2800,7 @@ ARDOUR_UI::launch_manual ()
|
|||||||
void
|
void
|
||||||
ARDOUR_UI::launch_reference ()
|
ARDOUR_UI::launch_reference ()
|
||||||
{
|
{
|
||||||
PBD::open_uri("http://ardour.org/refmanual");
|
PBD::open_uri ("http://ardour.org/refmanual");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -2832,6 +2818,20 @@ ARDOUR_UI::about_signal_response (int /*response*/)
|
|||||||
hide_about();
|
hide_about();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ARDOUR_UI::loading_message (const std::string& msg)
|
||||||
|
{
|
||||||
|
if (ARDOUR_COMMAND_LINE::no_splash) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!splash) {
|
||||||
|
show_splash ();
|
||||||
|
}
|
||||||
|
|
||||||
|
splash->message (msg);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ARDOUR_UI::show_splash ()
|
ARDOUR_UI::show_splash ()
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "pbd/failed_constructor.h"
|
#include "pbd/failed_constructor.h"
|
||||||
#include "pbd/file_utils.h"
|
#include "pbd/file_utils.h"
|
||||||
|
|
||||||
#include "ardour/ardour.h"
|
#include "ardour/ardour.h"
|
||||||
#include "ardour/filesystem_paths.h"
|
#include "ardour/filesystem_paths.h"
|
||||||
|
|
||||||
@ -44,6 +45,7 @@ Splash::Splash ()
|
|||||||
std::string splash_file;
|
std::string splash_file;
|
||||||
|
|
||||||
if (!find_file_in_search_path (ardour_data_search_path(), "splash.png", splash_file)) {
|
if (!find_file_in_search_path (ardour_data_search_path(), "splash.png", splash_file)) {
|
||||||
|
cerr << "Cannot find splash screen image file\n";
|
||||||
throw failed_constructor();
|
throw failed_constructor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,6 +54,7 @@ Splash::Splash ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
catch (...) {
|
catch (...) {
|
||||||
|
cerr << "Cannot construct splash screen image\n";
|
||||||
throw failed_constructor();
|
throw failed_constructor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,6 +80,8 @@ Splash::Splash ()
|
|||||||
set_default_size (pixbuf->get_width(), pixbuf->get_height());
|
set_default_size (pixbuf->get_width(), pixbuf->get_height());
|
||||||
the_splash = this;
|
the_splash = this;
|
||||||
|
|
||||||
|
expose_done = false;
|
||||||
|
|
||||||
ARDOUR::BootMessage.connect (msg_connection, invalidator (*this), boost::bind (&Splash::boot_message, this, _1), gui_context());
|
ARDOUR::BootMessage.connect (msg_connection, invalidator (*this), boost::bind (&Splash::boot_message, this, _1), gui_context());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,40 +90,6 @@ Splash::~Splash ()
|
|||||||
the_splash = 0;
|
the_splash = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
Splash::wakeup_from_splash_sleep ()
|
|
||||||
{
|
|
||||||
splash_done_visible = true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Splash::splash_mapped (GdkEventAny*)
|
|
||||||
{
|
|
||||||
Glib::signal_idle().connect (sigc::mem_fun (this, &Splash::wakeup_from_splash_sleep));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Splash::display ()
|
|
||||||
{
|
|
||||||
bool was_mapped = is_mapped ();
|
|
||||||
|
|
||||||
if (!was_mapped) {
|
|
||||||
signal_map_event().connect (sigc::mem_fun (this, &Splash::splash_mapped), false);
|
|
||||||
splash_done_visible = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pop_front ();
|
|
||||||
present ();
|
|
||||||
|
|
||||||
if (!was_mapped) {
|
|
||||||
while (!splash_done_visible) {
|
|
||||||
gtk_main_iteration ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Splash::pop_back_for (Gtk::Window& win)
|
Splash::pop_back_for (Gtk::Window& win)
|
||||||
{
|
{
|
||||||
@ -141,10 +112,15 @@ Splash::on_realize ()
|
|||||||
layout->set_font_description (get_style()->get_font());
|
layout->set_font_description (get_style()->get_font());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Splash::on_button_release_event (GdkEventButton*)
|
Splash::on_button_release_event (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
|
RefPtr<Gdk::Window> window = get_window();
|
||||||
|
|
||||||
|
if (!window || ev->window != window->gobj()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
hide ();
|
hide ();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -169,6 +145,8 @@ Splash::expose (GdkEventExpose* ev)
|
|||||||
Glib::RefPtr<Gdk::GC> white = style->get_white_gc();
|
Glib::RefPtr<Gdk::GC> white = style->get_white_gc();
|
||||||
|
|
||||||
window->draw_layout (white, 10, pixbuf->get_height() - 30, layout);
|
window->draw_layout (white, 10, pixbuf->get_height() - 30, layout);
|
||||||
|
|
||||||
|
Glib::signal_idle().connect (sigc::mem_fun (this, &Splash::idle_after_expose));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -179,6 +157,32 @@ Splash::boot_message (std::string msg)
|
|||||||
message (msg);
|
message (msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Splash::idle_after_expose ()
|
||||||
|
{
|
||||||
|
expose_done = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Splash::display ()
|
||||||
|
{
|
||||||
|
bool was_mapped = is_mapped ();
|
||||||
|
|
||||||
|
if (!was_mapped) {
|
||||||
|
expose_done = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
pop_front ();
|
||||||
|
present ();
|
||||||
|
|
||||||
|
if (!was_mapped) {
|
||||||
|
while (!expose_done) {
|
||||||
|
gtk_main_iteration ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Splash::message (const string& msg)
|
Splash::message (const string& msg)
|
||||||
{
|
{
|
||||||
@ -190,9 +194,12 @@ Splash::message (const string& msg)
|
|||||||
Glib::RefPtr<Gdk::Window> win = darea.get_window();
|
Glib::RefPtr<Gdk::Window> win = darea.get_window();
|
||||||
|
|
||||||
if (win) {
|
if (win) {
|
||||||
win->invalidate_rect (Gdk::Rectangle (0, darea.get_height() - 30,
|
expose_done = false;
|
||||||
darea.get_width(), 30), true);
|
|
||||||
win->process_updates (true);
|
win->invalidate_rect (Gdk::Rectangle (0, darea.get_height() - 30, darea.get_width(), 30), true);
|
||||||
gdk_flush ();
|
|
||||||
|
while (!expose_done) {
|
||||||
|
gtk_main_iteration ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,9 +58,8 @@ class Splash : public Gtk::Window
|
|||||||
void boot_message (std::string);
|
void boot_message (std::string);
|
||||||
PBD::ScopedConnection msg_connection;
|
PBD::ScopedConnection msg_connection;
|
||||||
|
|
||||||
bool splash_done_visible;
|
bool expose_done;
|
||||||
bool wakeup_from_splash_sleep ();
|
bool idle_after_expose ();
|
||||||
bool splash_mapped (GdkEventAny*);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __ardour_gtk_splash_h__ */
|
#endif /* __ardour_gtk_splash_h__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user