13
0
Commit Graph

740 Commits

Author SHA1 Message Date
nick_m
3e4eaf3991 improve sysex data display.
- don't add a new SysEx canvas item every time we zoom or drag.

	- speed up redisplay generally using PatchChange-like method
	  for finding items (find_canvas_sys_ex() in boost::unordered_map).
2017-02-04 22:57:36 +11:00
nick_m
59daffea1d rework snap
snap now fills in a struct (MusicFrame) which contins a snapped frame
along with a music divisor.
this gives useful information wrt magnetic snap which may or may not
have rounded to an exact musical position.

region position may now be set musically (using quarter notes for now).

this patch fixes several problems in the current code:

	- dragging a list of music-locked regions now maintains correct
	  musical offsets within the list.

	- splitting regions using magnetic snap works correctly (#7192)

	- cut drag should now work correctly with magnetic snap.

	- musical length of split midi regions is no longer frame based.
2017-02-04 22:57:36 +11:00
nick_m
ab052d0565 speed up midi ghost region update
- as MRV removes invalid notes from the GR, we
	  can simply update all events after checking vertical visibility.
2017-01-30 01:46:38 +11:00
nick_m
e7415c6619 MidiRegionView::redisplay_model() - code cleanup 2017-01-27 00:56:39 +11:00
8432a77329 MIDI note copy needs to adjust pitch of new notes before adding them 2017-01-24 23:07:27 +01:00
8dedea5ffa implement copy-drag for MIDI notes.
Probably some corner cases to be fixed, but pretty functional and largely modelled
on existing code (paste, drag, step add note etc.)
2017-01-23 21:58:02 +01:00
3dbdc4d837 Leave some notes about memory-leaks 2017-01-20 13:54:12 +01:00
nick_m
9e9f99f004 note display performance.
use boost::unordered_map as a note store for ghost & midi region
	views.

	as per otiginal method, only notes within regoin bounds are stored.
2017-01-04 00:19:31 +11:00
nick_m
4d274cbf26 fix bug where hidden ghostregions were updated. 2016-12-30 20:40:48 +11:00
8b8f705520 Fix updates of region-color 2016-12-29 23:06:15 +01:00
nick_m
e58fda2fa2 minor MidiRegionView::redisplay_model() cleanup 2016-12-30 00:46:43 +11:00
nick_m
68ca289b92 retain note selection for invalidated notes. 2016-12-30 00:40:20 +11:00
nick_m
f4b3133035 more note performance work (dereference less). 2016-12-29 23:22:06 +11:00
nick_m
149cb402b9 revert 7805217b5 (make note mode change work again). 2016-12-29 23:15:35 +11:00
nick_m
d49b141e11 improve the performance of MidiRegionView::find_canvas_patch_change().
- also fixes patch changes appearing outside region bounds
	  when copied/trimmed.
2016-12-29 04:21:37 +11:00
nick_m
7805217b5f don't clear note items in MidiRegionView::display_model().
- redisplay_model() does this for us.
2016-12-29 02:39:57 +11:00
nick_m
da92d2d764 speed up load/quit for sessions containing ~25k events.
- MGR uses a _note_group to hold events.

	- MRV & MGR delete canvas notes directly from their note group.

	- sysex is untested (it uses MRV note group).
2016-12-24 02:01:37 +11:00
nick_m
ddd085cf4e hide ghost events appropriately (e.g. after split). 2016-12-23 05:07:22 +11:00
nick_m
37e858da7d only update GhostEvents on visible trackviews.
- this requires that MidiGhostRegion::update_contents_height()
	  also controls visibility.
2016-12-23 02:55:51 +11:00
nick_m
96048ad4c0 midi scrooming performance updates.
- MGR visibility is handled by update_note/hit()
	  MRV unconditionally updates MGR events
	- remove MidiGhostRegion::update_range()
	- rename set_contents_height -> update_contents_height
2016-12-23 00:51:34 +11:00
nick_m
eecc9ed743 fix various midi display bugs introduced by 9038be49d8. 2016-12-21 03:18:18 +11:00
nick_m
9038be49d8 improve midi zoom/scroom performance with lots of notes.
- mostly due to searching a multiset rather than a list of
	  canvas events.
2016-12-20 21:31:54 +11:00
nick_m
a99331a4e9 more work on patch change redisplay.
- fixes just-introduced undo crash.
2016-12-16 01:58:58 +11:00
c9444e048e correct return syntax 2016-12-15 11:57:31 +00:00
nick_m
cfbcadc7ef speed up patch change redisplay when using scroomer / adjusting height.
- zoom is still a bit slow.
2016-12-15 22:35:23 +11:00
nick_m
176625d9e0 test diff for patch change performance when caching colours. 2016-12-14 04:05:08 +11:00
08fffeffec Remove Evoral::MIDIEvent
It is slightly questionable whether type specific methods like
velocity() belong on Event at all, these may be better off as free
functions.  However the code currently uses them as methods in many
places, and it seems like a step in the right direction, since, for
example, we might some day have events that have a velocity but aren't
stored as MIDI messages (e.g. if Ardour uses an internal musical model
that is more expressive).

In any case, the former inheritance and plethora of sloppy casts is
definitely not the right thing.
2016-12-03 15:18:21 -05:00
nick_m
bd107a28c6 MidiRegionView::clear_events() does _selection.clear(). remove the extra one. 2016-11-23 15:32:13 +11:00
nick_m
fcad5a337f decouple midi region note range and height from midi streamview.
- this allows a midi region drag to update the visible notes
	  correctly while crossing MIDI streamviews with a differing
	  note range.
	  as a side effect, fixes a bug where changing
	  note range on a track did not draw some notes
	  (apply_note_range redisplays the model).
2016-11-23 08:04:14 +11:00
nick_m
766fa9aa5b don't display notes that start at region end.
- its not obvious that this is happening in sustained mode,
	  but Percussive reveals all.
2016-11-22 02:59:57 +11:00
nick_m
a14c577b8a fix thinko in 8e8c4a73f1. 2016-11-22 02:21:05 +11:00
nick_m
8e8c4a73f1 prevent Percussive mode from displaying a ghost hit at region end. 2016-11-22 02:01:01 +11:00
nick_m
eef18c47fd fix compilation, rename PercussiveCreateDrag -> HitCreateDrag 2016-11-21 04:20:27 +11:00
nick_m
5bcb9adbf8 rework mouse hit creation (percussive mode) - mostly as per #7130.
- snap behaviour is round to nearest

	- holding down button 1 while dragging creates many
	  (if not already present) hits.
2016-11-21 04:02:21 +11:00
nick_m
7eed31a4b2 MRV handles an alt key press even if nothing happened.
- nothing else treats a modifier press as
	  a key press event, so don't pass it on.
	  amends 0af9fb0d
2016-11-21 01:17:24 +11:00
nick_m
f989ed5b7f fix for short notes being displayed as infinitely long. 2016-11-21 00:17:31 +11:00
nick_m
0af9fb0dee pressing alt while creating a note (snap modifier) keeps mouse_state. 2016-11-20 04:54:20 +11:00
nick_m
e525be86d6 after creating a note, don't add the ghost note until next motion. 2016-11-20 04:51:38 +11:00
nick_m
cb64e926c2 NoteCreateDrag starts on button press.
- removes the separation between click and
	  drag-creation of notes noth now handled by the drag code).
2016-11-20 04:49:18 +11:00
nick_m
0e0ef41ed4 remove unused variable. 2016-11-19 21:42:50 +11:00
nick_m
c9dd1d39d1 further to 1a6a72b57, handle deleting a note while a non-selected one is entered. 2016-11-19 21:40:41 +11:00
nick_m
1a6a72b57a fix for ghost note becoming stuck after note selection deleted.
- thanks ristic for the report
2016-11-19 03:03:20 +11:00
nick_m
d9dea0a3aa rename Region pos_beats -> quarter_note 2016-11-11 03:37:08 +11:00
nick_m
dca96d8b5d rename Region pulse to pos_beats. use new beat distance api where required.
- add more debugging output detecting regions whose
	  beat and frame position do not align on a playlist.
	  this is required as a check as we have never used
	  frame rounding on constant tempi before 8884a5723dc
2016-11-11 03:37:08 +11:00
nick_m
24846f478b clean up ghost note wrt create drag.
- hide ghost note when add dragging.

	- new note length snaps as per ghost note start (shifted snap).

	- prevent ghost note from appearing before region start.
2016-10-26 04:52:09 +11:00
nick_m
1c9dbb5242 Amend previous commit. 2016-10-17 04:33:48 +11:00
nick_m
2359a0b2fa Set note colour of new MidiGhostRegions corrctly. 2016-10-17 04:23:43 +11:00
nick_m
1692968627 Slightly improve note update performance, fix note resizing for non-4.0 meter divisors. 2016-10-16 03:11:05 +11:00
nick_m
9698f16aee Note selection state uses note event_id_t. 2016-10-15 23:50:02 +11:00
nick_m
4faf44588f Interpret start & length_beats properties as double rather than Evoral::Beats.
- Evoral::Beats operator!= would prevent an increment
	  of start_beats by intervals of less than a tick,
	  so its possible that other subtle problems
	  existed due to this kind of thing.
2016-10-10 03:39:57 +11:00
nick_m
a54d105107 Use double comparison in MidiRegionView::note_in_region_range(). 2016-10-09 03:24:14 +11:00
nick_m
4270569528 Fix bug where drawing long notes placed the new note on the previous snap line.
- NoteCreateDrag already applies this shift, so it was
	  always applied twice to the note start frame.
2016-09-23 05:06:03 +10:00
nick_m
080e7755a6 Remove _midi_regions_use_bbt_beats from Session, _start_pulse and _length_pulse from MidiRegion.
- _start/length_beats are now quarter notes regardless
	  of loaded session version.

	- also restores note colour update
2016-09-23 03:39:05 +10:00
Guido Aulisi
e2b724194e Do not delete selected MIDI notes while dragging. (See #6602)
This is not caused by commit_reversible_command, but because
NoteDrag::total_dx calls Evoral::Note<Evoral::Beats>::time()
with invalid MIDI note (deleted).
2016-09-15 23:24:36 +10:00
nick_m
fb9f4636e7 Remove unused variable. 2016-09-07 00:27:01 +10:00
nick_m
d7879486a0 Ensure the correct position is passed to MidiRegionView::get_grid_beats(). 2016-09-02 05:18:53 +10:00
nick_m
34e234825e No-op - rename var in MidiRegionView::note_dropped(). 2016-08-31 23:12:11 +10:00
nick_m
c0f89e99a2 MidiRegionView uses quarter note snapping.
- also ensures poiinter ghost note respects the snap modifier.
2016-08-31 23:12:11 +10:00
nick_m
a9b72f87a6 Add missing line feed in midi_region_view.cc 2016-08-16 00:56:08 +10:00
nick_m
cecbae1df4 Midi region ghost note uses beat-based note time calculation. 2016-08-16 00:52:18 +10:00
nick_m
62372b48ea Fix frame-based beat calculation in MidiRegionView::snap_frame_to_grid_underneath()
- this caused the ghost note under the pointer to behave badly when
	  hovering near an audio-locked meter.
2016-08-16 00:48:54 +10:00
6a4fb58384 fix thinko that causes near duplicate menu items in group context menu when not in group tabs 2016-08-08 23:36:33 +02:00
nick_m
6e49ca61a4 Remove the temporary note group in MidiRegionView, update start trim during drag. 2016-07-22 23:21:27 +10:00
cf52d6e4b4 enough with umpteen "i18n.h" files. Consolidate on pbd/i18n.h 2016-07-14 14:45:23 -04:00
7ed6dab340 use new midi-note-name API 2016-07-12 23:02:46 +02:00
140258d8ab remove reference "const int32_t&" -> const int32_t"
this simplifies lua-bindings and also let's the compiler worry about
constant primitive types.
2016-07-10 15:30:41 +02:00
nick_m
5f0ab71989 Midi note resizing uses exact beat. 2016-07-10 02:18:38 +10:00
nick_m
11f002ddc4 Use exact beat when adding midi notes. 2016-07-10 02:18:38 +10:00
nick_m
9603233a68 Fix note trimming over tempo changes, correct note length properly when resizing midi region. 2016-07-10 02:18:37 +10:00
nick_m
13c851f3cf Restore earlier midi region trim display. 2016-07-10 02:18:37 +10:00
nick_m
b732147676 Use Note::set (Rect) for speed improvement when rendering notes. 2016-07-10 02:18:37 +10:00
nick_m
71ed5865f5 Temporary work-around for note colour. 2016-07-10 02:18:37 +10:00
nick_m
7a6efaaf3d Quick fix to get trim working again (bahaving oddly during trim right now) 2016-07-10 02:18:37 +10:00
nick_m
550f2925cc Performance - don't redisplay model immediately in MidiRegionView::enable_display ().
- allows MidiRegionView::reset_width_dependent_items () to do it
	  as intended (i think).
2016-07-10 02:18:36 +10:00
nick_m
6b0eadc62f Use mostly beat-based calculation for displayed midi note position. 2016-07-10 02:18:36 +10:00
nick_m
0e63fa65b5 Remove frame conversion for MidiRegionView::note_in_region_range(), speed up tempo dilation 2016-07-10 02:18:36 +10:00
nick_m
93c24e4433 Paste uses exact beats. rework _start_beats calculation in copy-with-offset ctor. 2016-07-10 02:18:36 +10:00
nick_m
94e0a15325 Exact beat - provide audio->music mapping for region split.
- for those not in the know, this series provides a way to
	  remove the temporal distortion introduced when using an
	  audio frame-based gui for music-locked objects.

	  In short, the gui uses an audio frame representation to move
	  objects. It displays the object using frame_at_beat(), quantizing
	  the time value to audio frames. This is fine until the user selects
	  that frame but expects it to be interpreted as a beat.
	  Thus beat_at_frame() would not produce the user-expected beat
	  (temporal quantization error of up to 0.5 audio samples).
	  This is one method of mapping audio time to music time accurately.
2016-07-10 02:18:36 +10:00
nick_m
f3b4644969 Fix many offset errors when drawing notes in midi regions that have been edited.
- hopefully this can close bugs such as 6270 & 6793
2016-06-11 05:40:50 +10:00
nick_m
03ea905b86 Step edit cursor no longer assumes constant tempo. 2016-06-08 02:45:40 +10:00
4653e301c8 slight improvement of MIDI program names in verbose cursor while scrolling 2016-05-31 15:30:44 -04:00
nick_m
5d6ad68004 Revert terrible thinko in 647c86e. (back to slow for now) 2016-05-29 05:57:19 +10:00
nick_m
647c86e0f7 Speed up redraw while tempo dragging with midi regions (and possibly other redraws) 2016-05-29 05:47:11 +10:00
nick_m
baf8f37967 Tempo ramps - rename meter_at() -> meter_at_frame() & make the ticker slightly more efficient. 2016-05-27 23:38:17 +10:00
nick_m
4f7a4cd233 Crapola - this is an experimental performance hack that must be reverted. 2016-05-27 23:38:14 +10:00
nick_m
e82c997b3d Tempo ramps - remove double calls to RegionView::set_duration() and MidiRegionView::redisplay_model()
- massively improves note redrawing performance when dragging tempos
	  and audio-locked meters,
2016-05-27 23:38:11 +10:00
nick_m
b415b59f79 Tempo ramps - respect tempo note type and meter note divisor correctly.
- tempo and meter position is now pulse-based,
	  although meter still has a beat for convenience.
2016-05-27 23:38:11 +10:00
nick_m
d3c24fe0ca Tempo ramps - midi notes resize when dragged, misc bug fixes. 2016-05-27 23:38:11 +10:00
nick_m
bdef9b2466 Tempo ramps - fix constant tempo assumption wrt midi ghost note. 2016-05-27 23:38:10 +10:00
nick_m
885f1fd684 Tempo ramps - update midi regions and locations when dragging tempo.
- also make locations and regions use a double beat rather than bbt for musical position.
2016-05-27 23:38:10 +10:00
nick_m
dbfe991cd8 Tempo ramps - fix changing from const to ramp in the gui.
- also fixes some midi mouse over problems
	- start using replacements for frames_per_bar() frames_per_beat() etc.
2016-05-27 23:38:09 +10:00
Adrian Knoth
6fa88273aa Spelling correction patch from Debian
Patch taken (and forward-ported to HEAD) from
<https://anonscm.debian.org/cgit/pkg-multimedia/ardour.git/plain/debian/patches/0100-fix-typos.patch>
2016-02-22 15:13:01 -05:00
90e35c7143 Fix bug #6762, MIDNAM note read outs don't work when dragging MIDI note
Also fixes it so the key is selected in the piano roll header
2016-02-11 08:17:18 +10:00
084af96bf4 Change handling of Midi note selection to eliminate signal emission/delays.
Each MidiRegionView(MRV) is connected to the Selection::ClearMidiNoteSelection
signal that is used to notify the all MRV instances to clear their note
selection.

The MRV class also has a private static SelectionCleared signal that is used to
signal other MRV instances when their selection has been cleared. When the
Selection::ClearMidiNoteSelection signal is emitted it causes each MRV to also
emit the SelectionCleared signal. So the emission takes quadratic time.

With 1500 MRV instances emission takes about 2.2 seconds on my machine, and
some operations like track selection cause it to be emitted 3 times(another
issue).

The Selection class in the Editor knows which MRV instances have note
selections, as it is notified by MidiRegionView whenever the selection count
becomes zero or becomes non-zero. Clearing the Note selection should then just
be O(N) and direct calls can be used rather than signals.

This change removes both the signals and uses the existing references between
Selection and MRV class to control note selection. There should be no
behavioural changes in Midi note selection with this change.
2016-01-14 20:41:44 +10:00
André Nusser
ef9713d5c6 Comment remaining unsolved bug. 2016-01-12 13:45:39 +01:00
André Nusser
f979d9c0a6 Don't show a ghost note when draw mode is entered over a note. 2016-01-12 13:45:39 +01:00
André Nusser
616c1aa0ce Clean enter_internal and leave_internal in MidiRegionView. 2016-01-12 13:45:39 +01:00
André Nusser
76237a696c Hide MIDI ghost note when over existing note. 2016-01-12 13:45:38 +01:00
André Nusser
688fe8504b Hide ghost note when switching from draw to internal edit mode.
Before it was only hidden after moving the mouse.
2016-01-12 13:45:38 +01:00
André Nusser
2d786617bb Fix appearing ghost note after drag select in internal edit mode. 2016-01-12 13:45:38 +01:00
Nil Geisweiller
93ea63f6d0 Better align note end time with grid 2015-12-22 04:52:50 +01:00
Nil Geisweiller
ef393f5a88 Remove shortening inserted notes by one tick
I don't think this is necessary, if some synth cannot deal with that,
perhaps Ardour could try to send the note off right before the next
note on, even-though they supposedly occur simultaneously.
2015-12-22 04:52:50 +01:00
André Nusser
6389c52d3c Enable horizontal scrolling in midi regions when note is selected.
The shortcut for 'change velocities together' had to be changed to
achieve that. The new shortcut is now primary+tertiary modifier +scroll,
i.e. ctrl+shift+scroll for the default keys.
2015-12-02 18:36:59 -05:00
nick_m
0e809dd1d5 Add comment to MRV snap workaround. 2015-11-01 01:43:13 +11:00
nick_m
d5c4d068b0 Fix snap modifiers not working on notes when grid is set to off. 2015-10-31 06:02:54 +11:00
nick_m
96524d863b Clear point selection when uniquely selecting a note.
- Also fix selection undo when creating notes w/control
	  in MouseContent mode.
2015-10-24 00:07:03 +11:00
b074ff0dd5 Remove GhostRegion::CatchDeletion signal to reduce session close times
Currently when a GhostRegion is deleted by its "parent" RegionView it emits the
static GhostRegion::CatchDeletion signal which is connected to the
RegionView::remove_ghost method of every RegionView instance.

With a static GhostRegion::CatchDeletion signal a particular test session
causes 31 Million calls of RegionView::remove_ghost on Session deletion and the
session takes 70 seconds to close with a debug build.

The lifetime of a ghost region is tied to both the TimeAxisView(TAV) and
RegionView(RV) in that when a RegionView is deleted all GhostRegion instances
associated with the RegionView should be deleted or when a TimeAxisView is
deleted all ghost regions that are contained in the view should be deleted.

This means that there needs to be notification between GhostRegion and both
classes. Instead of using a signal for this as we know there are only two
listeners and GhostRegion already holds a reference to the TimeAxisView, also
take a reference to the parent RegionView in the GhostRegion constructor and
use it to notify the RegionView when GhostRegion destructor is called so it can
drop any references it holds.

Using a direct function call in the GhostRegion destructor to notify the
TimeAxisView and RegionView "parents" brings the unload/close time down for the
test session from 70 seconds to 4.5 seconds.

The GhostRegion also references canvas items that are added to the TimeAxisView
canvas group or at least a canvas group that it manages. So when the
TimeAxisView is destroyed and the canvas group that is the parent of those
items is destroyed, the GhostRegion's canvas items will also be
deleted/destroyed by the parent canvas item/group. This means the GhostRegions
must be destroyed when the TimeAxisView they are contained in is destroyed or
there will be dangling references to canvas items that have already been
deleted and trying to delete them again will be bad.
2015-10-22 11:51:03 -04:00
e7b8e98db2 Replace static PBD::Signal in NoteBase with direct call to MidiRegionView
NoteBaseDeleted signal is static so each MidiRegionView(MRV) gets notified
about the deletion of each NodeBase instance even if it is contained in another
MRV

The NoteBase and MRV classes are currently coupled anyway, so this change uses
the reference to the MRV parent to directly call the parent when the NoteBase
is deleted. This is all in the GUI thread so I'm not sure why a PBD::Signal was
being used?

If the MRV class is the only reference holder to the NoteBase class
then I'm not sure if a callback is needed, perhaps the MRV should just remove
the note from the selection before deleting it but I'm not that familiar with
the code.

Signal emission/calls static NoteBaseDeleted signal vs direct with 10540
NoteBase instances.

static:

After Load Session: 6360638
After Unload Session: 12221026(5860388)

direct:

After load Session: 10540
After unload Session: 21080

Session Load/Unload time in master, debug/release with ~10000 Notes(seconds)

Load Debug: 32, 26
Unload Debug: 83
Load Release 32, 20, 42
Unload Release 26, 25

Session Load/Unload time with direct call debug/release(seconds)

Load Debug: 21.7, 18.1
Unload Debug: 69.4, 71
Load Release: 22.6, 13.4, 17.7
Unload Release: 24, 23.5

This is not a large Session, 1500 regions, 10000 notes so there is probably
some other funky stuff going on that needs fixing.
2015-10-17 22:15:07 -04:00
22b07e0233 NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
4dc63966f0 globally remove all trailing whitespace from ardour code base.
Paul Davis was responsible for introducing almost all of this.
2015-10-04 14:51:05 -04:00
2ef2ea0b59 create new Event-IDs for pasted midi-notes 2015-09-18 20:37:23 +02:00
6b019a4953 Move UIConfiguration Singleton into UIConfiguration header
This removes the direct dependence on ardour_ui.h from 39 files
2015-09-16 16:55:17 -04:00
344c435dae cont'd work on piano roll highlighting. 2015-08-15 05:13:14 +02:00
f2495d9808 Highlight note in piano roll - #6510 2015-08-15 03:08:55 +02:00
da3df9c1d1 Revert "replace two more instances of !! with implicit use of operator bool()"
This reverts commit e8eff9fb9c2fa6fc518404c2f9b731f8c28d3a23.

OS X compiler gets confused by this change.
2015-06-29 14:18:15 -04:00
8ac11386a6 replace two more instances of !! with implicit use of operator bool() 2015-06-29 14:18:15 -04:00
c4c7dc0086 Revert "use newly added operator bool() for Evoral::Beats rather than double-negation as boolean"
This reverts commit a19902b52f08bf33c54e60dfb49c44a1c154f4c9.

OS X compiler gets confused by this change.
2015-06-29 14:18:14 -04:00
9c84633eb4 Revert "replace two more instances of !! with implicit use of operator bool()"
This reverts commit e8eff9fb9c2fa6fc518404c2f9b731f8c28d3a23.

OS X compiler gets confused by this change.
2015-06-29 14:18:14 -04:00
82fc73d663 replace two more instances of !! with implicit use of operator bool() 2015-06-29 14:18:14 -04:00
15b3ad956d use newly added operator bool() for Evoral::Beats rather than double-negation as boolean 2015-06-29 14:18:14 -04:00
nick_m
392f48709c Magnetic snap now works on note moves / resizes. 2015-06-11 02:20:37 +10:00
nick_m
b3a4c88e0e Make absolute snap the default snap.
- also fixes a couple of absolute snap bugs wrt midi notes.
2015-06-11 01:36:34 +10:00
nick_m
2ef94d9422 Fix uninitialised variable. 2015-05-28 23:37:46 +10:00
nick_m
ea8b5a970f Bring back contrained drag modifier with preference setting.
- this should work as before, but when applied to a button 1 drag,
	  the constraint is in the first direction travelled.
2015-05-23 05:36:03 +10:00
nick_m
3d599be991 Fix missing comment. 2015-05-23 03:44:42 +10:00
nick_m
88477ace25 Fix inverted logic of SnapOff with snap modifiers pressed.
- also clean up, rename and comment some previous hanges.
2015-05-23 03:09:48 +10:00
nick_m
784abd03e0 Make note drags and resizes obey the disable sanp modifier. 2015-05-22 06:54:16 +10:00
nick_m
65e06fa350 More cleanup
- remove "no_magnets" ugh.
2015-05-22 04:26:16 +10:00
nick_m
c359f881a1 Relative Snap -make it activated by the tertiary modifier during drag.
Disabled/enabled with the shift key. no config stuff at all now.
	Move existing (strange) trim feature to primary + tertiary modifiers.
2015-05-17 23:47:01 +10:00
nick_m
91a34c596d Relative snap - support magnetic mode (hackishly for now) 2015-05-17 04:26:05 +10:00
nick_m
68a8330afc Relative snap 2015-05-16 04:15:52 +10:00
c9023ae73d Fix mute of MIDI tracks with channel forcing.
This moves MIDI channel filtering into a reusable class and moves filtering to
the source, rather than modifying the buffer afterwards.  This is necessary so
that the playlist trackers reflect the emitted notes (and thus are able to stop
them in situations like mute).

As a perk, this is also faster because events are just dropped on read, rather
than pushed into a buffer then later removed (which is very slow).

Really hammering on mute or solo still seems to produce stuck notes
occasionally (perhaps related to multiple-on warnings).  I am not yet sure why,
but occasional beats always.
2015-03-29 00:51:56 -04:00
74b3d0b602 Drag/Drop work-around midi note bleeding
During DnD, the region uses the 'old/current'                                                                                                                                                                                                
midi_stream_view()'s range and its position/height calculation.

Ideally DnD would decouple the midi_stream_view() for the
region(s) being dragged and set it to the target's range
(or in case of the drop-zone, FullRange).
but I don't see how this can be done without major rework.

For now, just prevent visual bleeding of events in case
the target-track is smaller.
2015-03-28 18:22:37 +01:00
nick_m
1580c6d635 Fix some strings incorrectly marked for translation.
My apologies to translators.
2015-03-25 23:31:23 +11:00
b72fc759c0 Only sound selected notes momentarily (#6142).
This is debatable, the "sustained until mouse release" behaviour is handy
sometimes, but this way seems like what most people probably want.

Also, this "fire it and forget it and let it delete itself a bit later" thing
with MidiPlayer makes me nervous.  I guess it's unlikely someone manages to
select a note then delete a track within 100ms, but, well...
2015-03-14 01:12:29 -04:00
700cb13b36 Fix note visibility (#0006168). 2015-03-13 22:30:11 -04:00
a8aae56d92 Handle edits while playing precisely.
This avoids stuck notes if active notes are edited, but without stopping all
active notes in the region on any edit as before.

This implementation injects note ons in places that aren't actually note
starts.  Depending on how percussive the instrument is, this may not be
desired.  In the future, an option for this would be an improvement, but there
are other places where "start notes in the middle" is a reasonable option.  I
think that should be handled universally if we're to do it at all, so not
considering it a part of this fix for now.
2015-03-05 17:30:31 -05:00
232d67bc53 midi note paste undo fix. 2015-01-25 01:56:19 +01:00
8565470797 Fix hidden notes at trimmed region start. 2015-01-16 14:52:40 -05:00
nick_m
ade1c4923c Fix note resize double undo bug.
Newly drawn notes are selected.
Clear midi note selection on Selection::set_state().
2015-01-17 04:55:05 +11:00
nick_m
5ef868e767 Don't reuse _optimization_iterator - fixes crash on multiple note delete undo. 2015-01-13 22:52:02 +11:00
305af7a5ce Fix whitespace. 2015-01-12 02:06:40 -05:00
ba9a90b927 Merge duplicated code. 2015-01-12 02:06:40 -05:00
4438263d4d Fix crash when undoing note delete. 2015-01-12 02:03:49 -05:00
nick_m
44203ce955 Fix AutomationTrackItem rubberband click thinking it was unhandled.
Fix several other cases where a single mouse click could cause several
(not nested) selection ops.
Fix missing selection memento for midi notes and midi commands.
Rename some variables.
Fix random style issues.
2015-01-11 04:07:31 +11:00
8d98102573 Fix show MIDI regions using track color. 2015-01-08 19:59:40 -05:00
57947ff5a8 Prevent note trim to zero length (shown as stuck).
The reasonable value 1 tick doesn't seem to work here, presumably it gets lost
in rounding conversion somewhere.  Instead use a really small power of two
reciprocal.  Once we use actual beats and ticks we can fix this to be a minimum
of one tick (the actual minimum length for a note).
2015-01-08 19:13:00 -05:00
2a251b4570 MusicalTime => Beats. 2015-01-07 00:12:07 -05:00
2c8babf41e Fix stuck note display while recording.
This doesn't make sense, but I'm okay with that.
2014-12-30 20:06:37 -05:00
e82ce75cb1 Fix display of MIDI while recording.
... almost.  There are some artifacts when you zoom out while recording that I
can't figure out, but whatever.

Also fix performance issues caused by last attempt at rec display while zoom.
2014-12-30 19:16:41 -05:00