void spicker::handle_inside_event(Event &ev, image *screen, InputManager *inm) { switch (ev.type) { case EV_MOUSE_MOVE : { if (activate_on_mouse_move()) { int me; if (vert) me=last_sel+(ev.mouse_move.y-m_pos.y)/item_height(); else me=last_sel+(ev.mouse_move.x-m_pos.x)/item_width(); if (me<t && me>=0) { if (cur_sel!=me) { cur_sel=me; scroll_event(last_sel,screen); note_new_current(screen,inm,me); } } } } break; case EV_MOUSE_BUTTON : { int me; if (vert) me=last_sel+(ev.mouse_move.y-m_pos.y)/item_height(); else me=last_sel+(ev.mouse_move.x-m_pos.x)/item_width(); if (me<t && me>=0) { if (m) { if (ev.mouse_button) { if (ok_to_select(me)) { set_select(me,!get_select(me)); scroll_event(last_sel,screen); inm->grab_focus(this); } } else last_click=-1; } else if (ok_to_select(me)) { if (cur_sel==me) note_selection(screen,inm,me); else { cur_sel=me; scroll_event(last_sel,screen); note_new_current(screen,inm,me); } } } } break; } }
void spicker::handle_down(image *screen, InputManager *inm) { if (vert && cur_sel < t - 1) cur_sel++; else return; if (cur_sel > sx + r - 1) { draw_widget(screen, 1); last_sel = sx = cur_sel - r + 1; draw_widget(screen, 0); } scroll_event(sx, screen); note_new_current(screen, inm, cur_sel); }
void spicker::handle_up(image *screen, InputManager *inm) { if (vert && cur_sel > 0) { cur_sel--; if (cur_sel < sx) { draw_widget(screen, 1); last_sel = sx = cur_sel; draw_widget(screen, 0); } scroll_event(last_sel, screen); note_new_current(screen, inm, cur_sel); } }