#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;
+using namespace sigc;
string
short_version (string orig, string::size_type target_length)
}
string
-fit_to_pixels (string str, int32_t pixel_width, Gdk_Font& font)
+fit_to_pixels (ARDOUR::stringcr_t str, int pixel_width, ARDOUR::stringcr_t font)
{
- gint width;
- gint lbearing;
- gint rbearing;
- gint ascent;
- gint descent;
-
+ Label foo;
+ int width;
+ int height;
+ Pango::FontDescription fontdesc (font);
+
int namelen = str.length();
char cstr[namelen+1];
strcpy (cstr, str.c_str());
while (namelen) {
-
- gdk_string_extents (font,
- cstr,
- &lbearing,
- &rbearing,
- &width,
- &ascent,
- &descent);
+ Glib::RefPtr<Pango::Layout> layout = foo.create_pango_layout (cstr);
+
+ layout->set_font_description (fontdesc);
+ layout->get_pixel_size (width, height);
if (width < (pixel_width)) {
break;
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
// PARSE HEADER
if ( sscanf(xpm[0], "%u%u%u%u", &w, &h, &colors, &cpp) != 4 ) {
- error << compose (_("bad XPM header %1"), xpm[0])
+ error << string_compose (_("bad XPM header %1"), xpm[0])
<< endmsg;
return 0;
}
// PARSE HEADER
if ( sscanf(xpm[0], "%u%u%u%u", &w, &h, &colors, &cpp) != 4 ) {
- error << compose (_("bad XPM header %1"), xpm[0])
+ error << string_compose (_("bad XPM header %1"), xpm[0])
<< endmsg;
return 0;
}
return (savergb);
}
-GtkCanvasPoints*
+ArdourCanvas::Points*
get_canvas_points (string who, uint32_t npoints)
{
// cerr << who << ": wants " << npoints << " canvas points" << endl;
abort ();
}
#endif
- return gtk_canvas_points_new (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")) {
}
}
-string
+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();
- if (foobar.get_style() == 0 || foobar.get_style()->gobj()->rc_style == 0 || foobar.get_style()->gobj()->rc_style->font_name == 0) {
- return "fixed";
- }
-
- string str = foobar.get_style()->gobj()->rc_style->font_name;
-
- if (str.empty()) {
- return "fixed"; // standard X Window fallback font
- } else {
- return str;
- }
+ style = foobar.get_style ();
+ return style->get_font();
}
+
gint
pane_handler (GdkEventButton* ev, Gtk::Paned* pane)
{
gint pos;
gint cmp;
-
- pos = Gtkmm2ext::gtk_paned_get_position (pane->gobj());
+
+ pos = pane->get_position ();
if (dynamic_cast<VPaned*>(pane)) {
- cmp = pane->height();
+ cmp = pane->get_height();
} else {
- cmp = pane->width();
+ cmp = pane->get_width();
}
/* we have to use approximations here because we can't predict the
pane->set_position (1);
} else {
if (dynamic_cast<VPaned*>(pane)) {
- pane->set_position (pane->height());
+ pane->set_position (pane->get_height());
} else {
- pane->set_position (pane->width());
+ pane->set_position (pane->get_width());
}
}
}
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 ();
a = waverc->fg[GTK_STATE_ACTIVE].red / 257;
} else {
- warning << compose (_("missing RGBA style for \"%1\""), style) << endl;
+ warning << string_compose (_("missing RGBA style for \"%1\""), style) << endl;
}
+
+ window->remove ();
return (uint32_t) RGBA_TO_UINT(r,g,b,a);
}
+
+bool
+canvas_item_visible (ArdourCanvas::Item* item)
+{
+ return (item->gobj()->object.flags & GNOME_CANVAS_ITEM_VISIBLE) ? true : false;
+}