32 using ArpNonSoundInteger::ArpNonSoundInteger;
34 this->setValue(computeCurrentValueForUnsignedMenuItem(soundEditor.currentArpSettings->rhythm));
36 void writeCurrentValue()
override {
37 int32_t value = computeFinalValueForUnsignedMenuItem(this->getValue());
38 soundEditor.currentArpSettings->rhythm = value;
41 void drawValue()
override { display->setScrollingText(arpRhythmPatternNames[this->getValue()]); }
43 void drawInteger(int32_t textWidth, int32_t textHeight, int32_t yPixel)
override {
46 canvas.
drawStringCentred(arpRhythmPatternNames[this->getValue()], yPixel + OLED_MAIN_TOPMOST_PIXEL, textWidth,
50 void renderInHorizontalMenu(int32_t startX, int32_t width, int32_t startY, int32_t height)
override {
51 oled_canvas::Canvas& image = OLED::main;
53 const auto value = this->getValue();
54 const auto pattern = std::string_view(arpRhythmPatternNames[value]);
56 return image.drawStringCentered(pattern.data(), startX, startY + 3, kTextSpacingX, kTextSpacingY, width);
59 constexpr int32_t paddingBetween = 2;
60 const int32_t rhythmWidth = pattern.size() * kTextSpacingX + pattern.size() * paddingBetween;
62 int32_t x = startX + (width - rhythmWidth) / 2 + 1;
63 for (
const char character : pattern) {
64 image.drawChar(character ==
'0' ?
'X' : character, x, startY + 3, kTextSpacingX, kTextSpacingY);
65 x += kTextSpacingX + paddingBetween;
void drawStringCentred(char const *string, int32_t pixelY, int32_t textWidth, int32_t textHeight, int32_t centrePos=OLED_MAIN_WIDTH_PIXELS/2)
Definition canvas.cpp:246