[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. */
|
/* Position/Size. */
|
||||||
wgt->w = (double) w;
|
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);
|
toolkit_setPos(wdw, wgt, x, y);
|
||||||
|
|
||||||
/* Check if needs scrollbar. */
|
/* 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. */
|
/* We need to make room for list. */
|
||||||
w -= 10.;
|
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);
|
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. */
|
/* Draw content. */
|
||||||
tx = (double)SCREEN_W/2. + x+2.;
|
tx = (double)SCREEN_W/2. + x+2.;
|
||||||
ty = (double)SCREEN_H/2. + y+lst->h - 2. - gl_defFont.h;
|
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.;
|
y = ty-2.;
|
||||||
w -= 4;
|
w -= 4;
|
||||||
|
|
||||||
@ -1507,10 +1508,8 @@ static void toolkit_mouseEvent(SDL_Event* event) {
|
|||||||
if(toolkit_isFocusable(wgt))
|
if(toolkit_isFocusable(wgt))
|
||||||
w->focus = i;
|
w->focus = i;
|
||||||
|
|
||||||
if(wgt->type == WIDGET_LIST) {
|
if(wgt->type == WIDGET_LIST)
|
||||||
toolkit_listFocus(wgt, x-wgt->x, y-wgt->y);
|
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)
|
else if(wgt->type == WIDGET_IMAGEARRAY)
|
||||||
toolkit_imgarrFocus(wgt, x-wgt->x, y-wgt->y);
|
toolkit_imgarrFocus(wgt, x-wgt->x, y-wgt->y);
|
||||||
@ -1729,6 +1728,7 @@ static void toolkit_listScroll(Widget* wgt, int direction) {
|
|||||||
int xelem, yelem;
|
int xelem, yelem;
|
||||||
double hmax;
|
double hmax;
|
||||||
Window* wdw;
|
Window* wdw;
|
||||||
|
int pos;
|
||||||
|
|
||||||
if(wgt == NULL) return;
|
if(wgt == NULL) return;
|
||||||
|
|
||||||
@ -1737,9 +1737,25 @@ static void toolkit_listScroll(Widget* wgt, int direction) {
|
|||||||
switch(wgt->type) {
|
switch(wgt->type) {
|
||||||
case WIDGET_LIST:
|
case WIDGET_LIST:
|
||||||
wgt->dat.lst.selected -= direction;
|
wgt->dat.lst.selected -= direction;
|
||||||
|
|
||||||
|
/* Boundary check. */
|
||||||
wgt->dat.lst.selected = MAX(0, wgt->dat.lst.selected);
|
wgt->dat.lst.selected = MAX(0, wgt->dat.lst.selected);
|
||||||
wgt->dat.lst.selected = MIN(wgt->dat.lst.selected, wgt->dat.lst.noptions-1);
|
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;
|
break;
|
||||||
|
|
||||||
case WIDGET_IMAGEARRAY:
|
case WIDGET_IMAGEARRAY:
|
||||||
|
Loading…
Reference in New Issue
Block a user