summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-11-15 19:00:31 +0000
committerCarl Hetherington <carl@carlh.net>2010-11-15 19:00:31 +0000
commitf237b2e23b012e8dc00bd03a575267cf603087f4 (patch)
treed614360b782841e5e0b0f557f6df689df9e4d1ca /gtk2_ardour
parentb21f4cab02a158d7cd580b51d02e8ae49c472316 (diff)
Present trim cursors over region view name bar.
git-svn-id: svn://localhost/ardour2/branches/3.0@8041 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.cc1
-rw-r--r--gtk2_ardour/editor.h4
-rw-r--r--gtk2_ardour/editor_mouse.cc36
-rw-r--r--gtk2_ardour/region_view.cc11
4 files changed, 50 insertions, 2 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index b86fa6a779..8f954895df 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -750,6 +750,7 @@ Editor::Editor ()
_popup_region_menu_item = 0;
_show_marker_lines = false;
+ _over_region_trim_target = false;
constructed = true;
instant_save ();
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 2b08569220..10a6b57e34 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -1430,6 +1430,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
friend class EditorRegions;
ArdourCanvas::Item *last_item_entered;
+ /** true if the mouse is over a place where region trim can happen */
+ bool _over_region_trim_target;
/* non-public event handlers */
@@ -2097,6 +2099,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
Gtk::MenuItem& action_menu_item (std::string const &);
void action_pre_activated (Glib::RefPtr<Gtk::Action> const &);
+ void set_canvas_cursor_for_region_view (double, RegionView *);
+
friend class Drag;
friend class RegionDrag;
friend class RegionMoveDrag;
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index a056b2dddc..5c7f03ec37 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -1576,7 +1576,8 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case RegionViewNameHighlight:
if (is_drawable() && mouse_mode == MouseObject && !internal_editing()) {
- set_canvas_cursor (trimmer_cursor);
+ set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
+ _over_region_trim_target = true;
}
break;
@@ -1636,7 +1637,8 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
if (!reinterpret_cast<RegionView *> (item->get_data ("regionview"))->name_active()) {
if (mouse_mode == MouseObject && is_drawable()) {
- set_canvas_cursor (trimmer_cursor);
+ set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
+ _over_region_trim_target = true;
}
}
break;
@@ -1791,6 +1793,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case MarkerViewHandleEndItem:
#endif
+ _over_region_trim_target = false;
+
if (is_drawable()) {
set_canvas_cursor (current_canvas_cursor);
}
@@ -1811,6 +1815,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case RegionViewName:
/* see enter_handler() for notes */
+ _over_region_trim_target = false;
+
if (!reinterpret_cast<RegionView *> (item->get_data ("regionview"))->name_active()) {
if (is_drawable() && mouse_mode == MouseObject) {
set_canvas_cursor (current_canvas_cursor);
@@ -2007,6 +2013,10 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from
set_canvas_cursor ();
}
+ if (_over_region_trim_target) {
+ set_canvas_cursor_for_region_view (event->motion.x, entered_regionview);
+ }
+
bool handled = false;
if (_drags->active ()) {
handled = _drags->motion_handler (event, from_autoscroll);
@@ -2704,3 +2714,25 @@ Editor::remove_midi_note (ArdourCanvas::Item* item, GdkEvent *)
e->region_view().delete_note (e->note ());
}
+
+void
+Editor::set_canvas_cursor_for_region_view (double x, RegionView* rv)
+{
+ ArdourCanvas::Group* g = rv->get_canvas_group ();
+ ArdourCanvas::Group* p = g->get_parent_group ();
+
+ /* Compute x in region view parent coordinates */
+ double dy = 0;
+ p->w2i (x, dy);
+
+ double x1, x2, y1, y2;
+ g->get_bounds (x1, y1, x2, y2);
+
+ 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);
+ }
+}
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index 755281a119..9601c69318 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -679,8 +679,19 @@ RegionView::update_coverage_frames (LayerDisplay d)
if (frame_handle_start) {
frame_handle_start->raise_to_top ();
+ }
+
+ if (frame_handle_end) {
frame_handle_end->raise_to_top ();
}
+
+ if (name_highlight) {
+ name_highlight->raise_to_top ();
+ }
+
+ if (name_pixbuf) {
+ name_pixbuf->raise_to_top ();
+ }
}
void