-#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 {
the pair will cause negative motion on the other. This works best when the
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 dead_zone;
- float threshold;
+ 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);
- 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.
+ /** 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