X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finput%2Fcontrol.h;h=177776d1a4aac86dc413a5364a7e0cdd4900113c;hb=a6eecc5117d91534aaf13e93baf64855f4b963c0;hp=450b057ce30496b27f20ec251d3310163c45ae72;hpb=754d00736b05c0f07f2fe34889527f8e3013dd37;p=libs%2Fgui.git diff --git a/source/input/control.h b/source/input/control.h index 450b057..177776d 100644 --- a/source/input/control.h +++ b/source/input/control.h @@ -4,6 +4,7 @@ #include #include #include +#include namespace Msp { namespace Input { @@ -13,7 +14,7 @@ class Device; enum ControlSrcType { - NONE, + NO_SOURCE, BUTTON, AXIS_POS, AXIS_NEG @@ -23,13 +24,13 @@ enum ControlSrcType Specifies the source of a control. This provides a way for setting sources for different types of controls in a uniform way. */ -struct ControlSource +struct MSPGUI_API ControlSource { - Device *dev; - ControlSrcType type; - unsigned index; + Device *dev = nullptr; + ControlSrcType type = NO_SOURCE; + unsigned index = 0; - ControlSource(); + ControlSource() = default; ControlSource(Device &, ControlSrcType, unsigned); std::string str() const; }; @@ -48,18 +49,20 @@ active for any events to be processed. This can be used to implement shifted controls (when used on a BinaryControl) or click-and-drag functionality (when used on a SmoothControl). */ -class Control: public sigc::trackable +class MSPGUI_API Control: public sigc::trackable { public: sigc::signal signal_capture_complete; protected: ControlSource src; - Device *capture_dev; - BinaryControl *activator; - float origin; + Device *capture_dev = nullptr; + BinaryControl *activator = nullptr; + float origin = 0.0f; + bool rising_edge = false; + bool falling_edge = false; - Control(); + Control() = default; Control(const ControlSource &); Control(Device &, ControlSrcType, unsigned); public: @@ -72,6 +75,9 @@ public: const ControlSource &get_source() const { return src; } void set_activator(BinaryControl *); BinaryControl *get_activator() const { return activator; } + bool has_rising_edge() const { return rising_edge; } + bool has_falling_edge() const { return falling_edge; } + void reset_edges(); protected: virtual void on_press() = 0; virtual void on_release() = 0;