brush notes: secondary modifier changes to every-other-stride point

This commit is contained in:
Paul Davis
2025-10-31 15:56:15 -06:00
parent bdf7cc7590
commit a30540c3c0
3 changed files with 16 additions and 6 deletions

View File

@@ -6963,13 +6963,14 @@ HitCreateDrag::y_to_region (double y) const
/*-----------------------*/
HitBrushDrag::HitBrushDrag (EditingContext& ec, ArdourCanvas::Item* i, MidiView* mv, Temporal::Beats slen)
HitBrushDrag::HitBrushDrag (EditingContext& ec, ArdourCanvas::Item* i, MidiView* mv, Temporal::Beats slen, int sm)
: Drag (ec, i, Temporal::BeatTime, ec.get_trackview_group())
, _midi_view (mv)
, _last_pos (Temporal::Beats ())
, _y (0)
, added_notes (false)
, specified_length (slen)
, stride_multiple (sm)
{
}
@@ -7007,12 +7008,12 @@ HitBrushDrag::get_stride (Temporal::Beats const & pos, Temporal::BBT_Offset cons
} else if (q.bars == 0) {
return Temporal::Beats (q.beats, q.ticks);
return Temporal::Beats (q.beats, q.ticks) * stride_multiple;
}
Temporal::TempoMap::SharedPtr tmap (Temporal::TempoMap::use());
return tmap->meter_at (pos).to_quarters (q); /* Quantization as beats */
return tmap->meter_at (pos).to_quarters (q) * stride_multiple; /* Quantization as beats */
}
void

View File

@@ -716,7 +716,7 @@ private:
class HitBrushDrag : public Drag
{
public:
HitBrushDrag (EditingContext&, ArdourCanvas::Item *, MidiView *, Temporal::Beats specified_length = Temporal::Beats());
HitBrushDrag (EditingContext&, ArdourCanvas::Item *, MidiView *, Temporal::Beats specified_length = Temporal::Beats(), int stride_multiple = 1);
~HitBrushDrag ();
void start_grab (GdkEvent *, Gdk::Cursor* c = 0);
@@ -743,6 +743,7 @@ private:
Temporal::Beats next_grid;
bool added_notes;
Temporal::Beats specified_length;
int stride_multiple;
};

View File

@@ -564,15 +564,23 @@ MidiView::button_press (GdkEventButton* ev)
_editing_context.set_canvas_cursor (_editing_context.cursors()->midi_pencil);
int stride_multiple;
if (Keyboard::modifier_state_contains (ev->state, Keyboard::SecondaryModifier)) {
stride_multiple = 2;
} else {
stride_multiple = 1;
}
if (_midi_context.note_mode() == Percussive) {
if (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier)) {
draw_drag = new HitBrushDrag (_editing_context, drag_group(), this, Temporal::Beats (0, 60)); /* 1/128th notes */
draw_drag = new HitBrushDrag (_editing_context, drag_group(), this, Temporal::Beats (0, 60), stride_multiple); /* 1/128th notes */
} else {
draw_drag = new HitCreateDrag (_editing_context, drag_group(), this);
}
} else {
if (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier)) {
draw_drag = new HitBrushDrag (_editing_context, drag_group(), this);
draw_drag = new HitBrushDrag (_editing_context, drag_group(), this, Temporal::Beats(), stride_multiple);
} else {
draw_drag = new NoteCreateDrag (_editing_context, drag_group(), this);
}