From 393ba98422567068bbea8401bee0daeaa7e3e7b6 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 15 Apr 2013 14:45:22 -0400 Subject: [PATCH] tweak time axis view item text positioning; allow ArdourCanvas::Text to have its width clamped, and use this as TAVI's get narrow so that text doesn't overflow --- gtk2_ardour/time_axis_view_item.cc | 13 ++++++------- libs/canvas/canvas/text.h | 7 +++++-- libs/canvas/text.cc | 9 ++++++++- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index ede06796df..aa3c9029d7 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -80,7 +80,7 @@ TimeAxisViewItem::set_constant_heights () Gtkmm2ext::get_ink_pixel_size (layout, width, height); NAME_HEIGHT = height; - NAME_Y_OFFSET = height + 4; + NAME_Y_OFFSET = height + 5; // XXX this offset is magic NAME_HIGHLIGHT_SIZE = height + 2; NAME_HIGHLIGHT_THRESH = NAME_HIGHLIGHT_SIZE * 3; } @@ -523,7 +523,7 @@ TimeAxisViewItem::set_name_text(const string& new_name) last_item_width = trackview.editor().sample_to_pixel(item_duration); name_text_width = pixel_width (new_name, NAME_FONT) + 2; name_text->set (new_name); - // CAIROCANVAS need to limit text to name_text_width or something + } /** @@ -886,7 +886,7 @@ TimeAxisViewItem::reset_name_width (double /*pixel_width*/) { uint32_t it_width; int pb_width; - bool pixbuf_holds_full_name; + bool showing_full_name; if (!name_text) { return; @@ -895,10 +895,10 @@ TimeAxisViewItem::reset_name_width (double /*pixel_width*/) it_width = trackview.editor().sample_to_pixel(item_duration); pb_width = name_text_width; - pixbuf_holds_full_name = last_item_width > pb_width + NAME_X_OFFSET; + showing_full_name = last_item_width > pb_width + NAME_X_OFFSET; last_item_width = it_width; - if (pixbuf_holds_full_name && (it_width >= pb_width + NAME_X_OFFSET)) { + if (showing_full_name && (it_width >= pb_width + NAME_X_OFFSET)) { /* we've previously had the full name length showing and its still showing. @@ -923,8 +923,7 @@ TimeAxisViewItem::reset_name_width (double /*pixel_width*/) } name_text->set (item_name); - // CAIROCANVAS need to limit text length to pb_width - + name_text->clamp_width (pb_width); } /** diff --git a/libs/canvas/canvas/text.h b/libs/canvas/canvas/text.h index c65953783d..e0be922e94 100644 --- a/libs/canvas/canvas/text.h +++ b/libs/canvas/canvas/text.h @@ -24,6 +24,8 @@ public: void set_font_description (Pango::FontDescription); void set_alignment (Pango::Alignment); + void clamp_width (double); + void set_size_chars (int nchars); void dump (std::ostream&) const; @@ -34,9 +36,10 @@ private: Pango::Alignment _alignment; mutable Cairo::RefPtr _image; mutable Duple _origin; - mutable int _width; - mutable int _height; + mutable double _width; + mutable double _height; mutable bool _need_redraw; + double _clamped_width; void redraw (Cairo::RefPtr) const; }; diff --git a/libs/canvas/text.cc b/libs/canvas/text.cc index 9f3f98528b..ed0e7dfae0 100644 --- a/libs/canvas/text.cc +++ b/libs/canvas/text.cc @@ -21,6 +21,7 @@ Text::Text (Group* parent) , _width (0) , _height (0) , _need_redraw (false) + , _clamped_width (COORD_MAX) { } @@ -80,6 +81,12 @@ Text::redraw (Cairo::RefPtr context) const _need_redraw = false; } +void +Text::clamp_width (double w) +{ + _clamped_width = w; +} + void Text::compute_bounding_box () const { @@ -120,7 +127,7 @@ Text::render (Rect const & /*area*/, Cairo::RefPtr context) cons } context->set_source (_image, 0, 0); - context->rectangle (0, 0, _width, _height); + context->rectangle (0, 0, min (_clamped_width, _width), _height); context->fill (); }