diff --git a/libs/surfaces/push2/buttons.cc b/libs/surfaces/push2/buttons.cc index 44cdcac93e..9db1808cd8 100644 --- a/libs/surfaces/push2/buttons.cc +++ b/libs/surfaces/push2/buttons.cc @@ -38,10 +38,12 @@ Push2::build_maps () boost::shared_ptr pad; + _xy_pad_map.assign (64, boost::shared_ptr()); + #define MAKE_PAD(x,y,nn) \ pad.reset (new Pad ((x), (y), (nn))); \ _nn_pad_map.insert (std::make_pair (pad->extra(), pad)); \ - _xy_pad_map.insert (std::make_pair (y * 8 + x, pad)); + _xy_pad_map[y * 8 + x] = pad; MAKE_PAD (0, 0, 92); MAKE_PAD (0, 1, 93); diff --git a/libs/surfaces/push2/push2.cc b/libs/surfaces/push2/push2.cc index 68237f8982..1f9de05c77 100644 --- a/libs/surfaces/push2/push2.cc +++ b/libs/surfaces/push2/push2.cc @@ -1906,7 +1906,9 @@ Push2::set_pressure_mode (PressureMode pm) boost::shared_ptr Push2::pad_by_xy (int x, int y) { - Push2::PadMap::iterator p = _xy_pad_map.find ((x * 8) +y); - assert (p != _xy_pad_map.end()); - return p->second; + vector >::size_type index = (x * 8) + y; + if (index >= _xy_pad_map.size()) { + return boost::shared_ptr(); + } + return _xy_pad_map[index]; } diff --git a/libs/surfaces/push2/push2.h b/libs/surfaces/push2/push2.h index 89c7f005ca..f2467e909d 100644 --- a/libs/surfaces/push2/push2.h +++ b/libs/surfaces/push2/push2.h @@ -455,7 +455,6 @@ class Push2 : public ARDOUR::ControlProtocol typedef std::map > PadMap; PadMap const & nn_pad_map() const { return _nn_pad_map; } - PadMap const & xy_pad_map() const { return _xy_pad_map; } boost::shared_ptr pad_by_xy (int x, int y); @@ -499,9 +498,9 @@ class Push2 : public ARDOUR::ControlProtocol */ PadMap _nn_pad_map; - /* map of Pads by x,y duple (computed as (x*8) + y */ + /* array of Pads by x,y duple (indexed as (x*8) + y */ - PadMap _xy_pad_map; + std::vector > _xy_pad_map; /* map of Pads by note number they generate (their "filtered" value) */