24 using UnpatchedParam::UnpatchedParam;
26 float normalize(int32_t value)
override {
27 const int32_t clamped = std::clamp<int32_t>(value, 0, max_value_in_horizontal_menu);
28 return clamped /
static_cast<float>(max_value_in_horizontal_menu);
31 void renderInHorizontalMenu(
const SlotPosition& slot)
override {
34 if (getValue() > max_value_in_horizontal_menu) {
37 constexpr uint8_t excl_mark_width = 3;
38 constexpr uint8_t excl_mark_height = 11;
39 const uint8_t center_x = slot.start_x + slot.width / 2;
40 const uint8_t excl_mark_start_y = slot.start_y + kHorizontalMenuSlotYOffset - 1;
41 const uint8_t excl_mark_end_y = excl_mark_start_y + excl_mark_height - 1;
42 const uint8_t excl_mark_start_x = center_x - 1;
45 for (uint8_t x = center_x - 2; x <= center_x + 2; x++) {
46 for (uint8_t y = excl_mark_start_y - 1; y <= excl_mark_end_y + 1; y++) {
47 image.drawPixel(x, y);
51 image.invertArea(excl_mark_start_x, excl_mark_width, excl_mark_start_y, excl_mark_start_y + 6);
52 image.invertArea(excl_mark_start_x, excl_mark_width, excl_mark_start_y + 8, excl_mark_start_y + 10);
56 void getColumnLabel(
StringBuf& label)
override { label.append(l10n::get(l10n::String::STRING_FOR_AMOUNT_SHORT)); }
59 constexpr static int32_t max_value_in_horizontal_menu = 24;