bool Seq24SeqEventInput::on_button_release_event ( GdkEventButton * a_ev, seqevent & seqev ) { long tick_s; long tick_f; seqev.grab_focus(); seqev.m_current_x = int(a_ev->x) + seqev.m_scroll_offset_x; if (seqev.m_moving) seqev.snap_x(seqev.m_current_x); int delta_x = seqev.m_current_x - seqev.m_drop_x; long delta_tick; if (CLICK_IS_LEFT(a_ev->button)) { if (seqev.m_selecting) { int x, w; seqev.x_to_w(seqev.m_drop_x, seqev.m_current_x, x, w); seqev.convert_x(x, tick_s); seqev.convert_x(x + w, tick_f); (void) seqev.m_seq.select_events ( tick_s, tick_f, seqev.m_status, seqev.m_cc, sequence::e_select ); } if (seqev.m_moving) { delta_x -= seqev.m_move_snap_offset_x; /* adjust for snap */ seqev.convert_x(delta_x, delta_tick); /* to screen coordinates */ seqev.m_seq.push_undo(); /* still moves events */ seqev.m_seq.move_selected_notes(delta_tick, 0); } set_adding(m_adding, seqev); } if (CLICK_IS_RIGHT(a_ev->button)) { set_adding(false, seqev); } seqev.m_selecting = false; /* turn off */ seqev.m_moving = false; seqev.m_growing = false; seqev.m_moving_init = false; seqev.m_painting = false; seqev.m_seq.unpaint_all(); seqev.update_pixmap(); /* if they clicked, something changed */ seqev.draw_pixmap_on_window(); return true; }
bool FruitySeqEventInput::on_button_release_event ( GdkEventButton * ev, seqevent & seqev ) { bool result = false; midipulse tick_s; midipulse tick_f; seqev.grab_focus(); seqev.m_current_x = int(ev->x) + seqev.m_scroll_offset_x;; if (seqev.m_moving || m_is_drag_pasting) seqev.snap_x(seqev.m_current_x); int delta_x = seqev.m_current_x - seqev.m_drop_x; midipulse delta_tick; if (SEQ64_CLICK_LEFT(ev->button)) { int current_x = seqev.m_current_x; midipulse t_s, t_f; seqev.snap_x(current_x); seqev.convert_x(current_x, t_s); t_f = t_s + (seqev.m_zoom); /* shift back a few ticks */ if (t_s < 0) t_s = 0; /* * Use the ctrl-left click button up for select/drag copy/paste; * use the left click button up for ending a move of selected notes. */ if (m_is_drag_pasting) { m_is_drag_pasting = false; m_is_drag_pasting_start = false; seqev.m_paste = false; /* convert deltas into screen coordinates */ seqev.m_seq.paste_selected(t_s, 0); result = true; } /* ctrl-left click but without movement - select a note */ if (m_is_drag_pasting_start) { m_is_drag_pasting_start = false; /* * If a ctrl-left click without movement and if the note under * cursor is selected, and ctrl is held and button-down, * just select one. */ if /* deselect the event? */ ( is_ctrl_key(ev) && ! m_justselected_one && seqev.m_seq.select_events ( t_s, t_f, seqev.m_status, seqev.m_cc, sequence::e_is_selected ) ) { (void) seqev.m_seq.select_events ( t_s, t_f, seqev.m_status, seqev.m_cc, sequence::e_deselect ); } } m_justselected_one = false; /* clear flag on left button up */ if (seqev.m_moving) { delta_x -= seqev.m_move_snap_offset_x; /* adjust for snap */ seqev.convert_x(delta_x, delta_tick); /* deltas to screen coords */ seqev.m_seq.move_selected_notes(delta_tick, 0); result = true; } } /* * Yet another stazed fix. :-) */ bool right = SEQ64_CLICK_RIGHT(ev->button); if (! right) right = is_ctrl_key(ev) && SEQ64_CLICK_LEFT(ev->button); if (right) { if (seqev.m_selecting) { int x, w; seqev.x_to_w(seqev.m_drop_x, seqev.m_current_x, x, w); seqev.convert_x(x, tick_s); seqev.convert_x(x + w, tick_f); (void) seqev.m_seq.select_events ( tick_s, tick_f, seqev.m_status, seqev.m_cc, sequence::e_toggle_selection ); #ifdef USE_STAZED_SELECTION_EXTENSIONS /* * Stazed fix */ if (event::is_strict_note_msg(seqev.m_status)) seqev.m_seq.select_linked(tick_s, tick_f, seqev.m_status); #endif /* * To update the select or unselect of notes by this action. * Not sure this makes sense, though. How does selection dirty * anything? */ seqev.m_seq.set_dirty(); } } seqev.m_selecting = false; /* turn it all off */ seqev.m_moving = false; seqev.m_growing = false; seqev.m_moving_init = false; seqev.m_painting = false; seqev.m_seq.unpaint_all(); seqev.update_pixmap(); /* if they clicked, something changed */ seqev.draw_pixmap_on_window(); update_mouse_pointer(seqev); return result; // true; }
bool Seq24SeqEventInput::on_button_release_event ( GdkEventButton * ev, seqevent & seqev ) { bool result = false; midipulse tick_s; midipulse tick_f; seqev.grab_focus(); seqev.m_current_x = int(ev->x) + seqev.m_scroll_offset_x; if (seqev.m_moving) seqev.snap_x(seqev.m_current_x); int delta_x = seqev.m_current_x - seqev.m_drop_x; midipulse delta_tick; if (SEQ64_CLICK_LEFT(ev->button)) { if (seqev.m_selecting) { int x, w; seqev.x_to_w(seqev.m_drop_x, seqev.m_current_x, x, w); seqev.convert_x(x, tick_s); seqev.convert_x(x + w, tick_f); (void) seqev.m_seq.select_events ( tick_s, tick_f, seqev.m_status, seqev.m_cc, sequence::e_select ); #ifdef USE_STAZED_SELECTION_EXTENSIONS /* * Stazed fix: if we did'nt select anything (user clicked empty * space), then unselect all notes, and start selecting. */ if (event::is_strict_note_msg(seqev.m_status)) { seqev.m_seq.select_linked(tick_s, tick_f, seqev.m_status); } seqev.m_seq.set_dirty(); // ??????????? Why not in brackets? #endif } if (seqev.m_moving) { delta_x -= seqev.m_move_snap_offset_x; /* adjust for snap */ seqev.convert_x(delta_x, delta_tick); /* to screen coordinates */ seqev.m_seq.move_selected_notes(delta_tick, 0); result = true; } set_adding(m_adding, seqev); } if (SEQ64_CLICK_RIGHT(ev->button)) { set_adding(false, seqev); } seqev.m_selecting = false; /* turn off */ seqev.m_moving = false; seqev.m_growing = false; seqev.m_moving_init = false; seqev.m_painting = false; seqev.m_seq.unpaint_all(); seqev.update_pixmap(); /* if a click, something changed */ seqev.draw_pixmap_on_window(); return result; // true; }