make trimming in region name (colored) highlight work even in internal edit mode; change enter/leave handler to return true by default (MIGHT HAVE UNINTENDED EFFECTS on mouse response), thus avoiding multiple stacked canvas items fighting over enter/leave
git-svn-id: svn://localhost/ardour2/branches/3.0@7195 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
b1d5a11194
commit
9b5f357490
@ -823,7 +823,8 @@ Editor::canvas_region_view_name_highlight_event (GdkEvent* event, ArdourCanvas::
|
|||||||
ret = button_release_handler (item, event, RegionViewNameHighlight);
|
ret = button_release_handler (item, event, RegionViewNameHighlight);
|
||||||
break;
|
break;
|
||||||
case GDK_MOTION_NOTIFY:
|
case GDK_MOTION_NOTIFY:
|
||||||
ret = motion_handler (item, event);
|
motion_handler (item, event);
|
||||||
|
ret = true; // force this to avoid progagating the event into the regionview
|
||||||
break;
|
break;
|
||||||
case GDK_ENTER_NOTIFY:
|
case GDK_ENTER_NOTIFY:
|
||||||
ret = enter_handler (item, event, RegionViewNameHighlight);
|
ret = enter_handler (item, event, RegionViewNameHighlight);
|
||||||
|
@ -315,7 +315,6 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,7 +458,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
|||||||
|
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case RegionItem:
|
case RegionItem:
|
||||||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
||||||
set_selected_regionview_from_click (press, op, true);
|
set_selected_regionview_from_click (press, op, true);
|
||||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||||
selection->clear_tracks ();
|
selection->clear_tracks ();
|
||||||
@ -472,7 +472,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
|||||||
|
|
||||||
case RegionViewNameHighlight:
|
case RegionViewNameHighlight:
|
||||||
case RegionViewName:
|
case RegionViewName:
|
||||||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
||||||
set_selected_regionview_from_click (press, op, true);
|
set_selected_regionview_from_click (press, op, true);
|
||||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||||
set_selected_track_as_side_effect ();
|
set_selected_track_as_side_effect ();
|
||||||
@ -668,6 +668,14 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RegionViewNameHighlight:
|
||||||
|
{
|
||||||
|
RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id);
|
||||||
|
_drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event);
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (!internal_editing()) {
|
if (!internal_editing()) {
|
||||||
_drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event);
|
_drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event);
|
||||||
@ -1402,6 +1410,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||||||
ControlPoint* cp;
|
ControlPoint* cp;
|
||||||
Marker * marker;
|
Marker * marker;
|
||||||
double fraction;
|
double fraction;
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
if (last_item_entered != item) {
|
if (last_item_entered != item) {
|
||||||
last_item_entered = item;
|
last_item_entered = item;
|
||||||
@ -1460,7 +1469,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case RegionViewNameHighlight:
|
case RegionViewNameHighlight:
|
||||||
if (is_drawable() && mouse_mode == MouseObject) {
|
if (is_drawable() && (mouse_mode == MouseObject || (internal_editing() && mouse_mode == MouseRange))) {
|
||||||
track_canvas->get_window()->set_cursor (*trimmer_cursor);
|
track_canvas->get_window()->set_cursor (*trimmer_cursor);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1590,7 +1599,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -1602,6 +1611,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||||||
Location *loc;
|
Location *loc;
|
||||||
RegionView* rv;
|
RegionView* rv;
|
||||||
bool is_start;
|
bool is_start;
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case ControlPointItem:
|
case ControlPointItem:
|
||||||
@ -1712,7 +1722,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
@ -1843,7 +1853,6 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from
|
|||||||
if (_drags->active ()) {
|
if (_drags->active ()) {
|
||||||
handled = _drags->motion_handler (event, from_autoscroll);
|
handled = _drags->motion_handler (event, from_autoscroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!handled) {
|
if (!handled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -229,8 +229,7 @@ void
|
|||||||
MidiRegion::recompute_at_end ()
|
MidiRegion::recompute_at_end ()
|
||||||
{
|
{
|
||||||
/* our length has changed
|
/* our length has changed
|
||||||
* (non destructively) "chop" notes that pass the end boundary, to
|
* so what? stuck notes are dealt with via a note state tracker
|
||||||
* prevent stuck notes.
|
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ SMFSource::read_unlocked (Evoral::EventSink<nframes_t>& destination, sframes_t s
|
|||||||
assert(time >= start_ticks);
|
assert(time >= start_ticks);
|
||||||
const sframes_t ev_frame_time = converter.to(time / (double)ppqn()) + stamp_offset;
|
const sframes_t ev_frame_time = converter.to(time / (double)ppqn()) + stamp_offset;
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
cerr << " frames = " << ev_frame_time
|
cerr << " frames = " << ev_frame_time
|
||||||
<< " w/offset = " << ev_frame_time - negative_stamp_offset
|
<< " w/offset = " << ev_frame_time - negative_stamp_offset
|
||||||
<< endl;
|
<< endl;
|
||||||
@ -438,6 +438,18 @@ SMFSource::load_model (bool lock, bool force_reload)
|
|||||||
|
|
||||||
if (ret > 0) { // didn't skip (meta) event
|
if (ret > 0) { // didn't skip (meta) event
|
||||||
ev.set_event_type(EventTypeMap::instance().midi_event_type(buf[0]));
|
ev.set_event_type(EventTypeMap::instance().midi_event_type(buf[0]));
|
||||||
|
|
||||||
|
std::string ss;
|
||||||
|
|
||||||
|
for (int xx = 0; xx < size; ++xx) {
|
||||||
|
char b[8];
|
||||||
|
snprintf (b, sizeof (b), "0x%x ", buf[xx]);
|
||||||
|
ss += b;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG_TRACE (DEBUG::MidiSourceIO, string_compose ("SMF %6 load model delta %1, time %2, size %3 buf %4, type %5\n",
|
||||||
|
delta_t, time, size, ss , ev.event_type(), name()));
|
||||||
|
|
||||||
_model->append(ev);
|
_model->append(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user