(svn r1478) -Fix: [1099195] mouse-wheel in train replace window. Scrollbar1 and Scrollbar2 now work independently. You can only scroll on list and scrollbar itself; scrollbar must be next widget of the list.

-Fix: updated the few gui's that didn't have the scrollbar right after the listbox.
This commit is contained in:
darkvater
2005-01-11 00:24:27 +00:00
parent 38da06301d
commit 085563653f
8 changed files with 74 additions and 67 deletions

View File

@@ -96,13 +96,25 @@ void DispatchRightClickEvent(Window *w, int x, int y) {
}
void DispatchMouseWheelEvent(Window *w, int wheel)
void DispatchMouseWheelEvent(Window *w, uint widget, int wheel)
{
if (w->vscroll.count > w->vscroll.cap) {
int pos = clamp(w->vscroll.pos + wheel, 0, w->vscroll.count - w->vscroll.cap);
if (pos != w->vscroll.pos) {
w->vscroll.pos = pos;
SetWindowDirty(w);
const Widget *wi1 = &w->widget[widget];
const Widget *wi2 = &w->widget[widget + 1];
Scrollbar *sb;
/* The listbox can only scroll if scrolling was done on the scrollbar itself,
* or on the listbox (and the next item is (must be) the scrollbar)
* XXX - should be rewritten as a widget-dependent scroller but that's
* not happening until someone rewrites the whole widget-code */
if ((sb = &w->vscroll, wi1->type == WWT_SCROLLBAR) || (sb = &w->vscroll2, wi1->type == WWT_SCROLL2BAR) ||
(sb = &w->vscroll2, wi2->type == WWT_SCROLL2BAR) || (sb = &w->vscroll, wi2->type == WWT_SCROLLBAR) ) {
if (sb->count > sb->cap) {
int pos = clamp(sb->pos + wheel, 0, sb->count - sb->cap);
if (pos != sb->pos) {
sb->pos = pos;
SetWindowDirty(w);
}
}
}
}
@@ -1356,7 +1368,7 @@ void MouseLoop()
}
} else {
if (mousewheel)
DispatchMouseWheelEvent(w, mousewheel);
DispatchMouseWheelEvent(w, GetWidgetFromPos(w, x - w->left, y - w->top), mousewheel);
if (click == 1)
DispatchLeftClickEvent(w, x - w->left, y - w->top);