size-based scrolling and right-click pages for editor notebook
[ardour.git] / gtk2_ardour / utils.cc
index 0e1b3c80f5f94b7cb918e0532c369477a83b87b5..290339cad86e93bc0309e01a8b18104bb5f6baae 100644 (file)
 #include <gtkmm2ext/utils.h>
 
 #include "ardour_ui.h"
+#include "keyboard.h"
 #include "utils.h"
 #include "i18n.h"
 #include "rgb_macros.h"
+#include "canvas_impl.h"
 
 using namespace std;
 using namespace Gtk;
@@ -103,7 +105,7 @@ short_version (string orig, string::size_type target_length)
 }
 
 string
-fit_to_pixels (string str, int pixel_width, string font)
+fit_to_pixels (ARDOUR::stringcr_t str, int pixel_width, ARDOUR::stringcr_t font)
 {
        Label foo;
        int width;
@@ -185,17 +187,10 @@ internationalize (const char **array)
 gint
 just_hide_it (GdkEventAny *ev, Gtk::Window *win)
 {
-       ARDOUR_UI::instance()->allow_focus (false);
        win->hide_all ();
        return TRUE;
 }
 
-void
-allow_keyboard_focus (bool yn)
-{
-       ARDOUR_UI::instance()->allow_focus (yn);
-}
-
 /* xpm2rgb copied from nixieclock, which bore the legend:
 
     nixieclock - a nixie desktop timepiece
@@ -309,7 +304,7 @@ xpm2rgba (const char** xpm, uint32_t& w, uint32_t& h)
        return (savergb);
 }
 
-Gnome::Canvas::Points*
+ArdourCanvas::Points*
 get_canvas_points (string who, uint32_t npoints)
 {
        // cerr << who << ": wants " << npoints << " canvas points" << endl;
@@ -318,13 +313,13 @@ get_canvas_points (string who, uint32_t npoints)
                abort ();
        }
 #endif
-       return new Gnome::Canvas::Points (npoints);
+       return new ArdourCanvas::Points (npoints);
 }
 
 int
-channel_combo_get_channel_count (Gtk::Combo& combo)
+channel_combo_get_channel_count (Gtk::ComboBoxText& combo)
 {
-       string str = combo.get_entry()->get_text();
+       string str = combo.get_active_text();
        int chns;
 
        if (str == _("mono")) {
@@ -414,9 +409,11 @@ url_decode (string& url)
 Pango::FontDescription
 get_font_for_style (string widgetname)
 {
+       Gtk::Window window (WINDOW_TOPLEVEL);
        Gtk::Label foobar;
        Glib::RefPtr<Style> style;
 
+       window.add (foobar);
        foobar.set_name (widgetname);
        foobar.ensure_style();
 
@@ -485,8 +482,20 @@ pane_handler (GdkEventButton* ev, Gtk::Paned* pane)
 uint32_t
 rgba_from_style (string style, uint32_t r, uint32_t g, uint32_t b, uint32_t a)
 {
+       /* In GTK+2, styles aren't set up correctly if the widget is not
+          attached to a toplevel window that has a screen pointer.
+       */
+
+       static Gtk::Window* window = 0;
+
+       if (window == 0) {
+               window = new Window (WINDOW_TOPLEVEL);
+       }
+
        Gtk::Label foo;
        
+       window->add (foo);
+
        foo.set_name (style);
        foo.ensure_style ();
        
@@ -504,12 +513,14 @@ rgba_from_style (string style, uint32_t r, uint32_t g, uint32_t b, uint32_t a)
        } else {
                warning << string_compose (_("missing RGBA style for \"%1\""), style) << endl;
        }
+
+       window->remove ();
        
        return (uint32_t) RGBA_TO_UINT(r,g,b,a);
 }
 
-void
-decorate (Gtk::Window& w, Gdk::WMDecoration d)
+bool 
+canvas_item_visible (ArdourCanvas::Item* item)
 {
-       w.get_window()->set_decorations (d);
+       return (item->gobj()->object.flags & GNOME_CANVAS_ITEM_VISIBLE) ? true : false;
 }