28class KeyboardLayoutInKey :
public ColumnControlsKeyboard {
30 KeyboardLayoutInKey() {}
31 ~KeyboardLayoutInKey()
override {}
36 bool encoderPressed =
false)
override;
39 void renderPads(
RGB image[][kDisplayWidth + kSideBarWidth])
override;
41 l10n::String name()
override {
return l10n::String::STRING_FOR_KEYBOARD_LAYOUT_IN_KEY; }
43 bool supportsKit()
override {
return false; }
44 RequiredScaleMode requiredScaleMode()
override {
return RequiredScaleMode::Enabled; }
47 void offsetPads(int32_t offset,
bool shiftEnabled);
48 inline uint16_t noteFromCoords(int32_t x, int32_t y) {
return noteFromPadIndex(padIndexFromCoords(x, y)); }
50 inline uint16_t padIndexFromCoords(int32_t x, int32_t y) {
51 return getState().inKey.scrollOffset + x + y * getState().inKey.rowInterval;
54 inline uint16_t noteFromPadIndex(uint16_t padIndex) {
55 NoteSet& scaleNotes = getScaleNotes();
56 uint8_t scaleNoteCount = getScaleNoteCount();
58 uint8_t octave = padIndex / scaleNoteCount;
59 uint8_t octaveNoteIndex = padIndex % scaleNoteCount;
60 return octave * kOctaveSize +
getRootNote() + scaleNotes[octaveNoteIndex];
63 inline uint16_t padIndexFromNote(uint16_t note) {
64 NoteSet& scaleNotes = getScaleNotes();
65 uint8_t scaleNoteCount = getScaleNoteCount();
68 uint8_t padScaleOffset = 0;
69 for (uint8_t idx = 0; idx < scaleNoteCount; ++idx) {
70 if (scaleNotes[idx] == (((note + kOctaveSize) - rootNote) % kOctaveSize)) {
75 int32_t octave = (((note + kOctaveSize) - rootNote) / kOctaveSize) - 1;
77 return std::max<int32_t>(octave * scaleNoteCount + padScaleOffset, std::numeric_limits<uint16_t>::min());
95 RGB noteColours[kDisplayHeight * kMaxInKeyRowInterval + kDisplayWidth];
void handleHorizontalEncoder(int32_t offset, bool shiftEnabled, PressedPad presses[kMaxNumKeyboardPadPresses], bool encoderPressed=false) override
Will be called with offset 0 to recalculate bounds on clip changes.
Definition in_key.cpp:47