X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_mouse.cc;h=e8a50686b324d3f447241d7dfb19f7c5cadb7f9d;hb=b0685f4336f0496d58c16c516dfd0eabfb7f0456;hp=e2be04a570272d6ac11b7e3e7ee1094868aec98a;hpb=da285fc57dfda8c33ca0da967bcc40cd1e608ca4;p=ardour.git diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index e2be04a570..e8a50686b3 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1006,25 +1006,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT case 2: switch (mouse_mode) { - case MouseObject: - switch (item_type) { - case RegionItem: - if (Keyboard::modifier_state_equals (event->button.state, Keyboard::Shift)) { - raise_region (); - } else if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask (Keyboard::Shift|Keyboard::Alt))) { - lower_region (); - } else { - // Button2 click is unused - } - return true; - - break; - - default: - break; - } - break; - case MouseRange: // x_style_paste (where, 1.0); @@ -1066,7 +1047,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ at_x += 20.0; at_y += 20.0; - fraction = 1.0 - (cp->get_y() / cp->line.height()); + fraction = 1.0 - ((cp->get_y() - cp->line.y_position()) / cp->line.height()); set_verbose_canvas_cursor (cp->line.get_verbose_cursor_string (fraction), at_x, at_y); show_verbose_canvas_cursor (); @@ -1428,9 +1409,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item */ if (!drag_info.move_threshold_passed) { - bool x_threshold_passed = (abs ((int) (drag_info.current_pointer_x - drag_info.grab_x)) > 4); - bool y_threshold_passed = (abs ((int) (drag_info.current_pointer_y - drag_info.grab_y)) > 4); - + bool x_threshold_passed = (abs ((nframes64_t) (drag_info.current_pointer_x - drag_info.grab_x)) > 4LL); + bool y_threshold_passed = (abs ((nframes64_t) (drag_info.current_pointer_y - drag_info.grab_y)) > 4LL); + drag_info.move_threshold_passed = (x_threshold_passed || y_threshold_passed); // and change the initial grab loc/frame if this drag info wants us to @@ -1544,7 +1525,7 @@ Editor::start_grab (GdkEvent* event, Gdk::Cursor *cursor) drag_info.y_constrained = false; } - drag_info.grab_frame = event_frame(event, &drag_info.grab_x, &drag_info.grab_y); + drag_info.grab_frame = event_frame (event, &drag_info.grab_x, &drag_info.grab_y); drag_info.last_pointer_frame = drag_info.grab_frame; drag_info.current_pointer_frame = drag_info.grab_frame; drag_info.current_pointer_x = drag_info.grab_x; @@ -1688,7 +1669,7 @@ Editor::fade_in_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) nframes_t pos; nframes_t fade_length; - if ((int32_t)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { pos = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; } else { @@ -1733,7 +1714,7 @@ Editor::fade_in_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* even if (drag_info.first_move) return; - if ((int32_t)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { pos = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; } else { pos = 0; @@ -1795,10 +1776,9 @@ Editor::fade_out_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event nframes_t pos; nframes_t fade_length; - if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { pos = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; - } - else { + } else { pos = 0; } @@ -1843,7 +1823,7 @@ Editor::fade_out_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* eve nframes_t pos; nframes_t fade_length; - if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { pos = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; } else { @@ -1925,7 +1905,7 @@ Editor::cursor_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) Cursor* cursor = (Cursor *) drag_info.data; nframes_t adjusted_frame; - if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { adjusted_frame = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; } else { @@ -2041,10 +2021,9 @@ Editor::marker_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) nframes_t newframe; - if (drag_info.pointer_frame_offset <= (long) drag_info.current_pointer_frame) { + if (drag_info.pointer_frame_offset <= drag_info.current_pointer_frame) { newframe = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; - } - else { + } else { newframe = 0; } @@ -2222,7 +2201,7 @@ Editor::meter_marker_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* e MeterMarker* marker = (MeterMarker *) drag_info.data; nframes_t adjusted_frame; - if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { adjusted_frame = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; } else { @@ -2353,7 +2332,7 @@ Editor::tempo_marker_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* e TempoMarker* marker = (TempoMarker *) drag_info.data; nframes_t adjusted_frame; - if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { adjusted_frame = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; } else { @@ -2446,7 +2425,7 @@ void Editor::start_control_point_grab (ArdourCanvas::Item* item, GdkEvent* event) { ControlPoint* control_point; - + if ((control_point = reinterpret_cast (item->get_data ("control_point"))) == 0) { fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg; /*NOTREACHED*/ @@ -2461,7 +2440,7 @@ Editor::start_control_point_grab (ArdourCanvas::Item* item, GdkEvent* event) control_point->line.start_drag (control_point, drag_info.grab_frame, 0); - float fraction = 1.0 - (control_point->get_y() / control_point->line.height()); + float fraction = 1.0 - ((control_point->get_y() - control_point->line.y_position()) / control_point->line.height()); set_verbose_canvas_cursor (control_point->line.get_verbose_cursor_string (fraction), drag_info.current_pointer_x + 20, drag_info.current_pointer_y + 20); @@ -2490,7 +2469,7 @@ Editor::control_point_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* cx = max (0.0, cx); cy = max (0.0, cy); - cy = min ((double) cp->line.height(), cy); + cy = min ((double) (cp->line.y_position() + cp->line.height()), cy); //translate cx to frames nframes_t cx_frames = unit_to_frame (cx); @@ -2499,8 +2478,8 @@ Editor::control_point_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* snap_to (cx_frames); } - float fraction = 1.0 - (cy / cp->line.height()); - + float const fraction = 1.0 - ((cy - cp->line.y_position()) / cp->line.height()); + bool push; if (Keyboard::modifier_state_contains (event->button.state, Keyboard::Control)) { @@ -2590,7 +2569,7 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event) start_grab (event, fader_cursor); - double fraction = 1.0 - (cy / line->height()); + double const fraction = 1.0 - ((cy - line->y_position()) / line->height()); line->start_drag (0, drag_info.grab_frame, fraction); @@ -2608,8 +2587,7 @@ Editor::line_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) line->parent_group().w2i (cx, cy); - double fraction; - fraction = 1.0 - (cy / line->height()); + double const fraction = 1.0 - ((cy - line->y_position()) / line->height()); bool push; @@ -2972,14 +2950,14 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) if (drag_info.move_threshold_passed) { - if ((int32_t)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { nframes_t sync_frame; nframes_t sync_offset; int32_t sync_dir; pending_region_position = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; - + sync_offset = rv->region()->sync_offset (sync_dir); sync_frame = rv->region()->adjust_to_sync (pending_region_position); @@ -3011,13 +2989,13 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) /* now compute the canvas unit distance we need to move the regiondrag_info.last_trackview->order to make it appear at the new location. */ - + if (pending_region_position > drag_info.last_frame_position) { x_delta = ((double) (pending_region_position - drag_info.last_frame_position) / frames_per_unit); } else { x_delta = -((double) (drag_info.last_frame_position - pending_region_position) / frames_per_unit); } - + drag_info.last_frame_position = pending_region_position; } else { @@ -3041,6 +3019,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) return; } + if (x_delta < 0) { for (list::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) { @@ -3140,7 +3119,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) tvp2 = trackview_by_y_position (iy1 + y_delta); temp_rtv = dynamic_cast(tvp2); - rv->set_height (temp_rtv->height); + rv->set_y_position_and_height (0, temp_rtv->height); /* if you un-comment the following, the region colours will follow the track colours whilst dragging, personally, i think this can confuse things, but never mind. @@ -3163,10 +3142,11 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) if (-x_delta > ix1) { x_delta = -ix1; } - } else if ((x_delta > 0) &&(rv->region()->last_frame() > max_frames - x_delta)) { + } else if ((x_delta > 0) && (rv->region()->last_frame() > max_frames - x_delta)) { x_delta = max_frames - rv->region()->last_frame(); } + if (drag_info.first_move) { /* hide any dependent views */ @@ -3223,7 +3203,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event motion handler. */ - if (drag_info.first_move && !(drag_info.copy && drag_info.x_constrained)) { + if (drag_info.first_move) { /* just a click */ goto out; } @@ -3387,10 +3367,9 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event rv = (*i); - if (rv->region()->locked()) { + if (!rv->region()->can_move()) { continue; } - if (regionview_x_movement) { double ownspeed = 1.0; @@ -3445,10 +3424,6 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event selection->add (latest_regionview); } - /* if the original region was locked, we don't care for the new one */ - - newregion->set_locked (false); - } else { /* just change the model */ @@ -3786,10 +3761,9 @@ Editor::drag_selection (ArdourCanvas::Item* item, GdkEvent* event) nframes_t length; nframes_t pending_position; - if ((int32_t) drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { + if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) { pending_position = drag_info.current_pointer_frame - drag_info.pointer_frame_offset; - } - else { + } else { pending_position = 0; }