using namespace Glib;
using namespace PBD;
+int
+pixel_width (const ustring& str, Pango::FontDescription& font)
+{
+ Label foo;
+ Glib::RefPtr<Pango::Layout> layout = foo.create_pango_layout ("");
+
+ layout->set_font_description (font);
+ layout->set_text (str);
+
+ int width, height;
+ Gtkmm2ext::get_ink_pixel_size (layout, width, height);
+ return width;
+}
+
ustring
fit_to_pixels (const ustring& str, int pixel_width, Pango::FontDescription& font, int& actual_width, bool with_ellipses)
{
foobar.ensure_style();
style = foobar.get_style ();
- return style->get_font();
+
+ Glib::RefPtr<const Pango::Layout> layout = foobar.get_layout();
+
+ PangoFontDescription *pfd = (PangoFontDescription *)pango_layout_get_font_description((PangoLayout *)layout->gobj());
+
+ if (!pfd) {
+
+ /* layout inherited its font description from a PangoContext */
+
+ PangoContext* ctxt = (PangoContext*) pango_layout_get_context ((PangoLayout*) layout->gobj());
+ pfd = pango_context_get_font_description (ctxt);
+ return Pango::FontDescription (pfd, true); /* make a copy */
+ }
+
+ return Pango::FontDescription (pfd, true); /* make a copy */
}
uint32_t
}
-ustring
-short_path (ustring path, uint32_t target_characters)
-{
- ustring::size_type last_sep;
- ustring::size_type len = path.length();
- const char separator = '/';
-
- if (len <= target_characters) {
- return path;
- }
-
- if ((last_sep = path.find_last_of (separator)) == ustring::npos) {
-
- /* just a filename, but its too long anyway */
-
- if (target_characters > 3) {
- return path.substr (0, target_characters - 3) + ustring ("...");
- } else {
- /* stupid caller, just hand back the whole thing */
- return path;
- }
- }
-
- if (len - last_sep >= target_characters) {
-
- /* even the filename itself is too long */
-
- if (target_characters > 3) {
- return path.substr (last_sep+1, target_characters - 3) + ustring ("...");
- } else {
- /* stupid caller, just hand back the whole thing */
- return path;
- }
- }
-
- uint32_t so_far = (len - last_sep);
- uint32_t space_for = target_characters - so_far;
-
- if (space_for >= 3) {
- ustring res = "...";
- res += path.substr (last_sep - space_for);
- return res;
- } else {
- /* remove part of the end */
- ustring res = "...";
- res += path.substr (last_sep - space_for, len - last_sep + space_for - 3);
- res += "...";
- return res;
-
- }
-}