a-fluidsynth: implement LV2_BANKPATCH__notify
[ardour.git] / gtk2_ardour / mouse_cursors.cc
index 37a0118b334c1606c5b652c6b9e379316a0a4166..afe743a7d3225d4eb3fd8fee1fbc779a11b9e21c 100644 (file)
@@ -27,6 +27,8 @@
 
 using namespace ARDOUR_UI_UTILS;
 
+Gdk::Cursor* MouseCursors::_invalid = 0;
+
 MouseCursors::MouseCursors ()
        : cross_hair (0)
        , scissors (0)
@@ -70,6 +72,11 @@ MouseCursors::MouseCursors ()
 {
 }
 
+MouseCursors::~MouseCursors ()
+{
+       drop_all ();
+}
+
 void
 MouseCursors::drop_all ()
 {
@@ -135,11 +142,18 @@ MouseCursors::set_cursor_set (const std::string& name)
        using namespace Gdk;
 
        drop_all ();
+       Gtkmm2ext::CursorInfo::drop_cursor_info();
        _cursor_set = name;
 
+       std::string hotspot_info_path = get_icon_path ("hotspots", _cursor_set, false);
+
+       if (!hotspot_info_path.empty()) {
+               Gtkmm2ext::CursorInfo::load_cursor_info (hotspot_info_path);
+       }
+
        /* these will throw exceptions if their images cannot be found.
-          
-          the default hotspot coordinates will be overridden by any 
+
+          the default hotspot coordinates will be overridden by any
           data found by Gtkmm2ext::Cursors::load_cursor_info(). the values
           here from the set of cursors used by Ardour; new cursor/icon
           sets should come with a hotspot info file.
@@ -205,3 +219,12 @@ MouseCursors::set_cursor_set (const std::string& name)
        midi_erase = new Cursor (DRAPED_BOX);
        up_down = new Cursor (SB_V_DOUBLE_ARROW);
 }
+
+void
+MouseCursors::create_invalid()
+{
+       char pix[4] = { 0, 0, 0, 0 };
+       Glib::RefPtr<Gdk::Bitmap> bits = Gdk::Bitmap::create (pix, 2, 2);
+       Gdk::Color c;
+       _invalid = new Gdk::Cursor (bits, bits, c, c, 0, 0);
+}