brush notes: secondary modifier changes to every-other-stride point
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user