add shift modifier support
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 17 Jun 2016 04:32:06 +0000 (00:32 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 27 Sep 2016 19:59:29 +0000 (14:59 -0500)
libs/surfaces/push2/buttons.cc
libs/surfaces/push2/push2.cc
libs/surfaces/push2/push2.h

index 016cd78a171a3b78d4a103ae2a239290afe0bef8..b2312c40527943a2d9a5eec7d2b7e4280cb19c49 100644 (file)
@@ -93,3 +93,16 @@ Push2::button_fixed_length ()
        id_button_map[FixedLength]->set_state (LED::NoTransition);
        write (id_button_map[FixedLength]->state_msg());
 }
+
+void
+Push2::button_shift_press ()
+{
+       modifier_state = ModifierState (modifier_state | ModShift);
+}
+
+void
+Push2::button_shift_release ()
+{
+       modifier_state = ModifierState (modifier_state & ~ModShift);
+}
+
index e83f393ff541e7569b33e9c8dcf1316f0268f71c..34a0efcbd00fb4405cff2ddcc374a9eb5c0367d1 100644 (file)
@@ -60,6 +60,7 @@ Push2::Push2 (ARDOUR::Session& s)
        , handle (0)
        , device_buffer (0)
        , frame_buffer (Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, cols, rows))
+       , modifier_state (None)
 {
        context = Cairo::Context::create (frame_buffer);
        tc_clock_layout = Pango::Layout::create (context);
@@ -679,6 +680,10 @@ Push2::build_maps ()
        button = new WhiteButton ((i), (cc), (p)); \
        cc_button_map.insert (make_pair (button->controller_number(), button)); \
        id_button_map.insert (make_pair (button->id, button))
+#define MAKE_WHITE_BUTTON_PRESS_RELEASE(i,cc,p,r)                                \
+       button = new WhiteButton ((i), (cc), (p), (r)); \
+       cc_button_map.insert (make_pair (button->controller_number(), button)); \
+       id_button_map.insert (make_pair (button->id, button))
 
        MAKE_WHITE_BUTTON (TapTempo, 3);
        MAKE_WHITE_BUTTON_PRESS (Metronome, 9, &Push2::button_metronome);
@@ -712,7 +717,7 @@ Push2::build_maps ()
        MAKE_WHITE_BUTTON (PageRight, 63);
        MAKE_WHITE_BUTTON (OctaveDown, 54);
        MAKE_WHITE_BUTTON (PageLeft, 62);
-       MAKE_WHITE_BUTTON (Shift, 49);
+       MAKE_WHITE_BUTTON_PRESS_RELEASE (Shift, 49, &Push2::button_shift_press, &Push2::button_shift_release);
        MAKE_WHITE_BUTTON (Select, 48);
 }
 
index 2ec73779d4b48dac46d94becc8cc303787d86e54..3eac5f865354e797979a9292a7d9e8e8acdbd773 100644 (file)
@@ -86,6 +86,13 @@ class Push2 : public ARDOUR::ControlProtocol
        sigc::connection vblank_connection;
        sigc::connection periodic_connection;
 
+       enum ModifierState {
+               None = 0,
+               ModShift = 0x1,
+       };
+
+       ModifierState modifier_state;
+
        static const int cols;
        static const int rows;
        static const int pixels_per_row;
@@ -337,6 +344,8 @@ class Push2 : public ARDOUR::ControlProtocol
        void button_solo ();
        void button_fixed_length ();
        void button_new ();
+       void button_shift_press ();
+       void button_shift_release ();
 
        /* widgets */