summaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2006-08-21 14:34:59 +0000
committertruelight <truelight@openttd.org>2006-08-21 14:34:59 +0000
commit9ec2fdcbf3c6a7be52e714c4086fa8e09082b2d3 (patch)
tree9114619f0346a37ef440c8665a23d7f0e5955b44 /window.c
parent323a3160f7d4ad69e2472e7f94f0b1de0e39a98f (diff)
downloadopenttd-9ec2fdcbf3c6a7be52e714c4086fa8e09082b2d3.tar.xz
(svn r6036) -Codechange: do not handle SCROLL in a central function, but let windows handle them theirself. Added WE_SCROLL for this.
Diffstat (limited to 'window.c')
-rw-r--r--window.c91
1 files changed, 11 insertions, 80 deletions
diff --git a/window.c b/window.c
index b22629b33..c28172462 100644
--- a/window.c
+++ b/window.c
@@ -1146,99 +1146,30 @@ static bool HandleScrollbarScrolling(void)
static bool HandleViewportScroll(void)
{
+ WindowEvent we;
Window *w;
- int dx;
- int dy;
if (!_scrolling_viewport) return true;
- if (!_right_button_down) {
-stop_capt:;
+ w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
+
+ if (!_right_button_down || w == NULL) {
_cursor.fix_at = false;
_scrolling_viewport = false;
return true;
}
- w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
- if (w == NULL) goto stop_capt;
-
if (_patches.reverse_scroll) {
- dx = -_cursor.delta.x;
- dy = -_cursor.delta.y;
+ we.scroll.delta.x = -_cursor.delta.x;
+ we.scroll.delta.y = -_cursor.delta.y;
} else {
- dx = _cursor.delta.x;
- dy = _cursor.delta.y;
+ we.scroll.delta.x = _cursor.delta.x;
+ we.scroll.delta.y = _cursor.delta.y;
}
- if (w->window_class != WC_SMALLMAP) {
- ViewPort *vp = IsPtInWindowViewport(w, _cursor.pos.x, _cursor.pos.y);
-
- if (vp == NULL)
- goto stop_capt;
-
- WP(w,vp_d).scrollpos_x += dx << vp->zoom;
- WP(w,vp_d).scrollpos_y += dy << vp->zoom;
-
- } else {
- int x;
- int y;
- int sub;
- int hx;
- int hy;
- int hvx;
- int hvy;
-
- _cursor.fix_at = true;
-
- x = WP(w,smallmap_d).scroll_x;
- y = WP(w,smallmap_d).scroll_y;
-
- sub = WP(w,smallmap_d).subscroll + dx;
-
- x -= (sub >> 2) << 4;
- y += (sub >> 2) << 4;
- sub &= 3;
-
- x += (dy >> 1) << 4;
- y += (dy >> 1) << 4;
-
- if (dy & 1) {
- x += TILE_SIZE;
- sub += 2;
- if (sub > 3) {
- sub -= 4;
- x -= TILE_SIZE;
- y += TILE_SIZE;
- }
- }
-
- hx = (w->widget[4].right - w->widget[4].left) / 2;
- hy = (w->widget[4].bottom - w->widget[4].top ) / 2;
- hvx = hx * -4 + hy * 8;
- hvy = hx * 4 + hy * 8;
- if (x < -hvx) {
- x = -hvx;
- sub = 0;
- }
- if (x > (int)MapMaxX() * TILE_SIZE - hvx) {
- x = MapMaxX() * TILE_SIZE - hvx;
- sub = 0;
- }
- if (y < -hvy) {
- y = -hvy;
- sub = 0;
- }
- if (y > (int)MapMaxY() * TILE_SIZE - hvy) {
- y = MapMaxY() * TILE_SIZE - hvy;
- sub = 0;
- }
-
- WP(w,smallmap_d).scroll_x = x;
- WP(w,smallmap_d).scroll_y = y;
- WP(w,smallmap_d).subscroll = sub;
-
- SetWindowDirty(w);
- }
+ /* Create a scroll-event and send it to the window */
+ we.event = WE_SCROLL;
+ w->wndproc(w, &we);
_cursor.delta.x = 0;
_cursor.delta.y = 0;