size-based scrolling and right-click pages for editor notebook
[ardour.git] / gtk2_ardour / utils.cc
index 2798e0e29eeb6417a38b3b6a7bc73caa5b118888..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;
@@ -315,9 +317,9 @@ get_canvas_points (string who, uint32_t 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")) {
@@ -407,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();
 
@@ -478,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 ();
        
@@ -497,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;
 }