Commit Graph

803 Commits

Author SHA1 Message Date
Paul Davis de334c14b1 drop use of Editor::sample_to_pixel_unrounded() in some cases
We want things rounded to the nearest pixel in these (and perhaps all) cases.
2023-06-15 20:10:32 -06:00
Paul Davis 73ed3bc7e0 midi copy drag: select all new notes after drag
Cut-n-paste worked before, but Primary-drag only selected the dragged note.

This also contains several code changes to use for (auto ...) syntax.
2023-06-14 21:42:23 -06:00
Paul Davis b35518e212 switch from boost::{shared,weak}_ptr to std::{shared,weak}_ptr
This is mostly a simple lexical search+replace but the absence of operator< for
std::weak_ptr<T> leads to some complications, particularly with Evoral::Sequence
and ExportPortChannel.
2023-03-24 14:19:15 -06:00
luzpaz 44a869732c Fix various typos
Found via `codespell`
2023-02-20 17:35:24 -07:00
Paul Davis bd82e2cc07 fix transparency when opaque MIDI region is edited 2023-01-22 17:41:43 -07:00
Robin Gareus 516bf1fa17
Set "opaque region base" alpha to 1.0 2022-12-10 02:37:05 +01:00
Robin Gareus 3442500002
Remove "midi frame base", consistent TAV color (1/2) 2022-12-10 02:37:05 +01:00
Robin Gareus 0bb81a9a18
Do not shade transparent regions in Layered mode
There already is a shaded coverage frame indicating
if a layer is audible. This leads to a more consistent view.

In addition changing layered mode now has to update the
colors (set_frame_color).
2022-12-10 02:37:05 +01:00
Robin Gareus f003bee985
Use a dedicated Canvas Group for MRV
This fixes rendering of opaque MIDI regions (previously
MIDI regions were always transparent). This change provides a
way to "flatten" layered MIDI regions, while still allowing
to show the note-line and grid behind the regions.
2022-12-10 02:37:05 +01:00
Robin Gareus 05b8df6da9
Item::grab_focus was a NO-OP (see 34e7c2ffc5) 2022-11-19 22:02:21 +01:00
Paul Davis 6832ad2af9 use correct name for recording note color 2022-11-01 08:12:05 -06:00
Paul Davis e06bd481a1 fix color of MIDI notes during capture so that they are visible 2022-10-28 16:41:15 -06:00
Paul Davis 492073e47d fix display of MIDI notes during recording
Note that the notes are almost invisible due to coloring
2022-10-28 16:39:38 -06:00
Paul Davis a3795031da patch changes: fix/supply missing code to position patch changes on session load
For one reason or another, the required computation from 6.9 had been
replaced with "x = 0".
2022-10-28 14:06:45 -06:00
Robin Gareus 63c78ebced Fix MIDI edit opertaiont (trim, draw) across tempo-changes
In the presence of tempo-changes distinguishing between offsets and
absolute positions is signficant. It is only valid to convert absolute
times using the tempo-map

Furthermore since GUI zoom-factor is time-invariant (samples per pixel),
all GUI operations must explictly use samples (or timecnt). It is not
valid (and problematic) to use use a location dependent timepos.
2022-10-23 19:12:31 +02:00
Paul Davis 173de9f0ef change MidiRegionView scroll behavior to somethings slightly more useful
1. leave tertiary-scroll for navigation and primary scroll for session timeline zoom
2. unmodified scroll in edit mode scrolls contents
3. secondary-scroll zooms in and out on contents (i.e. vertical zoom for MIDI)
4. primary-secondary scroll has the just-one-edge behavior previously provided
2022-09-30 16:32:29 -06:00
Paul Davis 47e9bb05c8 midi editing: if nudge clock says zero, use grid for nudging notes 2022-09-23 11:30:17 -06:00
Paul Davis 04d367fdfe midi note drawing: fix snap used to place ghost note 2022-09-22 16:16:20 -06:00
Paul Davis d2fc142e21 infrastructure and implementation to allow "q" to drive quantize-selected-notes in midi edit mode 2022-08-31 13:53:55 -06:00
Paul Davis b11ba8eec7 MIDI editing: primary+tertiary makes scroll do what it does when not editing 2022-08-31 12:16:14 -06:00
itmuckel 63f94d2946 Remove unused includes 2022-08-19 09:27:19 -06:00
Robin Gareus c0ec11db8e
Cleanup code, return early, don't nest 2022-07-14 01:25:06 +02:00
Robin Gareus b4a7c8a17d
Better version of 6a57baf193
This also fixes Menu > Edit Delete "delete MIDI" operation.
Pressing backspace/delete calls "Delete Selection" which is
unrelated to MRV::cut_copy_clear.
2022-07-14 01:23:04 +02:00
Robin Gareus 6a57baf193
Fix MIDI note cut
1. Editor::cut_copy() calls begin_reversible_command ("cut MIDI")
2. Editor::cut_copy_midi calls mrv->cut_copy_clear()
3. MidiRegionView::cut_copy_clear calls start_note_diff_command()
4. second call to  begin_reversible_command()
- debug builds assert() here, optimized builds continue
5. abort_reversible_command() is called, _current_trans = NULL;
6. MidiModel::apply_diff_command_as_subcommand()
7. Session::add_command, segfault because _current_trans == NULL

```
An UNDO transaction was started while a prior command was underway.
Aborting command (midi edit) and prior (cut MIDI)
```
2022-07-13 22:12:30 +02:00
Paul Davis f631f742fa remove debug output 2022-06-29 08:17:16 -06:00
Paul Davis fadf77e39c NO-OP: update comment to reflect the context 2022-06-28 12:24:54 -06:00
Paul Davis 5c2831e218 tempo display: modify how we implement MidiRegionView::_redisplay() so that the width is also correctly updated 2022-06-28 12:21:44 -06:00
Paul Davis 4acd63b2ef fix uninitialized variable (detected with valgrind) 2022-06-18 12:37:39 -06:00
Robin Gareus 86ddb11b9b
Fix displaying note events across tempo-changes
Note position in samples must be calculated using absolute position
on the timeline. Otherwise the tempo-map is not applied correctly.

Previously this caused issues since the position was first
offset back by _region->position() - time relative to region left
edge - and then the tempo-map was applied.

Another solution identically would be:
(note_start + session_source_start).samples() - _region->position().samples()
2022-06-17 17:07:47 +02:00
Ben Loftis 39f41e2357 fix midi-note Copy+Paste and Duplicate actions
* broken in 1fa7a7
2022-05-13 14:00:14 -05:00
Ben Loftis 41815f8d53 midi_region_view: use absolute_time_to_region_beats
* this fixes the location of the 'ghost note' that is shown
 when adding notes with the Draw tool
2022-05-12 12:15:53 -05:00
Ben Loftis 83d0892777 when drawing notes, the grid should be scaled to the zoom scale
this prevents the case where have enabled snap, and you add a note that
 appears to be on a bar line. but actually it is {some Grid value} off,
 it just looks right because of pixel rounding.
2022-05-11 11:45:33 -05:00
Ben Loftis a60dfc19d2 take Snap enablement into account when drawing new notes
* snap_to_bbt assumes that snap is enabled and you want to snap to bbt
* snap_to() is the generic form to snap to the user's snap+grid settings
2022-05-11 11:38:54 -05:00
Ben Loftis ee137333b9 midi_region_view: implement undo for duplicating a note selection 2022-05-10 15:47:56 -05:00
Ben Loftis dbe49ae8c4 editor::paste fix a thinko in undo nesting 2022-05-10 15:47:56 -05:00
Ben Loftis 1fa7a72f72 midi_region_view: rename 'apply_diff' to 'apply_note_diff' for clarity
these functions operate on the _note_diff_command,
 which is explicitly a NoteDiff,  not a generic DiffCommand

also fix a few thinkos where the ambiguous naming led to errors
2022-05-10 15:47:48 -05:00
Ben Loftis 133600d5dc midi_region_view::apply_diff: implement using renamed midi_model functions 2022-05-10 15:47:48 -05:00
Ben Loftis 9fcf8b3a11 midi_region_view: rename commit_resizing -> finish_resizing
* 'commit' suggests that this function would commit an undo record
2022-05-10 15:47:48 -05:00
Ben Loftis f9c9fd099d midi_region_view: adopt midi_model renaming (gtk patch_change part)
* apply_diff_command_as_commit explicitly tells us we don't
  need the begin/commit pair here
2022-05-10 15:47:47 -05:00
Paul Davis 9c9273e694 scrolling the midi track/region works only if pointed-at-region is selected 2022-05-10 11:45:52 -06:00
Paul Davis 126a85aaca midi editing: simple click on region in internal edit/draw modes selects region 2022-05-10 11:45:10 -06:00
Robin Gareus fd33784e45
Suppres debug output from optimized builds
see also dc9eb38a27

Even though it may be useful to get timing information from
optimized builds, this should not be enabled by default.
2022-05-03 20:12:21 +02:00
Paul Davis 9e77d8923a MIDI: ctrl-d now duplicates selected notes
This commit also fixes selection-after-paste, so that the selection is always
the newly pasted notes.
2022-04-27 08:13:09 -06:00
Paul Davis 0852032e85 midi note editing: adjust scroll modifiers and allow range expansion as well as scroll 2022-04-17 23:23:45 -06:00
Paul Davis b725b7ddb4 midi editing: scroll in a midi region with no selection will scroll the note range (#8721) 2022-04-17 23:16:50 -06:00
Paul Davis a0d08232ad midi selection: implement MidiRegionView::set_selected()
This allows an MRV to clear its own selection of notes when
the region itself is deselected. This should help #8729 and #8899
2022-04-17 22:58:16 -06:00
Paul Davis e01452c6a6 MIDI editing: clean up logic for ::note_selected()
The behavior should be the same but the logical intent of the code is now more
obvious.
2022-04-17 22:17:09 -06:00
Paul Davis 95b1943978 midi editing: when transposing, expand MIDI streamview note range when/as necessary so that notes do not vanish 2022-04-17 12:03:36 -06:00
Paul Davis bde3f3a277 midi region view: allow change_note_note() to return the new note value 2022-04-17 12:02:53 -06:00
Paul Davis 3315a6588a midi regon view: fix logic error introduced when redisplay was split between model_changed and view_changed 2022-04-17 12:02:18 -06:00