towards region-trims preserving fade duration

This commit is contained in:
Robin Gareus 2014-05-31 03:53:59 +02:00
parent 62e8d1a25f
commit 4843c5d5cf
9 changed files with 194 additions and 99 deletions

View file

@ -81,6 +81,8 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
, sync_mark(0)
, fade_in_handle(0)
, fade_out_handle(0)
, fade_in_trim_handle(0)
, fade_out_trim_handle(0)
, start_xfade_curve (0)
, start_xfade_rect (0)
, _start_xfade_visible (false)
@ -99,6 +101,8 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
, sync_mark(0)
, fade_in_handle(0)
, fade_out_handle(0)
, fade_in_trim_handle(0)
, fade_out_trim_handle(0)
, start_xfade_curve (0)
, start_xfade_rect (0)
, _start_xfade_visible (false)
@ -115,6 +119,8 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt
: RegionView (other, boost::shared_ptr<Region> (other_region))
, fade_in_handle(0)
, fade_out_handle(0)
, fade_in_trim_handle(0)
, fade_out_trim_handle(0)
, start_xfade_curve (0)
, start_xfade_rect (0)
, _start_xfade_visible (false)
@ -163,6 +169,20 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd)
fade_out_handle->set_fill_color (ARDOUR_UI::config()->get_canvasvar_InactiveFadeHandle());
fade_out_handle->set_data ("regionview", this);
fade_out_handle->hide ();
fade_in_trim_handle = new ArdourCanvas::Rectangle (group);
CANVAS_DEBUG_NAME (fade_in_handle, string_compose ("fade in trim handle for %1", region()->name()));
fade_in_trim_handle->set_outline_color (RGBA_TO_UINT (0, 0, 0, 255));
fade_in_trim_handle->set_fill_color (ARDOUR_UI::config()->get_canvasvar_InactiveFadeHandle());
fade_in_trim_handle->set_data ("regionview", this);
fade_in_trim_handle->hide ();
fade_out_trim_handle = new ArdourCanvas::Rectangle (group);
CANVAS_DEBUG_NAME (fade_out_handle, string_compose ("fade out trim handle for %1", region()->name()));
fade_out_trim_handle->set_outline_color (RGBA_TO_UINT (0, 0, 0, 255));
fade_out_trim_handle->set_fill_color (ARDOUR_UI::config()->get_canvasvar_InactiveFadeHandle());
fade_out_trim_handle->set_data ("regionview", this);
fade_out_trim_handle->hide ();
}
setup_fade_handle_positions ();
@ -199,11 +219,19 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd)
reset_width_dependent_items (_pixel_width);
if (fade_in_handle) {
fade_in_handle->Event.connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_fade_in_handle_event), fade_in_handle, this));
fade_in_handle->Event.connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_fade_in_handle_event), fade_in_handle, this, false));
}
if (fade_out_handle) {
fade_out_handle->Event.connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_fade_out_handle_event), fade_out_handle, this));
fade_out_handle->Event.connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_fade_out_handle_event), fade_out_handle, this, false));
}
if (fade_in_trim_handle) {
fade_in_trim_handle->Event.connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_fade_in_handle_event), fade_in_trim_handle, this, true));
}
if (fade_out_trim_handle) {
fade_out_trim_handle->Event.connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_fade_out_handle_event), fade_out_trim_handle, this, true));
}
set_colors ();
@ -384,14 +412,11 @@ AudioRegionView::reset_width_dependent_items (double pixel_width)
RegionView::reset_width_dependent_items(pixel_width);
assert(_pixel_width == pixel_width);
if (fade_in_handle) {
if (pixel_width <= 6.0 || _height < 5.0 || !trackview.session()->config.get_show_region_fades()) {
fade_in_handle->hide();
fade_out_handle->hide();
} else {
//fade_in_handle->show();
//fade_out_handle->show();
}
if (pixel_width <= 6.0 || _height < 5.0 || !trackview.session()->config.get_show_region_fades()) {
if (fade_in_handle) { fade_in_handle->hide(); }
if (fade_out_handle) { fade_out_handle->hide(); }
if (fade_in_trim_handle) { fade_in_trim_handle->hide(); }
if (fade_out_trim_handle) { fade_out_trim_handle->hide(); }
}
AnalysisFeatureList analysis_features = _region->transients();
@ -437,6 +462,16 @@ AudioRegionView::setup_fade_handle_positions()
fade_out_handle->set_y0 (handle_pos);
fade_out_handle->set_y1 (handle_pos + handle_size);
}
if (fade_in_trim_handle) {
fade_in_trim_handle->set_y0 (_height - handle_size);
fade_in_trim_handle->set_y1 (_height);
}
if (fade_out_trim_handle) {
fade_out_trim_handle->set_y0 (_height - handle_size );
fade_out_trim_handle->set_y1 (_height);
}
}
void
@ -498,8 +533,8 @@ AudioRegionView::set_height (gdouble height)
void
AudioRegionView::reset_fade_shapes ()
{
reset_fade_in_shape ();
reset_fade_out_shape ();
if (!trim_fade_in_drag_active) { reset_fade_in_shape (); }
if (!trim_fade_out_drag_active) { reset_fade_out_shape (); }
}
void
@ -509,8 +544,9 @@ AudioRegionView::reset_fade_in_shape ()
}
void
AudioRegionView::reset_fade_in_shape_width (boost::shared_ptr<AudioRegion> ar, framecnt_t width)
AudioRegionView::reset_fade_in_shape_width (boost::shared_ptr<AudioRegion> ar, framecnt_t width, bool drag_active)
{
trim_fade_in_drag_active = drag_active;
if (fade_in_handle == 0) {
return;
}
@ -527,6 +563,11 @@ AudioRegionView::reset_fade_in_shape_width (boost::shared_ptr<AudioRegion> ar, f
fade_in_handle->set_x0 (handle_left);
fade_in_handle->set_x1 (handle_left + handle_size);
if (fade_in_trim_handle) {
fade_in_trim_handle->set_x0 (0);
fade_in_trim_handle->set_x1 (handle_size);
}
if (pwidth < 5) {
hide_start_xfade();
return;
@ -579,8 +620,9 @@ AudioRegionView::reset_fade_out_shape ()
}
void
AudioRegionView::reset_fade_out_shape_width (boost::shared_ptr<AudioRegion> ar, framecnt_t width)
AudioRegionView::reset_fade_out_shape_width (boost::shared_ptr<AudioRegion> ar, framecnt_t width, bool drag_active)
{
trim_fade_out_drag_active = drag_active;
if (fade_out_handle == 0) {
return;
}
@ -596,11 +638,16 @@ AudioRegionView::reset_fade_out_shape_width (boost::shared_ptr<AudioRegion> ar,
*/
double const handle_right = rint(trackview.editor().sample_to_pixel (_region->length()) + TimeAxisViewItem::RIGHT_EDGE_SHIFT - pwidth);
double const trim_handle_right = rint(trackview.editor().sample_to_pixel (_region->length()) + TimeAxisViewItem::RIGHT_EDGE_SHIFT);
/* Put the fade out handle so that its right side is at the end-of-fade line;
*/
fade_out_handle->set_x0 (1 + handle_right - handle_size);
fade_out_handle->set_x1 (1 + handle_right);
if (fade_out_trim_handle) {
fade_out_trim_handle->set_x0 (1 + trim_handle_right - handle_size);
fade_out_trim_handle->set_x1 (1 + trim_handle_right);
}
/* don't show shape if its too small */
@ -1262,11 +1309,23 @@ AudioRegionView::entered (bool internal_editing)
gain_line->add_visibility (AutomationLine::ControlPoints);
}
if (fade_in_handle && !internal_editing) {
fade_in_handle->show ();
fade_out_handle->show ();
fade_out_handle->raise_to_top ();
fade_in_handle->raise_to_top ();
if (!internal_editing) {
if (fade_in_handle) {
fade_in_handle->show ();
fade_in_handle->raise_to_top ();
}
if (fade_out_handle) {
fade_out_handle->show ();
fade_out_handle->raise_to_top ();
}
if (fade_in_trim_handle) {
fade_in_trim_handle->show ();
fade_in_trim_handle->raise_to_top ();
}
if (fade_out_trim_handle) {
fade_out_trim_handle->show ();
fade_out_trim_handle->raise_to_top ();
}
}
}
@ -1280,10 +1339,10 @@ AudioRegionView::exited ()
gain_line->remove_visibility (AutomationLine::ControlPoints);
}
if (fade_in_handle) {
fade_in_handle->hide ();
fade_out_handle->hide ();
}
if (fade_in_handle) { fade_in_handle->hide(); }
if (fade_out_handle) { fade_out_handle->hide(); }
if (fade_in_trim_handle) { fade_in_trim_handle->hide(); }
if (fade_out_trim_handle) { fade_out_trim_handle->hide(); }
}
void
@ -1397,19 +1456,15 @@ void
AudioRegionView::set_fade_visibility (bool yn)
{
if (yn) {
if (fade_in_handle) {
fade_in_handle->show ();
}
if (fade_out_handle) {
fade_out_handle->show ();
}
if (fade_in_handle) { fade_in_handle->show(); }
if (fade_out_handle) { fade_out_handle->show(); }
if (fade_in_trim_handle) { fade_in_trim_handle->show(); }
if (fade_out_trim_handle) { fade_out_trim_handle->show(); }
} else {
if (fade_in_handle) {
fade_in_handle->hide ();
}
if (fade_out_handle) {
fade_out_handle->hide ();
}
if (fade_in_handle) { fade_in_handle->hide(); }
if (fade_out_handle) { fade_out_handle->hide(); }
if (fade_in_trim_handle) { fade_in_trim_handle->hide(); }
if (fade_out_trim_handle) { fade_out_trim_handle->hide(); }
}
}
@ -1418,10 +1473,10 @@ AudioRegionView::update_coverage_frames (LayerDisplay d)
{
RegionView::update_coverage_frames (d);
if (fade_in_handle) {
fade_in_handle->raise_to_top ();
fade_out_handle->raise_to_top ();
}
if (fade_in_handle) { fade_in_handle->raise_to_top (); }
if (fade_out_handle) { fade_out_handle->raise_to_top (); }
if (fade_in_trim_handle) { fade_in_trim_handle->raise_to_top (); }
if (fade_out_trim_handle) { fade_out_trim_handle->raise_to_top (); }
}
void

View file

@ -95,8 +95,8 @@ class AudioRegionView : public RegionView
GhostRegion* add_ghost (TimeAxisView&);
void reset_fade_in_shape_width (boost::shared_ptr<ARDOUR::AudioRegion> ar, framecnt_t);
void reset_fade_out_shape_width (boost::shared_ptr<ARDOUR::AudioRegion> ar, framecnt_t);
void reset_fade_in_shape_width (boost::shared_ptr<ARDOUR::AudioRegion> ar, framecnt_t, bool drag_active = false);
void reset_fade_out_shape_width (boost::shared_ptr<ARDOUR::AudioRegion> ar, framecnt_t, bool drag_active = false);
framepos_t get_fade_in_shape_width ();
framepos_t get_fade_out_shape_width ();
@ -158,6 +158,8 @@ class AudioRegionView : public RegionView
ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position
ArdourCanvas::Rectangle* fade_in_handle; ///< fade in handle, or 0
ArdourCanvas::Rectangle* fade_out_handle; ///< fade out handle, or 0
ArdourCanvas::Rectangle* fade_in_trim_handle; ///< fade in trim handle, or 0
ArdourCanvas::Rectangle* fade_out_trim_handle; ///< fade out trim handle, or 0
ArdourCanvas::XFadeCurve* start_xfade_curve;
ArdourCanvas::Rectangle* start_xfade_rect;
@ -217,6 +219,9 @@ private:
* first list is for start xfades, second list is for end xfades.
*/
std::pair<std::list<AudioRegionView*>, std::list<AudioRegionView*> > _hidden_xfades;
bool trim_fade_in_drag_active;
bool trim_fade_out_drag_active;
};
#endif /* __gtk_ardour_audio_region_view_h__ */

View file

@ -1400,9 +1400,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
bool canvas_start_xfade_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
bool canvas_end_xfade_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
bool canvas_fade_in_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
bool canvas_fade_in_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
bool canvas_fade_in_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*, bool trim = false);
bool canvas_fade_out_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
bool canvas_fade_out_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
bool canvas_fade_out_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*, bool trim = false);
bool canvas_region_view_event (GdkEvent* event,ArdourCanvas::Item*, RegionView*);
bool canvas_frame_handle_event (GdkEvent* event,ArdourCanvas::Item*, RegionView*);
bool canvas_region_view_name_highlight_event (GdkEvent* event,ArdourCanvas::Item*, RegionView*);

View file

@ -477,7 +477,7 @@ Editor::canvas_fade_in_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRe
}
bool
Editor::canvas_fade_in_handle_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv)
Editor::canvas_fade_in_handle_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv, bool trim)
{
bool ret = false;
@ -493,11 +493,11 @@ Editor::canvas_fade_in_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
clicked_control_point = 0;
clicked_axisview = &rv->get_time_axis_view();
clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
ret = button_press_handler (item, event, FadeInHandleItem);
ret = button_press_handler (item, event, trim ? FadeInTrimHandleItem : FadeInHandleItem);
break;
case GDK_BUTTON_RELEASE:
ret = button_release_handler (item, event, FadeInHandleItem);
ret = button_release_handler (item, event, trim ? FadeInTrimHandleItem : FadeInHandleItem);
maybe_locate_with_edit_preroll ( rv->region()->position() );
break;
@ -506,11 +506,11 @@ Editor::canvas_fade_in_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
break;
case GDK_ENTER_NOTIFY:
ret = enter_handler (item, event, FadeInHandleItem);
ret = enter_handler (item, event, trim ? FadeInTrimHandleItem : FadeInHandleItem);
break;
case GDK_LEAVE_NOTIFY:
ret = leave_handler (item, event, FadeInHandleItem);
ret = leave_handler (item, event, trim ? FadeInTrimHandleItem : FadeInHandleItem);
break;
default:
@ -561,7 +561,7 @@ Editor::canvas_fade_out_event (GdkEvent *event, ArdourCanvas::Item* item, AudioR
}
bool
Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv)
Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv, bool trim)
{
bool ret = false;
@ -577,11 +577,11 @@ Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
clicked_control_point = 0;
clicked_axisview = &rv->get_time_axis_view();
clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
ret = button_press_handler (item, event, FadeOutHandleItem);
ret = button_press_handler (item, event, trim ? FadeOutTrimHandleItem : FadeOutHandleItem);
break;
case GDK_BUTTON_RELEASE:
ret = button_release_handler (item, event, FadeOutHandleItem);
ret = button_release_handler (item, event, trim ? FadeOutTrimHandleItem : FadeOutHandleItem);
maybe_locate_with_edit_preroll ( rv->region()->last_frame() - rv->get_fade_out_shape_width() );
break;
@ -590,11 +590,11 @@ Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
break;
case GDK_ENTER_NOTIFY:
ret = enter_handler (item, event, FadeOutHandleItem);
ret = enter_handler (item, event, trim ? FadeOutTrimHandleItem : FadeOutHandleItem);
break;
case GDK_LEAVE_NOTIFY:
ret = leave_handler (item, event, FadeOutHandleItem);
ret = leave_handler (item, event, trim ? FadeOutTrimHandleItem : FadeOutHandleItem);
break;
default:

View file

@ -1925,7 +1925,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
speed = tv->track()->speed();
}
framecnt_t const dt = adjusted_current_frame (event) - raw_grab_frame () + _pointer_frame_offset;
framecnt_t dt = adjusted_current_frame (event) - raw_grab_frame () + _pointer_frame_offset;
if (first_move) {
@ -1941,6 +1941,9 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
case ContentsTrim:
trim_type = "Region content trim";
break;
default:
assert(0);
break;
}
_editor->begin_reversible_command (trim_type);
@ -1973,42 +1976,65 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
non_overlap_trim = true;
}
/* contstrain trim to fade length */
if (_preserve_fade_anchor) {
switch (_operation) {
case StartTrim:
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (i->view);
if (!arv) continue;
boost::shared_ptr<AudioRegion> ar (arv->audio_region());
if (ar->locked()) continue;
framecnt_t len = ar->fade_in()->back()->when;
if (len < dt) dt = min(dt, len);
}
break;
case EndTrim:
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (i->view);
if (!arv) continue;
boost::shared_ptr<AudioRegion> ar (arv->audio_region());
if (ar->locked()) continue;
framecnt_t len = ar->fade_out()->back()->when;
if (len < -dt) dt = max(dt, -len);
}
break;
case ContentsTrim:
break;
}
}
switch (_operation) {
case StartTrim:
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
for (list<DraggingView>::iterator i = _views.begin(); i != _views.end(); ++i) {
bool changed = i->view->trim_front (i->initial_position + dt, non_overlap_trim);
if (changed && _preserve_fade_anchor) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (i->view);
if (arv) {
double distance;
double new_length;
framecnt_t len;
boost::shared_ptr<AudioRegion> ar (arv->audio_region());
distance = _drags->current_pointer_x() - grab_x();
len = ar->fade_in()->back()->when;
new_length = len - _editor->pixel_to_sample (distance);
new_length = ar->verify_xfade_bounds (new_length, true /*START*/ );
arv->reset_fade_in_shape_width (ar, new_length); //the grey shape
framecnt_t len = ar->fade_in()->back()->when;
framecnt_t diff = ar->first_frame() - i->initial_position;
double new_length = len - diff;
i->anchored_fade_length = ar->verify_xfade_bounds (new_length, true /*START*/ );
arv->reset_fade_in_shape_width (ar, i->anchored_fade_length, true);
}
}
}
break;
case EndTrim:
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
for (list<DraggingView>::iterator i = _views.begin(); i != _views.end(); ++i) {
bool changed = i->view->trim_end (i->initial_end + dt, non_overlap_trim);
if (changed && _preserve_fade_anchor) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (i->view);
if (arv) {
double distance;
double new_length;
framecnt_t len;
boost::shared_ptr<AudioRegion> ar (arv->audio_region());
distance = grab_x() - _drags->current_pointer_x();
len = ar->fade_out()->back()->when;
new_length = len - _editor->pixel_to_sample (distance);
new_length = ar->verify_xfade_bounds (new_length, false /*END*/ );
arv->reset_fade_out_shape_width (ar, new_length); //the grey shape
framecnt_t len = ar->fade_out()->back()->when;
framecnt_t diff = 1 + ar->last_frame() - i->initial_end;
double new_length = len + diff;
i->anchored_fade_length = ar->verify_xfade_bounds (new_length, false /*END*/ );
arv->reset_fade_out_shape_width (ar, i->anchored_fade_length, true);
}
}
}
@ -2057,15 +2083,10 @@ TrimDrag::finished (GdkEvent* event, bool movement_occurred)
if (_preserve_fade_anchor) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (i->view);
if (arv) {
double distance;
double new_length;
framecnt_t len;
boost::shared_ptr<AudioRegion> ar (arv->audio_region());
distance = _drags->current_pointer_x() - grab_x();
len = ar->fade_in()->back()->when;
new_length = len - _editor->pixel_to_sample (distance);
new_length = ar->verify_xfade_bounds (new_length, true /*START*/ );
ar->set_fade_in_length(new_length);
arv->reset_fade_in_shape_width (ar, i->anchored_fade_length);
ar->set_fade_in_length(i->anchored_fade_length);
ar->set_fade_in_active(true);
}
}
if (_jump_position_when_done) {
@ -2077,15 +2098,10 @@ TrimDrag::finished (GdkEvent* event, bool movement_occurred)
if (_preserve_fade_anchor) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (i->view);
if (arv) {
double distance;
double new_length;
framecnt_t len;
boost::shared_ptr<AudioRegion> ar (arv->audio_region());
distance = _drags->current_pointer_x() - grab_x();
len = ar->fade_out()->back()->when;
new_length = len - _editor->pixel_to_sample (distance);
new_length = ar->verify_xfade_bounds (new_length, false /*END*/ );
ar->set_fade_out_length(new_length);
arv->reset_fade_out_shape_width (ar, i->anchored_fade_length);
ar->set_fade_out_length(i->anchored_fade_length);
ar->set_fade_out_active(true);
}
}
if (_jump_position_when_done) {

View file

@ -261,6 +261,7 @@ public:
double initial_y; ///< the initial y position of the view before any reparenting
framepos_t initial_position; ///< initial position of the region
framepos_t initial_end; ///< initial end position of the region
double anchored_fade_length; ///< fade_length when anchored during drag
boost::shared_ptr<ARDOUR::Playlist> initial_playlist;
};

View file

@ -45,12 +45,14 @@ enum ItemType {
AutomationTrackItem,
FadeInItem,
FadeInHandleItem,
FadeInTrimHandleItem,
FadeOutItem,
FadeOutHandleItem,
FadeOutTrimHandleItem,
NoteItem,
FeatureLineItem,
LeftFrameHandle,
RightFrameHandle,
LeftFrameHandle,
RightFrameHandle,
StartCrossFadeItem,
EndCrossFadeItem,
CrossfadeViewItem,

View file

@ -692,8 +692,10 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
break;
case FadeInHandleItem:
case FadeInTrimHandleItem:
case FadeInItem:
case FadeOutHandleItem:
case FadeOutTrimHandleItem:
case FadeOutItem:
case StartCrossFadeItem:
case EndCrossFadeItem:
@ -1046,13 +1048,21 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case RegionViewNameHighlight:
case LeftFrameHandle:
case RightFrameHandle:
case RightFrameHandle:
if (!clicked_regionview->region()->locked()) {
_drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
return true;
}
break;
case FadeInTrimHandleItem:
case FadeOutTrimHandleItem:
if (!clicked_regionview->region()->locked()) {
_drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer(), true), event);
return true;
}
break;
case RegionViewName:
{
/* rename happens on edit clicks */
@ -1272,12 +1282,12 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
switch (item_type) {
case RegionViewNameHighlight:
_drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
return true;
break;
_drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
return true;
break;
case LeftFrameHandle:
case RightFrameHandle:
case LeftFrameHandle:
case RightFrameHandle:
if (!internal_editing ()) {
_drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
}
@ -1558,12 +1568,14 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
switch (item_type) {
case FadeInItem:
case FadeInHandleItem:
case FadeInTrimHandleItem:
case StartCrossFadeItem:
popup_xfade_in_context_menu (1, event->button.time, item, item_type);
break;
case FadeOutItem:
case FadeOutHandleItem:
case FadeOutTrimHandleItem:
case EndCrossFadeItem:
popup_xfade_out_context_menu (1, event->button.time, item, item_type);
break;
@ -1898,7 +1910,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
if (is_drawable() && effective_mouse_mode() == MouseObject && !internal_editing() && entered_regionview) {
set_canvas_cursor_for_region_view (event->crossing.x, entered_regionview);
}
break;
break;
case RegionItem:
switch (effective_mouse_mode()) {
@ -1999,6 +2011,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
}
break;
case FadeInTrimHandleItem:
case FadeInHandleItem:
if (mouse_mode == MouseObject && !internal_editing()) {
ArdourCanvas::Rectangle *rect = dynamic_cast<ArdourCanvas::Rectangle *> (item);
@ -2010,6 +2023,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
}
break;
case FadeOutTrimHandleItem:
case FadeOutHandleItem:
if (mouse_mode == MouseObject && !internal_editing()) {
ArdourCanvas::Rectangle *rect = dynamic_cast<ArdourCanvas::Rectangle *> (item);
@ -2085,6 +2099,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
case StartSelectionTrimItem:
case EndSelectionTrimItem:
case PlayheadCursorItem:
case FadeInTrimHandleItem:
case FadeOutTrimHandleItem:
_over_region_trim_target = false;

View file

@ -326,9 +326,9 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
virtual bool canvas_start_xfade_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
virtual bool canvas_end_xfade_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
virtual bool canvas_fade_in_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
virtual bool canvas_fade_in_handle_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
virtual bool canvas_fade_in_handle_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*, bool) = 0;
virtual bool canvas_fade_out_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
virtual bool canvas_fade_out_handle_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
virtual bool canvas_fade_out_handle_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*, bool) = 0;
virtual bool canvas_region_view_event (GdkEvent* event, ArdourCanvas::Item*, RegionView*) = 0;
virtual bool canvas_frame_handle_event (GdkEvent* event, ArdourCanvas::Item*, RegionView*) = 0;
virtual bool canvas_region_view_name_highlight_event (GdkEvent* event, ArdourCanvas::Item*, RegionView*) = 0;