#pragma once #include "Midi.h" #include class LaunchpadColor { public: unsigned char red, green; LaunchpadColor(); LaunchpadColor(unsigned char r, unsigned char g); bool operator==(const LaunchpadColor& color) const; bool operator!=(const LaunchpadColor& color) const; }; class Launchpad { public: typedef void (*KeyEventCallback)(unsigned char x, unsigned char y, void* data); static const unsigned char width = 9; static const unsigned char height = 9; private: LaunchpadColor colors[width][height]; bool colorSet[width][height]; protected: MidiIn midiin; MidiOut midiout; public: KeyEventCallback keyPressedCallback; KeyEventCallback keyReleasedCallback; void* keyEventCallbackData; Launchpad(); bool issetColor(unsigned char x, unsigned char y) const; const LaunchpadColor& getColor(unsigned char x, unsigned char y) const; void setColor(unsigned char x, unsigned char y, const LaunchpadColor& color); void setColorAll(const LaunchpadColor& color); protected: void keyPressed(unsigned char x, unsigned char y); void keyReleased(unsigned char x, unsigned char y); private: static void midiMessageCallback(double timeStamp, MidiMessage &message, void *launchpad); }; class LaunchpadScreen { LaunchpadColor colors[Launchpad::width][Launchpad::height]; Launchpad* launchpad; bool active; public: LaunchpadScreen(); virtual void enable(); virtual void disable(); bool enabled() const; void setLaunchpad(Launchpad& launchpad); protected: virtual void keyPressed(unsigned char x, unsigned char y); virtual void keyReleased(unsigned char x, unsigned char y); void setColor(unsigned char x, unsigned char y, const LaunchpadColor& color); void setColorAll(const LaunchpadColor& color); void sync(); private: static void keyPressedCallback(unsigned char x, unsigned char y, void* screen); static void keyReleasedCallback(unsigned char x, unsigned char y, void* screen); };