1/*
2 * Copyright 2006, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan Aßmus <superstippi@gmx.de>
7 */
8
9#ifndef MOUSE_WHEEL_FILTER_H
10#define MOUSE_WHEEL_FILTER_H
11
12#include <Message.h>
13#include <MessageFilter.h>
14
15class MouseWheelTarget {
16 public:
17		MouseWheelTarget()
18		{
19		}
20	virtual ~MouseWheelTarget()
21		{
22		}
23
24	virtual bool MouseWheelChanged(float x, float y) = 0;
25};
26
27class MouseWheelFilter : public BMessageFilter {
28 public:
29	MouseWheelFilter(MouseWheelTarget* target)
30		: BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE),
31		  fTarget(target),
32		  fTargetHandler(dynamic_cast<BHandler*>(fTarget))
33		{
34		}
35	virtual	~MouseWheelFilter()
36		{
37		}
38	virtual	filter_result	Filter(BMessage* message, BHandler** target)
39		{
40			filter_result result = B_DISPATCH_MESSAGE;
41			switch (message->what) {
42				case B_MOUSE_WHEEL_CHANGED: {
43					float x;
44					float y;
45					if (message->FindFloat("be:wheel_delta_x", &x) >= B_OK
46						&& message->FindFloat("be:wheel_delta_y", &y) >= B_OK) {
47						if (fTarget->MouseWheelChanged(x, y))
48							//result = B_SKIP_MESSAGE;
49							*target = fTargetHandler;
50					}
51					break;
52				}
53				default:
54					break;
55			}
56			return result;
57		}
58 private:
59 	MouseWheelTarget*		fTarget;
60 	BHandler*				fTargetHandler;
61};
62
63#endif // MOUSE_WHEEL_FILTER_H
64
65