Пример #1
0
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;
  }
}
Пример #2
0
void spicker::area_config() {
	if (vert)
		l = item_width() + 4;
	else
		l = item_width() * c + 4;

	if (vert)
		h = item_height() * r + 4;
	else
		h = item_height() + 4;

}
Пример #3
0
void spicker::scroll_event(int newx, image *screen) {
	last_sel = newx;
	int xa, ya, xo, yo;
	xo = x + 2;
	yo = y + 2;
	if (vert) {
		xa = 0;
		ya = item_height();
	} else {
		xa = item_width();
		ya = 0;
	}
	draw_background(screen);

	for (int i = newx; i < newx + vis(); i++) {
		if (i < t) {
			if (m)
				draw_item(screen, xo, yo, i, get_select(i));
			else
				draw_item(screen, xo, yo, i, i == cur_sel);
		}
		xo += xa;
		yo += ya;
	}
}
Пример #4
0
 virtual void draw_item(image *screen, int x, int y, int num, int active)
 {
     long x2 = x + item_width() - 1;
     long y2 = y + item_height() - 1;
     screen->Bar(ivec2(x, y), ivec2(x2, y2), 0);
     screen->Bar(ivec2(x, y), ivec2(x2 - 3, y2), sc + num);
     if(active)
     {
         screen->Rectangle(ivec2(x, y), ivec2(x2, y2), 255);
     }
 }
Пример #5
0
void spicker::area_config()
{
    l = item_width() * (vert ? 1 : c) + 4;
    h = item_height() * (vert ? r : 1) + 4;
}