X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fsurface.h;h=05983cbfa22175b03f219e3669553d9e32261948;hb=21fd76ef9a0c1856e5f91c394214e244265a0f86;hp=8bff3c45388714a2b829cdfb8701147b17413dc6;hpb=207eaa4298c2424cd70a9c97e83c16fbf60ffaee;p=ardour.git diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h index 8bff3c4538..05983cbfa2 100644 --- a/libs/surfaces/mackie/surface.h +++ b/libs/surfaces/mackie/surface.h @@ -3,11 +3,14 @@ #include "controls.h" #include "types.h" +#include namespace Mackie { class MackieButtonHandler; +class SurfacePort; +class MackieMidiBuilder; /** This represents an entire control surface, made up of Groups, @@ -52,11 +55,13 @@ public: These are alternative addressing schemes They use maps because the indices aren't always 0-based. + + Indexed by raw_id not by id. @see Control for the distinction. */ - std::map faders; - std::map pots; - std::map buttons; - std::map leds; + std::map faders; + std::map pots; + std::map buttons; + std::map leds; /// no strip controls in here because they usually /// have the same names. @@ -78,7 +83,38 @@ public: /// map button ids to calls to press_ and release_ in mbh virtual void handle_button( MackieButtonHandler & mbh, ButtonState bs, Button & button ) = 0; + +public: + /// display an indicator of the first switched-in Route. Do nothing by default. + virtual void display_bank_start( SurfacePort &, MackieMidiBuilder &, uint32_t /*current_bank*/ ) {}; + + /// called from MackieControlPRotocol::zero_all to turn things off + virtual void zero_all( SurfacePort &, MackieMidiBuilder & ) {}; + + /// turn off leds around the jog wheel. This is for surfaces that use a pot + /// pretending to be a jog wheel. + virtual void blank_jog_ring( SurfacePort &, MackieMidiBuilder & ) {}; + + virtual bool has_timecode_display() const = 0; + virtual void display_timecode( SurfacePort &, MackieMidiBuilder &, const std::string & /*timecode*/, const std::string & /*timecode_last*/) {}; +public: + /** + This is used to calculate the clicks per second that define + a transport speed of 1.0 for the jog wheel. 100.0 is 10 clicks + per second, 50.5 is 5 clicks per second. + */ + virtual float scrub_scaling_factor() = 0; + + /** + The scaling factor function for speed increase and decrease. At + low transport speeds this should return a small value, for high transport + speeds, this should return an exponentially larger value. This provides + high definition control at low speeds and quick speed changes to/from + higher speeds. + */ + virtual float scaled_delta( const ControlState & state, float current_speed ) = 0; + protected: virtual void init_controls() = 0; virtual void init_strips( uint32_t max_strips, uint32_t unit_strips );