size-based scrolling and right-click pages for editor notebook
[ardour.git] / gtk2_ardour / utils.cc
index 8998b56229ecc371fdd5d52d59a26fcd450b7ac7..290339cad86e93bc0309e01a8b18104bb5f6baae 100644 (file)
@@ -105,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;
@@ -409,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();
 
@@ -480,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 ();
        
@@ -499,6 +513,8 @@ 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);
 }