From ee76685f8d3cd04ffa5905def8f760aeda8faa10 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 15 Nov 2010 22:55:39 +0000 Subject: [PATCH] Modify region trim cursor if a region can only be trimmed in one direction. git-svn-id: svn://localhost/ardour2/branches/3.0@8045 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor.cc | 12 ++++++ gtk2_ardour/editor.h | 2 + gtk2_ardour/editor_mouse.cc | 39 ++++++++---------- .../icons/trim_left_cursor_right_only.png | Bin 0 -> 578 bytes .../icons/trim_right_cursor_left_only.png | Bin 0 -> 564 bytes libs/ardour/ardour/trimmable.h | 16 +++---- libs/ardour/region.cc | 2 +- 7 files changed, 40 insertions(+), 31 deletions(-) create mode 100755 gtk2_ardour/icons/trim_left_cursor_right_only.png create mode 100755 gtk2_ardour/icons/trim_right_cursor_left_only.png diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 8f954895df..22a4f9e805 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -214,6 +214,8 @@ Gdk::Cursor* Editor::selector_cursor = 0; Gdk::Cursor* Editor::trimmer_cursor = 0; Gdk::Cursor* Editor::left_side_trim_cursor = 0; Gdk::Cursor* Editor::right_side_trim_cursor = 0; +Gdk::Cursor* Editor::left_side_trim_right_only_cursor = 0; +Gdk::Cursor* Editor::right_side_trim_left_only_cursor = 0; Gdk::Cursor* Editor::fade_in_cursor = 0; Gdk::Cursor* Editor::fade_out_cursor = 0; Gdk::Cursor* Editor::grabber_cursor = 0; @@ -1311,6 +1313,16 @@ Editor::build_cursors () right_side_trim_cursor = new Gdk::Cursor (Gdk::Display::get_default(), apixbuf, 23, 11); } + { + Glib::RefPtr apixbuf (::get_icon ("trim_left_cursor_right_only")); + left_side_trim_right_only_cursor = new Gdk::Cursor (Gdk::Display::get_default(), apixbuf, 5, 11); + } + + { + Glib::RefPtr apixbuf (::get_icon ("trim_right_cursor_left_only")); + right_side_trim_left_only_cursor = new Gdk::Cursor (Gdk::Display::get_default(), apixbuf, 23, 11); + } + { Glib::RefPtr apixbuf (::get_icon ("fade_in_cursor")); fade_in_cursor = new Gdk::Cursor (Gdk::Display::get_default(), apixbuf, 0, 0); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 10a6b57e34..a3b7cd3628 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -456,6 +456,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD static Gdk::Cursor* trimmer_cursor; static Gdk::Cursor* right_side_trim_cursor; static Gdk::Cursor* left_side_trim_cursor; + static Gdk::Cursor* right_side_trim_left_only_cursor; + static Gdk::Cursor* left_side_trim_right_only_cursor; static Gdk::Cursor* fade_in_cursor; static Gdk::Cursor* fade_out_cursor; static Gdk::Cursor* selector_cursor; diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 5c7f03ec37..653fdc3204 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1575,31 +1575,16 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; case RegionViewNameHighlight: - if (is_drawable() && mouse_mode == MouseObject && !internal_editing()) { + if (is_drawable() && mouse_mode == MouseObject && !internal_editing() && entered_regionview) { set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview); _over_region_trim_target = true; } break; case LeftFrameHandle: - if (is_drawable() && mouse_mode == MouseObject && !internal_editing()) { - if (entered_regionview) { - Trimmable::CanTrim ct = entered_regionview->region()->can_trim(); - if ((ct & Trimmable::EndTrimEarlier) || (ct & Trimmable::EndTrimLater)) { - set_canvas_cursor (left_side_trim_cursor); - } - } - } - break; - case RightFrameHandle: - if (is_drawable() && mouse_mode == MouseObject && !internal_editing()) { - if (entered_regionview) { - Trimmable::CanTrim ct = entered_regionview->region()->can_trim(); - if ((ct & Trimmable::FrontTrimEarlier) || (ct & Trimmable::FrontTrimLater)) { - set_canvas_cursor (right_side_trim_cursor); - } - } + if (is_drawable() && mouse_mode == MouseObject && !internal_editing() && entered_regionview) { + set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview); } break; @@ -2728,11 +2713,21 @@ Editor::set_canvas_cursor_for_region_view (double x, RegionView* rv) double x1, x2, y1, y2; g->get_bounds (x1, y1, x2, y2); + /* Halfway across the region */ double const h = (x1 + x2) / 2; - if (x1 < x && x <= h) { - set_canvas_cursor (left_side_trim_cursor); - } else if (h < x && x <= x2) { - set_canvas_cursor (right_side_trim_cursor); + Trimmable::CanTrim ct = rv->region()->can_trim (); + if (x <= h) { + if (ct & Trimmable::FrontTrimEarlier) { + set_canvas_cursor (left_side_trim_cursor); + } else { + set_canvas_cursor (left_side_trim_right_only_cursor); + } + } else { + if (ct & Trimmable::EndTrimLater) { + set_canvas_cursor (right_side_trim_cursor); + } else { + set_canvas_cursor (right_side_trim_left_only_cursor); + } } } diff --git a/gtk2_ardour/icons/trim_left_cursor_right_only.png b/gtk2_ardour/icons/trim_left_cursor_right_only.png new file mode 100755 index 0000000000000000000000000000000000000000..4812510f7b45dbe7bf900fa4e9eb4613c7320218 GIT binary patch literal 578 zcmV-I0=@l-P)cTVzJmI$up9>|1BiBPx8R40K5T!Kp=obBEep-x7BX9--kk>8*HWnz_T!?_=;AsY4x>;gY-KW;9m}#l+O~a6(p>vkh{*FB^VOD4r|(}{ zM*#K#9Qf2X$8i?xa59;QZQBpQVDJt=8G!L@wfVf|wI4(B4gjXpDMq7_6pO__N~zBP z$|CY>&aEU|HLmNT)oRTg$GHM>Z)X71z6v9CVNwz}A!?8mLhexS&DX1NqB@|4SNQWBo>ktzvBzGB}{lafJ z-k0~e-@Es|_e52(p-d+8&UM}WFpn_?RMko~8jX({p<1n`&#klv^!xp@$z(ErXe^h@ zIn8GC_Q6(%VdZ(=pSup9+3N7AiUf*CTts$P4wPH%0Y8B^D+P+kE8uITQhDEQx08Ui z&9wv+kxdafO{dcXV@$T!>pA&+-WCg3yt#-tz(FFBc-!rEW94#rEtN|B>suF*ort;S zs`?`mC?cMS9M|jh7p+#yNhXuTVzGNesZ?S(9Oi-VVH5eje*tVn0hgB4R?LNJ0dauC zcs%~w_x0rr4P;M2;pbnyvKfNkK|R)diVqN-QG2V21Z{tCp-^zF13k~%>U26zl+PM42!iv`XcX!(#_$)dDA0lh-29{f0000length (0)) { + if ((start() + length()) < _sources.front()->length (0)) { ct = CanTrim (ct | EndTrimLater); } }