[Add] Nice, scrolling/scrollbar pretty much works in lists now.
This commit is contained in:
		
							parent
							
								
									2f5ca43840
								
							
						
					
					
						commit
						1d175199f4
					
				@ -287,7 +287,7 @@ void window_addList(const unsigned int wid, const int x, const int y,
 | 
			
		||||
 | 
			
		||||
  /* Position/Size. */
 | 
			
		||||
  wgt->w = (double) w;
 | 
			
		||||
  wgt->h = (double) h - ((h % (gl_defFont.h+2)) + 2);
 | 
			
		||||
  wgt->h = (double) h - ((h % (gl_defFont.h+2)) - 2);
 | 
			
		||||
  toolkit_setPos(wdw, wgt, x, y);
 | 
			
		||||
 | 
			
		||||
  /* Check if needs scrollbar. */
 | 
			
		||||
@ -1165,7 +1165,8 @@ static void toolkit_renderList(Widget* lst, double bx, double by) {
 | 
			
		||||
    /* We need to make room for list. */
 | 
			
		||||
    w -= 10.;
 | 
			
		||||
 | 
			
		||||
    scroll_pos = (double)lst->dat.lst.pos / ((double)lst->dat.lst.height - lst->h);
 | 
			
		||||
    scroll_pos =  (double)(lst->dat.lst.pos * (2 + gl_defFont.h));
 | 
			
		||||
    scroll_pos /= ((double)lst->dat.lst.height - lst->h);
 | 
			
		||||
    toolkit_drawScrollbar(x + lst->w - 10., y, 10., lst->h, scroll_pos);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -1179,7 +1180,7 @@ static void toolkit_renderList(Widget* lst, double bx, double by) {
 | 
			
		||||
  /* Draw content. */
 | 
			
		||||
  tx = (double)SCREEN_W/2. + x+2.;
 | 
			
		||||
  ty = (double)SCREEN_H/2. + y+lst->h - 2. - gl_defFont.h;
 | 
			
		||||
  miny = ty - lst->h;
 | 
			
		||||
  miny = ty - lst->h + 2 + gl_defFont.h;
 | 
			
		||||
  y = ty-2.;
 | 
			
		||||
  w -= 4;
 | 
			
		||||
 | 
			
		||||
@ -1507,10 +1508,8 @@ static void toolkit_mouseEvent(SDL_Event* event) {
 | 
			
		||||
          if(toolkit_isFocusable(wgt))
 | 
			
		||||
            w->focus = i;
 | 
			
		||||
 | 
			
		||||
          if(wgt->type == WIDGET_LIST) {
 | 
			
		||||
          if(wgt->type == WIDGET_LIST)
 | 
			
		||||
            toolkit_listFocus(wgt, x-wgt->x, y-wgt->y);
 | 
			
		||||
            //input_key = 0; /* Hack to avoid weird bug with permascroll. */
 | 
			
		||||
          }
 | 
			
		||||
          
 | 
			
		||||
          else if(wgt->type == WIDGET_IMAGEARRAY)
 | 
			
		||||
            toolkit_imgarrFocus(wgt, x-wgt->x, y-wgt->y);
 | 
			
		||||
@ -1729,6 +1728,7 @@ static void toolkit_listScroll(Widget* wgt, int direction) {
 | 
			
		||||
  int xelem, yelem;
 | 
			
		||||
  double hmax;
 | 
			
		||||
  Window* wdw;
 | 
			
		||||
  int pos;
 | 
			
		||||
 | 
			
		||||
  if(wgt == NULL) return;
 | 
			
		||||
 | 
			
		||||
@ -1737,9 +1737,25 @@ static void toolkit_listScroll(Widget* wgt, int direction) {
 | 
			
		||||
  switch(wgt->type) {
 | 
			
		||||
  case WIDGET_LIST:
 | 
			
		||||
    wgt->dat.lst.selected -= direction;
 | 
			
		||||
    
 | 
			
		||||
    /* Boundary check. */
 | 
			
		||||
    wgt->dat.lst.selected = MAX(0, wgt->dat.lst.selected);
 | 
			
		||||
    wgt->dat.lst.selected = MIN(wgt->dat.lst.selected, wgt->dat.lst.noptions-1);
 | 
			
		||||
    if(wgt->dat.lst.fptr) (*wgt->dat.lst.fptr)(wdw->id, wgt->name);
 | 
			
		||||
 | 
			
		||||
    /* See if we have to scroll. */
 | 
			
		||||
    pos = (wgt->dat.lst.selected - wgt->dat.lst.pos);
 | 
			
		||||
    if(pos < 0) {
 | 
			
		||||
      wgt->dat.lst.pos += pos;
 | 
			
		||||
      if(wgt->dat.lst.pos < 0)
 | 
			
		||||
        wgt->dat.lst.pos = 0;
 | 
			
		||||
    }
 | 
			
		||||
    else if(2 + (pos+1) * (gl_defFont.h + 2) > wgt->h) {
 | 
			
		||||
      wgt->dat.lst.pos += (2 + (pos+1) * (gl_defFont.h + 2) - wgt->h) / (gl_defFont.h + 2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(wgt->dat.lst.fptr)
 | 
			
		||||
      (*wgt->dat.lst.fptr)(wdw->id, wgt->name);
 | 
			
		||||
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case WIDGET_IMAGEARRAY:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user