From 28a801da0ac949bc04cc30721864f9596398f361 Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke <grumbel@gmx.de> Date: Sat, 29 Jan 2011 21:29:14 +0100 Subject: [PATCH] Pass min/max to all AxisEventHandler --- src/axis_event.cpp | 35 ++++++++++++++++++++++------------- src/axis_event.hpp | 11 ++++++----- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/axis_event.cpp b/src/axis_event.cpp index 93e36b7..1d74e8c 100644 --- a/src/axis_event.cpp +++ b/src/axis_event.cpp @@ -165,6 +165,19 @@ AxisEvent::str() const return m_handler->str(); } +AxisEventHandler::AxisEventHandler() : + m_min(-1), + m_max(+1) +{ +} + +void +AxisEventHandler::set_axis_range(int min, int max) +{ + m_min = min; + m_max = max; +} + RelAxisEventHandler* RelAxisEventHandler::from_string(const std::string& str) { @@ -227,8 +240,14 @@ RelAxisEventHandler::init(UInput& uinput, int slot, bool extra_devices) void RelAxisEventHandler::send(UInput& uinput, int value) { - // FIXME: Need to know the min/max of value - int v = m_value * value / 32767; + float value_f; + if (value < 0) + value_f = static_cast<float>(value) / static_cast<float>(-m_min); + else + value_f = static_cast<float>(value) / static_cast<float>(m_max); + + int v = static_cast<int>(m_value * value_f); + if (v == 0) uinput.send_rel_repetitive(m_code, v, -1); else @@ -285,8 +304,6 @@ AbsAxisEventHandler::from_string(const std::string& str) AbsAxisEventHandler::AbsAxisEventHandler() : m_code(UIEvent::invalid()), - m_min(-32768), // FIXME: this must be properly set - m_max(32767), m_fuzz(0), m_flat(0) { @@ -294,18 +311,10 @@ AbsAxisEventHandler::AbsAxisEventHandler() : AbsAxisEventHandler::AbsAxisEventHandler(const UIEvent& code, int min, int max, int fuzz, int flat) : m_code(code), - m_min(min), - m_max(max), m_fuzz(fuzz), m_flat(flat) { -} - -void -AbsAxisEventHandler::set_axis_range(int min, int max) -{ - m_min = min; - m_max = max; + set_axis_range(min, max); } void diff --git a/src/axis_event.hpp b/src/axis_event.hpp index 6a4e7ae..b195998 100644 --- a/src/axis_event.hpp +++ b/src/axis_event.hpp @@ -66,14 +66,19 @@ private: class AxisEventHandler { +protected: + int m_min; + int m_max; + public: + AxisEventHandler(); virtual ~AxisEventHandler() {} virtual void init(UInput& uinput, int slot, bool extra_devices) =0; virtual void send(UInput& uinput, int value) =0; virtual void update(UInput& uinput, int msec_delta) =0; - virtual void set_axis_range(int min, int max) {} + virtual void set_axis_range(int min, int max); virtual std::string str() const =0; }; @@ -108,8 +113,6 @@ public: AbsAxisEventHandler(); AbsAxisEventHandler(const UIEvent& code, int min, int max, int fuzz, int flat); - void set_axis_range(int min, int max); - void init(UInput& uinput, int slot, bool extra_devices); void send(UInput& uinput, int value); void update(UInput& uinput, int msec_delta); @@ -118,8 +121,6 @@ public: private: UIEvent m_code; - int m_min; - int m_max; int m_fuzz; int m_flat; };