-/* $Id$
-
-This file is part of libmspgbase
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
-#ifndef MSP_GBASE_SMOOTHCONTROL_H_
-#define MSP_GBASE_SMOOTHCONTROL_H_
+#ifndef MSP_INPUT_SMOOTHCONTROL_H_
+#define MSP_INPUT_SMOOTHCONTROL_H_
+#include <msp/graphics/mspgui_api.h>
#include "control.h"
namespace Msp {
Two smooth controls can also be paired to each other. Motion on one control of
the pair will cause negative motion on the other. This works best when the
-controls are bound to the opposite sides of the same joystick axis.
+controls are bound to the opposite sides of the same axis.
*/
-class SmoothControl: public Control
+class MSPGUI_API SmoothControl: public Control
{
public:
sigc::signal<void, float> signal_motion;
private:
- float value;
- SmoothControl *paired_ctrl;
+ float value = 0.0f;
+ SmoothControl *paired_ctrl = nullptr;
+ float dead_zone = 0.1f;
+ float threshold = 0.9f;
public:
- SmoothControl();
+ SmoothControl() = default;
SmoothControl(const ControlSource &);
SmoothControl(Device &, ControlSrcType, unsigned);
- SmoothControl &operator=(const SmoothControl &);
- virtual ~SmoothControl();
+ ~SmoothControl();
+
+ /// Sets the dead zone value. Any value below this will be treated as 0.
+ void set_dead_zone(float);
+
+ /** Sets the max-out threshold. Any value above this will be treated as 1.
+ A negative value can be used to disable the threshold entirely. */
+ void set_threshold(float);
+
+ /// Sets dead zone and threshold in a single function call.
+ void set_range(float, float);
void pair(SmoothControl *ctrl);
float get_value() const { return value; }
private:
- virtual void on_press();
- virtual void on_release();
- virtual void on_motion(float, float);
+ void on_press() override;
+ void on_release() override;
+ void on_motion(float, float) override;
};
} // namespace Input