X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ftime_axis_view_item.cc;h=db141a9f01b8acf79dd27b381531359e21a04428;hb=a7f4f660956250cc98cc519321ad5b8e715f9d0f;hp=bab9e9e1b5f34e7c4780cc0c514a54b153205abd;hpb=5c819462b8f146b25a7dbe2c948a8407e7c5dbbb;p=ardour.git diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index bab9e9e1b5..db141a9f01 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -15,13 +15,15 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ -#include +#include "pbd/error.h" +#include "pbd/stacktrace.h" -#include -#include +#include "ardour/types.h" +#include "ardour/ardour.h" + +#include #include "public_editor.h" #include "time_axis_view_item.h" @@ -30,23 +32,27 @@ #include "utils.h" #include "canvas_impl.h" #include "rgb_macros.h" +#include "ardour_ui.h" #include "i18n.h" using namespace std; using namespace Editing; using namespace Glib; +using namespace PBD; +using namespace ARDOUR; //------------------------------------------------------------------------------ -/** Initialize static memeber data */ -Pango::FontDescription TimeAxisViewItem::NAME_FONT; +/** Initialize const static memeber data */ + +Pango::FontDescription* TimeAxisViewItem::NAME_FONT = 0; bool TimeAxisViewItem::have_name_font = false; const double TimeAxisViewItem::NAME_X_OFFSET = 15.0; -const double TimeAxisViewItem::NAME_Y_OFFSET = 15.0 ; /* XXX depends a lot on the font size, sigh. */ -const double TimeAxisViewItem::NAME_HIGHLIGHT_SIZE = 15.0 ; /* ditto */ -const double TimeAxisViewItem::NAME_HIGHLIGHT_THRESH = 32.0 ; /* ditto */ const double TimeAxisViewItem::GRAB_HANDLE_LENGTH = 6 ; +double TimeAxisViewItem::NAME_Y_OFFSET; +double TimeAxisViewItem::NAME_HIGHLIGHT_SIZE; +double TimeAxisViewItem::NAME_HIGHLIGHT_THRESH; //---------------------------------------------------------------------------------------// // Constructor / Desctructor @@ -62,65 +68,122 @@ const double TimeAxisViewItem::GRAB_HANDLE_LENGTH = 6 ; * @param start the start point of this item * @param duration the duration of this item */ -TimeAxisViewItem::TimeAxisViewItem(const string & it_name, ArdourCanvas::Group& parent, TimeAxisView& tv, double spu, Gdk::Color& base_color, - jack_nframes_t start, jack_nframes_t duration, - Visibility visibility) - : trackview (tv) +TimeAxisViewItem::TimeAxisViewItem(const string & it_name, ArdourCanvas::Group& parent, TimeAxisView& tv, double spu, Gdk::Color const & base_color, + nframes_t start, nframes_t duration, bool recording, + Visibility vis) + : trackview (tv), _recregion(recording) { if (!have_name_font) { + + /* first constructed item sets up font info */ + NAME_FONT = get_font_for_style (N_("TimeAxisViewItemName")); + + Gtk::Window win; + Gtk::Label foo; + win.add (foo); + + Glib::RefPtr layout = foo.create_pango_layout (X_("Hg")); /* ascender + descender */ + int width; + int height; + + layout->set_font_description (*NAME_FONT); + Gtkmm2ext::get_ink_pixel_size (layout, width, height); + + NAME_Y_OFFSET = height + 5; + NAME_HIGHLIGHT_SIZE = height + 6; + NAME_HIGHLIGHT_THRESH = NAME_HIGHLIGHT_SIZE * 2; + have_name_font = true; } + group = new ArdourCanvas::Group (parent); + + init (it_name, spu, base_color, start, duration, vis); + +} + +TimeAxisViewItem::TimeAxisViewItem (const TimeAxisViewItem& other) + : sigc::trackable(other) + , trackview (other.trackview) +{ + + Gdk::Color c; + int r,g,b,a; + + UINT_TO_RGBA (other.fill_color, &r, &g, &b, &a); + c.set_rgb_p (r/255.0, g/255.0, b/255.0); + + /* share the other's parent, but still create a new group */ + + Gnome::Canvas::Group* parent = other.group->property_parent(); + + group = new ArdourCanvas::Group (*parent); + + init (other.item_name, other.samples_per_unit, c, other.frame_position, other.item_duration, other.visibility); +} + +void +TimeAxisViewItem::init (const string& it_name, double spu, Gdk::Color const & base_color, nframes_t start, nframes_t duration, Visibility vis) +{ item_name = it_name ; samples_per_unit = spu ; should_show_selection = true; frame_position = start ; item_duration = duration ; name_connected = false; - fill_opacity = 50; + fill_opacity = 60; position_locked = false ; max_item_duration = ARDOUR::max_frames; min_item_duration = 0 ; show_vestigial = true; + visibility = vis; + _sensitive = true; if (duration == 0) { warning << "Time Axis Item Duration == 0" << endl ; } - group = new ArdourCanvas::Group (parent); - - vestigial_frame = new ArdourCanvas::SimpleRect (*group); - vestigial_frame->property_x1() = (double) 0.0; - vestigial_frame->property_y1() = (double) 1.0; - vestigial_frame->property_x2() = 2.0; - vestigial_frame->property_y2() = (double) trackview.height; - vestigial_frame->property_outline_color_rgba() = color_map[cVestigialFrameOutline]; - vestigial_frame->property_fill_color_rgba() = color_map[cVestigialFrameFill]; + vestigial_frame = new ArdourCanvas::SimpleRect (*group, 0.0, 1.0, 2.0, trackview.current_height()); vestigial_frame->hide (); + vestigial_frame->property_outline_what() = 0xF; + vestigial_frame->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_VestigialFrame.get(); + vestigial_frame->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_VestigialFrame.get(); if (visibility & ShowFrame) { - frame = new ArdourCanvas::SimpleRect (*group); - frame->property_x1() = (double) 0.0; - frame->property_y1() = (double) 1.0; - frame->property_x2() = (double) trackview.editor.frame_to_pixel(duration); - frame->property_y2() = (double) trackview.height; - frame->property_outline_color_rgba() = color_map[cTimeAxisFrameOutline]; - frame->property_fill_color_rgba() = color_map[cTimeAxisFrameFill]; + frame = new ArdourCanvas::SimpleRect (*group, 0.0, 1.0, trackview.editor().frame_to_pixel(duration), trackview.current_height()); + frame->property_outline_pixels() = 1; + frame->property_outline_what() = 0xF; + frame->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_TimeAxisFrame.get(); + + /* by default draw all 4 edges */ + + uint32_t outline_what = 0x1|0x2|0x4|0x8; + if (visibility & HideFrameLeft) { + outline_what &= ~(0x1); + } + + if (visibility & HideFrameRight) { + outline_what &= ~(0x2); + } + + if (visibility & HideFrameTB) { + outline_what &= ~(0x4 | 0x8); + } + + frame->property_outline_what() = outline_what; + } else { frame = 0; } if (visibility & ShowNameHighlight) { - name_highlight = new ArdourCanvas::SimpleRect (*group); - name_highlight->property_x1() = (double) 1.0; - name_highlight->property_x2() = (double) (trackview.editor.frame_to_pixel(item_duration)) - 1; - name_highlight->property_y1() = (double) (trackview.height - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE); - name_highlight->property_y2() = (double) (trackview.height - 1); - name_highlight->property_outline_color_rgba() = color_map[cNameHighlightFill]; - name_highlight->property_fill_color_rgba() = color_map[cNameHighlightOutline]; - + if (visibility & FullWidthNameHighlight) { + name_highlight = new ArdourCanvas::SimpleRect (*group, 0.0, trackview.editor().frame_to_pixel(item_duration), trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE, trackview.current_height() - 1); + } else { + name_highlight = new ArdourCanvas::SimpleRect (*group, 1.0, trackview.editor().frame_to_pixel(item_duration) - 1, trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE, trackview.current_height() - 1); + } name_highlight->set_data ("timeaxisviewitem", this); } else { @@ -128,36 +191,23 @@ TimeAxisViewItem::TimeAxisViewItem(const string & it_name, ArdourCanvas::Group& } if (visibility & ShowNameText) { - name_text = new ArdourCanvas::Text (*group); - name_text->property_x() = (double) TimeAxisViewItem::NAME_X_OFFSET; - name_text->property_y() = (double) trackview.height + 1.0 - TimeAxisViewItem::NAME_Y_OFFSET; - name_text->property_font_desc() = NAME_FONT; - name_text->property_anchor() = Gtk::ANCHOR_NW; - - name_text->set_data ("timeaxisviewitem", this); - + name_pixbuf = new ArdourCanvas::Pixbuf(*group); + name_pixbuf->property_x() = NAME_X_OFFSET; + name_pixbuf->property_y() = trackview.current_height() - 1.0 - NAME_Y_OFFSET; + } else { - name_text = 0; + name_pixbuf = 0; } /* create our grab handles used for trimming/duration etc */ if (visibility & ShowHandles) { - frame_handle_start = new ArdourCanvas::SimpleRect (*group); - frame_handle_start->property_x1() = (double) 0.0; - frame_handle_start->property_x2() = (double) TimeAxisViewItem::GRAB_HANDLE_LENGTH; - frame_handle_start->property_y1() = (double) 1.0; - frame_handle_start->property_y2() = (double) TimeAxisViewItem::GRAB_HANDLE_LENGTH+1; - frame_handle_start->property_outline_color_rgba() = color_map[cFrameHandleStartOutline]; - frame_handle_start->property_fill_color_rgba() = color_map[cFrameHandleStartFill]; - - frame_handle_end = new ArdourCanvas::SimpleRect (*group); - frame_handle_end->property_x1() = (double) (trackview.editor.frame_to_pixel(get_duration())) - (TimeAxisViewItem::GRAB_HANDLE_LENGTH); - frame_handle_end->property_x2() = (double) trackview.editor.frame_to_pixel(get_duration()); - frame_handle_end->property_y1() = (double) 1; - frame_handle_end->property_y2() = (double) TimeAxisViewItem::GRAB_HANDLE_LENGTH + 1; - frame_handle_end->property_outline_color_rgba() = color_map[cFrameHandleEndOutline]; - frame_handle_end->property_fill_color_rgba() = color_map[cFrameHandleEndFill]; + + frame_handle_start = new ArdourCanvas::SimpleRect (*group, 0.0, TimeAxisViewItem::GRAB_HANDLE_LENGTH, 1.0, TimeAxisViewItem::GRAB_HANDLE_LENGTH+1); + frame_handle_start->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_FrameHandle.get(); + + frame_handle_end = new ArdourCanvas::SimpleRect (*group, trackview.editor().frame_to_pixel(get_duration()) - TimeAxisViewItem::GRAB_HANDLE_LENGTH, trackview.editor().frame_to_pixel(get_duration()), 1.0, TimeAxisViewItem::GRAB_HANDLE_LENGTH + 1); + frame_handle_end->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_FrameHandle.get(); } else { frame_handle_start = 0; @@ -170,7 +220,6 @@ TimeAxisViewItem::TimeAxisViewItem(const string & it_name, ArdourCanvas::Group& set_position (start, this) ; } - /** * Destructor */ @@ -191,7 +240,7 @@ TimeAxisViewItem::~TimeAxisViewItem() * @return true if the position change was a success, false otherwise */ bool -TimeAxisViewItem::set_position(jack_nframes_t pos, void* src, double* delta) +TimeAxisViewItem::set_position(nframes_t pos, void* src, double* delta) { if (position_locked) { return false; @@ -231,7 +280,7 @@ TimeAxisViewItem::set_position(jack_nframes_t pos, void* src, double* delta) * * @return the position of this item */ -jack_nframes_t +nframes_t TimeAxisViewItem::get_position() const { return frame_position; @@ -245,7 +294,7 @@ TimeAxisViewItem::get_position() const * @return true if the duration change was succesful, false otherwise */ bool -TimeAxisViewItem::set_duration (jack_nframes_t dur, void* src) +TimeAxisViewItem::set_duration (nframes_t dur, void* src) { if ((dur > max_item_duration) || (dur < min_item_duration)) { warning << string_compose (_("new duration %1 frames is out of bounds for %2"), get_item_name(), dur) @@ -259,9 +308,7 @@ TimeAxisViewItem::set_duration (jack_nframes_t dur, void* src) item_duration = dur; - double pixel_width = trackview.editor.frame_to_pixel (dur); - - reset_width_dependent_items (pixel_width); + reset_width_dependent_items (trackview.editor().frame_to_pixel (dur)); DurationChanged (dur, src) ; /* EMIT_SIGNAL */ return true; @@ -271,7 +318,7 @@ TimeAxisViewItem::set_duration (jack_nframes_t dur, void* src) * Returns the duration of this item * */ -jack_nframes_t +nframes_t TimeAxisViewItem::get_duration() const { return (item_duration); @@ -284,7 +331,7 @@ TimeAxisViewItem::get_duration() const * @param src the identity of the object that initiated the change */ void -TimeAxisViewItem::set_max_duration(jack_nframes_t dur, void* src) +TimeAxisViewItem::set_max_duration(nframes_t dur, void* src) { max_item_duration = dur ; MaxDurationChanged(max_item_duration, src) ; /* EMIT_SIGNAL */ @@ -295,7 +342,7 @@ TimeAxisViewItem::set_max_duration(jack_nframes_t dur, void* src) * * @return the maximum duration that this item may be set to */ -jack_nframes_t +nframes_t TimeAxisViewItem::get_max_duration() const { return (max_item_duration) ; @@ -308,7 +355,7 @@ TimeAxisViewItem::get_max_duration() const * @param src the identity of the object that initiated the change */ void -TimeAxisViewItem::set_min_duration(jack_nframes_t dur, void* src) +TimeAxisViewItem::set_min_duration(nframes_t dur, void* src) { min_item_duration = dur ; MinDurationChanged(max_item_duration, src) ; /* EMIT_SIGNAL */ @@ -319,7 +366,7 @@ TimeAxisViewItem::set_min_duration(jack_nframes_t dur, void* src) * * @return the nimum duration that this item mey be set to */ -jack_nframes_t +nframes_t TimeAxisViewItem::get_min_duration() const { return(min_item_duration) ; @@ -359,9 +406,9 @@ TimeAxisViewItem::get_position_locked() const * @param src the identity of the object that initiated the change */ void -TimeAxisViewItem::set_max_duration_active(bool active, void* src) +TimeAxisViewItem::set_max_duration_active (bool active, void* /*src*/) { - max_duration_active = active ; + max_duration_active = active; } /** @@ -382,7 +429,7 @@ TimeAxisViewItem::get_max_duration_active() const * @param src the identity of the object that initiated the change */ void -TimeAxisViewItem::set_min_duration_active(bool active, void* src) +TimeAxisViewItem::set_min_duration_active (bool active, void* /*src*/) { min_duration_active = active ; } @@ -438,26 +485,14 @@ TimeAxisViewItem::get_item_name() const * @param src the identity of the object that initiated the change */ void -TimeAxisViewItem::set_selected(bool yn, void* src) +TimeAxisViewItem::set_selected(bool yn) { if (_selected != yn) { - _selected = yn ; + Selectable::set_selected (yn); set_frame_color (); - Selected (_selected) ; /* EMIT_SIGNAL */ } } -/** - * Returns whether this item is currently selected. - * - * @return true if this item is currently selected, false otherwise - */ -bool -TimeAxisViewItem::get_selected() const -{ - return (_selected) ; -} - void TimeAxisViewItem::set_should_show_selection (bool yn) { @@ -490,11 +525,48 @@ TimeAxisViewItem::get_time_axis_view() * @param new_name the new name text to display */ void -TimeAxisViewItem::set_name_text(std::string new_name) +TimeAxisViewItem::set_name_text(const ustring& new_name) { - if (name_text) { - name_text->property_text() = new_name.c_str(); + uint32_t pb_width, it_width; + double font_size; + + font_size = NAME_FONT->get_size() / Pango::SCALE; + it_width = trackview.editor().frame_to_pixel(item_duration); + pb_width = new_name.length() * font_size; + + if (pb_width > it_width - NAME_X_OFFSET) { + pb_width = it_width - NAME_X_OFFSET; + } + + if (pb_width <= 0 || it_width < NAME_X_OFFSET) { + if (name_pixbuf) { + name_pixbuf->hide(); + } + return; + } else { + name_pixbuf->show(); } + + Glib::RefPtr buf = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB, true, 8, pb_width, NAME_HIGHLIGHT_SIZE); + + cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, pb_width, NAME_HIGHLIGHT_SIZE ); + cairo_t *cr = cairo_create (surface); + cairo_text_extents_t te; + cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); + cairo_select_font_face (cr, NAME_FONT->get_family().c_str(), + CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size (cr, 10); + cairo_text_extents (cr, new_name.c_str(), &te); + + cairo_move_to (cr, 0.5, + 0.5 - te.height / 2 - te.y_bearing + NAME_HIGHLIGHT_SIZE / 2); + cairo_show_text (cr, new_name.c_str()); + + unsigned char* src = cairo_image_surface_get_data (surface); + convert_bgra_to_rgba(src, buf->get_pixels(), pb_width, NAME_HIGHLIGHT_SIZE); + + cairo_destroy(cr); + name_pixbuf->property_pixbuf() = buf; } /** @@ -503,15 +575,17 @@ TimeAxisViewItem::set_name_text(std::string new_name) * @param h the new height */ void -TimeAxisViewItem::set_height(double height) +TimeAxisViewItem::set_height (double height) { if (name_highlight) { if (height < NAME_HIGHLIGHT_THRESH) { name_highlight->hide(); - name_text->hide(); + name_pixbuf->hide(); + } else { name_highlight->show(); - name_text->show(); + name_pixbuf->show(); + } if (height > NAME_HIGHLIGHT_SIZE) { @@ -525,14 +599,8 @@ TimeAxisViewItem::set_height(double height) } } - if (name_text) { - name_text->property_y() = height+1 - NAME_Y_OFFSET; - if (height < NAME_HIGHLIGHT_THRESH) { - name_text->property_fill_color_rgba() = fill_color; - } - else { - name_text->property_fill_color_rgba() = label_color; - } + if (visibility & ShowNameText) { + name_pixbuf->property_y() = height+1 - NAME_Y_OFFSET; } if (frame) { @@ -546,7 +614,7 @@ TimeAxisViewItem::set_height(double height) * */ void -TimeAxisViewItem::set_color(Gdk::Color& base_color) +TimeAxisViewItem::set_color (Gdk::Color const & base_color) { compute_colors (base_color); set_colors (); @@ -564,10 +632,10 @@ TimeAxisViewItem::get_canvas_frame() /** * */ -ArdourCanvas::Item* +ArdourCanvas::Group* TimeAxisViewItem::get_canvas_group() { - return(group) ; + return (group) ; } /** @@ -576,16 +644,16 @@ TimeAxisViewItem::get_canvas_group() ArdourCanvas::Item* TimeAxisViewItem::get_name_highlight() { - return(name_highlight) ; + return (name_highlight) ; } /** * */ -ArdourCanvas::Text* -TimeAxisViewItem::get_name_text() +ArdourCanvas::Pixbuf* +TimeAxisViewItem::get_name_pixbuf() { - return(name_text) ; + return (name_pixbuf) ; } /** @@ -594,7 +662,7 @@ TimeAxisViewItem::get_name_text() * @param color the base color of the item */ void -TimeAxisViewItem::compute_colors(Gdk::Color& base_color) +TimeAxisViewItem::compute_colors (Gdk::Color const & base_color) { unsigned char radius ; char minor_shift ; @@ -605,7 +673,7 @@ TimeAxisViewItem::compute_colors(Gdk::Color& base_color) r = base_color.get_red()/256 ; g = base_color.get_green()/256 ; b = base_color.get_blue()/256 ; - fill_color = RGBA_TO_UINT(r,g,b,255) ; + fill_color = RGBA_TO_UINT(r,g,b,160) ; /* for minor colors: if the overall saturation is strong, make the minor colors light. @@ -689,20 +757,6 @@ void TimeAxisViewItem::set_colors() { set_frame_color() ; - if (name_text) { - double height = NAME_HIGHLIGHT_THRESH; - - if (frame) { - height = frame->property_y2(); - } - - if (height < NAME_HIGHLIGHT_THRESH) { - name_text->property_fill_color_rgba() = fill_color; - } - else { - name_text->property_fill_color_rgba() = label_color; - } - } if (name_highlight) { name_highlight->property_fill_color_rgba() = fill_color; @@ -721,11 +775,16 @@ TimeAxisViewItem::set_frame_color() uint32_t r,g,b,a; if (_selected && should_show_selection) { - UINT_TO_RGBA(color_map[cSelectedFrameBase], &r, &g, &b, &a); - frame->property_fill_color_rgba() = RGBA_TO_UINT(r, g, b, fill_opacity); + UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_SelectedFrameBase.get(), &r, &g, &b, &a); + frame->property_fill_color_rgba() = RGBA_TO_UINT(r, g, b, a); } else { - UINT_TO_RGBA(color_map[cFrameBase], &r, &g, &b, &a); - frame->property_fill_color_rgba() = RGBA_TO_UINT(r, g, b, fill_opacity); + if (_recregion) { + UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_RecordingRect.get(), &r, &g, &b, &a); + frame->property_fill_color_rgba() = RGBA_TO_UINT(r, g, b, a); + } else { + UINT_TO_RGBA(ARDOUR_UI::config()->canvasvar_FrameBase.get(), &r, &g, &b, &a); + frame->property_fill_color_rgba() = RGBA_TO_UINT(r, g, b, fill_opacity ? fill_opacity : a); + } } } } @@ -739,11 +798,11 @@ TimeAxisViewItem::set_trim_handle_colors() { if (frame_handle_start) { if (position_locked) { - frame_handle_start->property_fill_color_rgba() = color_map[cTrimHandleLockedStart]; - frame_handle_end->property_fill_color_rgba() = color_map[cTrimHandleLockedEnd]; + frame_handle_start->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TrimHandleLocked.get(); + frame_handle_end->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TrimHandleLocked.get(); } else { - frame_handle_start->property_fill_color_rgba() = color_map[cTrimHandleStart]; - frame_handle_end->property_fill_color_rgba() = color_map[cTrimHandleEnd]; + frame_handle_start->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TrimHandle.get(); + frame_handle_end->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TrimHandle.get(); } } } @@ -780,7 +839,7 @@ TimeAxisViewItem::reset_width_dependent_items (double pixel_width) if (name_highlight) { name_highlight->hide(); - name_text->hide(); + name_pixbuf->hide(); } if (frame) { @@ -801,14 +860,20 @@ TimeAxisViewItem::reset_width_dependent_items (double pixel_width) if (height < NAME_HIGHLIGHT_THRESH) { name_highlight->hide(); - name_text->hide(); + name_pixbuf->hide(); } else { name_highlight->show(); - name_text->show(); - reset_name_width (pixel_width); + if (!get_item_name().empty()) { + reset_name_width (pixel_width); + } + } + + if (visibility & FullWidthNameHighlight) { + name_highlight->property_x2() = pixel_width; + } else { + name_highlight->property_x2() = pixel_width - 1.0; } - name_highlight->property_x2() = pixel_width - 1.0; } if (frame) { @@ -830,59 +895,9 @@ TimeAxisViewItem::reset_width_dependent_items (double pixel_width) } void -TimeAxisViewItem::reset_name_width (double pixel_width) +TimeAxisViewItem::reset_name_width (double /*pixel_width*/) { - int width; - int height; - ustring ustr; - Pango::FontDescription fd (NAME_FONT); - - if (name_text == 0) { - return; - } - - ustr = item_name; - int namelen = ustr.length(); - - Glib::RefPtr layout = group->get_canvas()->create_pango_layout (ustr); - layout->set_font_description (fd); - - while (namelen) { - - layout->set_text (ustr); - layout->get_pixel_size (width, height); - - if (width < (pixel_width - NAME_X_OFFSET)) { - break; - } - - --namelen; - ustr = ustr.substr (0, namelen); - } - - if (namelen == 0) { - - name_text->hide (); - - } else { - - /* don't use name for event handling if it leaves no room - for trimming to work. - */ - - if (pixel_width - width < (NAME_X_OFFSET * 2.0)) { - if (name_connected) { - name_connected = false; - } - } else { - if (!name_connected) { - name_connected = true; - } - } - - name_text->property_text() = ustr; - name_text->show(); - } + set_name_text (item_name); } @@ -920,8 +935,20 @@ TimeAxisViewItem::remove_this_item(void* src) gint TimeAxisViewItem::idle_remove_this_item(TimeAxisViewItem* item, void* src) { - item->ItemRemoved(item->get_item_name(), src) ; /* EMIT_SIGNAL */ - delete item ; - item = 0 ; - return(false) ; + item->ItemRemoved (item->get_item_name(), src) ; /* EMIT_SIGNAL */ + delete item; + item = 0; + return false; } + +void +TimeAxisViewItem::set_y (double y) +{ + double const old = group->property_y (); + if (y != old) { + group->move (0, y - old); + } +} + + +