bool FruityPerfInput::on_button_press_event(GdkEventButton* a_ev, perfroll& ths) { ths.grab_focus( ); if ( ths.m_mainperf->is_active( ths.m_drop_sequence )) { ths.m_mainperf->get_sequence( ths.m_drop_sequence )->unselect_triggers( ); ths.draw_background_on( ths.m_pixmap, ths.m_drop_sequence ); ths.draw_sequence_on( ths.m_pixmap, ths.m_drop_sequence ); ths.draw_drawable_row( ths.m_window, ths.m_pixmap, ths.m_drop_y); } ths.m_drop_x = (int) a_ev->x; ths.m_drop_y = (int) a_ev->y; m_current_x = (int) a_ev->x; m_current_y = (int) a_ev->y; ths.convert_xy( ths.m_drop_x, ths.m_drop_y, &ths.m_drop_tick, &ths.m_drop_sequence ); /* left mouse button */ if ( a_ev->button == 1) { on_left_button_pressed(a_ev, ths); } /* right mouse button */ if ( a_ev->button == 3 ) { on_right_button_pressed(a_ev, ths); } /* left-ctrl, or middle: split */ if ( a_ev->button == 2 ) { if ( ths.m_mainperf->is_active( ths.m_drop_sequence )){ bool state = ths.m_mainperf->get_sequence( ths.m_drop_sequence )->get_trigger_state( ths.m_drop_tick ); if ( state ) { ths.split_trigger(ths.m_drop_sequence, ths.m_drop_tick); } } } updateMousePtr( ths ); return true; }
void FruityPerfInput::update_mouse_pointer (perfroll & roll) { perform & p = roll.perf(); midipulse droptick; int dropseq; roll.convert_xy(m_current_x, m_current_y, droptick, dropseq); sequence * seq = p.get_sequence(dropseq); if (p.is_active(dropseq)) { midipulse start; midipulse end; if (seq->intersect_triggers(droptick, start, end)) { int wscalex = s_perfroll_size_box_click_w * c_perf_scale_x; int ymod = m_current_y % c_names_y; if ( start <= droptick && droptick <= (start + wscalex) && (ymod <= s_perfroll_size_box_click_w + 1) ) { roll.get_window()->set_cursor(Gdk::Cursor(Gdk::RIGHT_PTR)); } else if ( droptick <= end && (end - wscalex) <= droptick && ymod >= (c_names_y - s_perfroll_size_box_click_w - 1) ) { roll.get_window()->set_cursor(Gdk::Cursor(Gdk::LEFT_PTR)); } else roll.get_window()->set_cursor(Gdk::Cursor(Gdk::CENTER_PTR)); } else roll.get_window()->set_cursor(Gdk::Cursor(Gdk::PENCIL)); } else roll.get_window()->set_cursor(Gdk::Cursor(Gdk::CROSSHAIR)); }
void FruityPerfInput::updateMousePtr( perfroll& ths ) { // context sensitive mouse long drop_tick; int drop_sequence; ths.convert_xy( m_current_x, m_current_y, &drop_tick, &drop_sequence ); if (ths.m_mainperf->is_active( drop_sequence )) { long start, end; if (ths.m_mainperf->get_sequence(drop_sequence)->intersectTriggers( drop_tick, start, end )) { if (start <= drop_tick && drop_tick <= start + (c_perfroll_size_box_click_w * c_perf_scale_x) && (m_current_y % c_names_y) <= c_perfroll_size_box_click_w + 1) { ths.get_window()->set_cursor( Gdk::Cursor( Gdk::RIGHT_PTR )); } else if (end - (c_perfroll_size_box_click_w * c_perf_scale_x) <= drop_tick && drop_tick <= end && (m_current_y % c_names_y) >= c_names_y - c_perfroll_size_box_click_w - 1) { ths.get_window()->set_cursor( Gdk::Cursor( Gdk::LEFT_PTR )); } else { ths.get_window()->set_cursor( Gdk::Cursor( Gdk::CENTER_PTR )); } } else { ths.get_window()->set_cursor( Gdk::Cursor( Gdk::PENCIL )); } } else { ths.get_window()->set_cursor( Gdk::Cursor( Gdk::CROSSHAIR )); } }
bool Seq24PerfInput::on_button_press_event(GdkEventButton* a_ev, perfroll& ths) { ths.grab_focus( ); if ( ths.m_mainperf->is_active( ths.m_drop_sequence )) { ths.m_mainperf->get_sequence( ths.m_drop_sequence )->unselect_triggers( ); ths.draw_background_on( ths.m_pixmap, ths.m_drop_sequence ); ths.draw_sequence_on( ths.m_pixmap, ths.m_drop_sequence ); ths.draw_drawable_row( ths.m_window, ths.m_pixmap, ths.m_drop_y); } ths.m_drop_x = (int) a_ev->x; ths.m_drop_y = (int) a_ev->y; ths.convert_xy( ths.m_drop_x, ths.m_drop_y, &ths.m_drop_tick, &ths.m_drop_sequence ); /* left mouse button */ if ( a_ev->button == 1 ){ long tick = ths.m_drop_tick; /* add a new note if we didnt select anything */ if ( m_adding ){ m_adding_pressed = true; if ( ths.m_mainperf->is_active( ths.m_drop_sequence )){ long seq_length = ths.m_mainperf->get_sequence( ths.m_drop_sequence )->get_length( ); bool state = ths.m_mainperf->get_sequence( ths.m_drop_sequence )->get_trigger_state( tick ); if ( state ) { ths.m_mainperf->push_trigger_undo(); ths.m_mainperf->get_sequence( ths.m_drop_sequence )->del_trigger( tick ); } else { // snap to length of sequence tick = tick - (tick % seq_length); //m_adding_pressed_state = true; ths.m_mainperf->push_trigger_undo(); ths.m_mainperf->get_sequence( ths.m_drop_sequence )->add_trigger( tick, seq_length ); ths.draw_background_on( ths.m_pixmap, ths.m_drop_sequence ); ths.draw_sequence_on( ths.m_pixmap, ths.m_drop_sequence ); ths.draw_drawable_row( ths.m_window, ths.m_pixmap, ths.m_drop_y); //m_drop_tick_last = (m_drop_tick + seq_length - 1); } } } else { if ( ths.m_mainperf->is_active( ths.m_drop_sequence )){ ths.m_mainperf->push_trigger_undo(); ths.m_mainperf->get_sequence( ths.m_drop_sequence )->select_trigger( tick ); long start_tick = ths.m_mainperf->get_sequence( ths.m_drop_sequence )->get_selected_trigger_start_tick(); long end_tick = ths.m_mainperf->get_sequence( ths.m_drop_sequence )->get_selected_trigger_end_tick(); if ( tick >= start_tick && tick <= start_tick + (c_perfroll_size_box_click_w * c_perf_scale_x) && (ths.m_drop_y % c_names_y) <= c_perfroll_size_box_click_w + 1 ) { ths.m_growing = true; ths.m_grow_direction = true; ths.m_drop_tick_trigger_offset = ths.m_drop_tick - ths.m_mainperf->get_sequence( ths.m_drop_sequence )-> get_selected_trigger_start_tick( ); } else if ( tick >= end_tick - (c_perfroll_size_box_click_w * c_perf_scale_x) && tick <= end_tick && (ths.m_drop_y % c_names_y) >= c_names_y - c_perfroll_size_box_click_w - 1 ) { ths.m_growing = true; ths.m_grow_direction = false; ths.m_drop_tick_trigger_offset = ths.m_drop_tick - ths.m_mainperf->get_sequence( ths.m_drop_sequence )->get_selected_trigger_end_tick( ); } else { ths.m_moving = true; ths.m_drop_tick_trigger_offset = ths.m_drop_tick - ths.m_mainperf->get_sequence( ths.m_drop_sequence )-> get_selected_trigger_start_tick( ); } ths.draw_background_on( ths.m_pixmap, ths.m_drop_sequence ); ths.draw_sequence_on( ths.m_pixmap, ths.m_drop_sequence ); ths.draw_drawable_row( ths.m_window, ths.m_pixmap, ths.m_drop_y); } } } /* right mouse button */ if ( a_ev->button == 3 ){ set_adding( true, ths ); } /* middle, split */ if ( a_ev->button == 2 ) { if ( ths.m_mainperf->is_active( ths.m_drop_sequence )){ bool state = ths.m_mainperf->get_sequence( ths.m_drop_sequence )->get_trigger_state( ths.m_drop_tick ); if ( state ) { ths.split_trigger(ths.m_drop_sequence, ths.m_drop_tick); } } } return true; }