remove "New Return" menu option from processor box; make return toggle processor...
[ardour.git] / gtk2_ardour / splash.cc
index e901521e37cfb77d480516c910a7a88a47f106ef..bba754dc108f07afbdca8e432d7bbeabfac21605 100644 (file)
@@ -1,16 +1,18 @@
 #include <string>
 
-#include <pbd/failed_constructor.h>
-#include <pbd/file_utils.h>
-#include <ardour/ardour.h>
-#include <ardour/filesystem_paths.h>
+#include "pbd/failed_constructor.h"
+#include "pbd/file_utils.h"
+#include "ardour/ardour.h"
+#include "ardour/filesystem_paths.h"
 
+#include "gui_thread.h"
 #include "splash.h"
 
 #include "i18n.h"
 
 using namespace Gtk;
 using namespace Glib;
+using namespace PBD;
 using namespace std;
 using namespace ARDOUR;
 
@@ -20,7 +22,7 @@ Splash::Splash ()
 {
        sys::path splash_file;
 
-       if (!find_file_in_search_path (ardour_search_path(), "splash.png", splash_file)) {
+       if (!find_file_in_search_path (ardour_search_path() + system_data_search_path(), "splash.png", splash_file)) {
                throw failed_constructor();
        }
 
@@ -31,11 +33,12 @@ Splash::Splash ()
        catch (...) {
                throw failed_constructor();
        }
-       
+
        darea.set_size_request (pixbuf->get_width(), pixbuf->get_height());
        set_keep_above (true);
        set_position (WIN_POS_CENTER);
        darea.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
+       darea.set_double_buffered (false);
 
        layout = create_pango_layout ("");
        string str = "<b>";
@@ -50,7 +53,10 @@ Splash::Splash ()
 
        add (darea);
 
+       set_default_size (pixbuf->get_width(), pixbuf->get_height());
        the_splash = this;
+
+       ARDOUR::BootMessage.connect (mem_fun (*this, &Splash::boot_message));
 }
 
 void
@@ -69,7 +75,7 @@ Splash::on_realize ()
 
 
 bool
-Splash::on_button_release_event (GdkEventButton* ev)
+Splash::on_button_release_event (GdkEventButton*)
 {
        hide ();
        return true;
@@ -80,10 +86,15 @@ Splash::expose (GdkEventExpose* ev)
 {
        RefPtr<Gdk::Window> window = darea.get_window();
 
+       /* note: height & width need to be constrained to the pixbuf size
+          in case a WM provides us with a screwy allocation
+       */
+
        window->draw_pixbuf (get_style()->get_bg_gc (STATE_NORMAL), pixbuf,
                             ev->area.x, ev->area.y,
                             ev->area.x, ev->area.y,
-                            ev->area.width, ev->area.height,
+                            min ((pixbuf->get_width() - ev->area.x), ev->area.width),
+                            min ((pixbuf->get_height() - ev->area.y), ev->area.height),
                             Gdk::RGB_DITHER_NONE, 0, 0);
 
        Glib::RefPtr<Gtk::Style> style = darea.get_style();
@@ -94,6 +105,12 @@ Splash::expose (GdkEventExpose* ev)
        return true;
 }
 
+void
+Splash::boot_message (std::string msg)
+{
+       message (msg);
+}
+
 void
 Splash::message (const string& msg)
 {
@@ -102,6 +119,12 @@ Splash::message (const string& msg)
        str += "</b>";
 
        layout->set_markup (str);
-       darea.queue_draw ();
-       get_window()->process_updates (true);
+       Glib::RefPtr<Gdk::Window> win = darea.get_window();
+
+       if (win) {
+               win->invalidate_rect (Gdk::Rectangle (0, darea.get_height() - 30,
+                                                     darea.get_width(), 30), true);
+               win->process_updates (true);
+               gdk_flush ();
+       }
 }