]> git.tdb.fi Git - libs/gui.git/blobdiff - source/input/control.h
Add decorations for things which should be exported from the library
[libs/gui.git] / source / input / control.h
index 450b057ce30496b27f20ec251d3310163c45ae72..177776d1a4aac86dc413a5364a7e0cdd4900113c 100644 (file)
@@ -4,6 +4,7 @@
 #include <string>
 #include <sigc++/signal.h>
 #include <sigc++/trackable.h>
+#include <msp/graphics/mspgui_api.h>
 
 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<void> 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;