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