Skip to content

Commit

Permalink
Fix multi range menu text highlighting (#1526)
Browse files Browse the repository at this point in the history
Fixed highlighting around left / right range values in multi range menu

Fixed spelling of word highlight in a few areas
  • Loading branch information
seangoodvibes authored and m-m-adams committed Mar 21, 2024
1 parent 7fcff76 commit e5667a1
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 25 deletions.
15 changes: 8 additions & 7 deletions src/deluge/gui/menu_item/multi_range.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -450,22 +450,23 @@ void MultiRange::drawPixelsForOled() {
drawItemsForOled(itemNames, selectedOption);

if (soundEditor.editingRangeEdge != RangeEdit::OFF) {
int32_t hilightStartX = 0;
int32_t hilightWidth = 0;
int32_t highlightStartX = 0;
int32_t highlightWidth = 0;

if (soundEditor.editingRangeEdge == RangeEdit::LEFT) {
hilightStartX = kTextSpacingX;
hilightWidth = kTextSpacingX * 6;
highlightStartX = kTextSpacingX;
highlightWidth = kTextSpacingX * 6;
}
else if (soundEditor.editingRangeEdge == RangeEdit::RIGHT) {
hilightStartX = kTextSpacingX * 10;
hilightWidth = OLED_MAIN_WIDTH_PIXELS - hilightStartX;
highlightStartX = kTextSpacingX * 10;
highlightWidth = OLED_MAIN_WIDTH_PIXELS - highlightStartX;
}

int32_t baseY = (OLED_MAIN_HEIGHT_PIXELS == 64) ? 15 : 14;
baseY += OLED_MAIN_TOPMOST_PIXEL;
baseY += (this->getValue() - soundEditor.menuCurrentScroll) * kTextSpacingY;
deluge::hid::display::OLED::invertArea(hilightStartX, hilightWidth, baseY, baseY + kTextSpacingY,
// -1 adjustment to invert the area 1px around the digits being rendered
deluge::hid::display::OLED::invertArea(highlightStartX, highlightWidth, baseY, baseY + kTextSpacingY - 1,
deluge::hid::display::OLED::oledMainImage);
}
}
Expand Down
16 changes: 8 additions & 8 deletions src/deluge/gui/menu_item/range.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,22 +189,22 @@ void Range::drawPixelsForOled() {
deluge::hid::display::OLED::oledMainImage[0], OLED_MAIN_WIDTH_PIXELS,
digitWidth, digitHeight);

int32_t hilightStartX, hilightWidth;
int32_t highlightStartX, highlightWidth;

if (soundEditor.editingRangeEdge == RangeEdit::LEFT) {
hilightStartX = stringStartX;
hilightWidth = digitWidth * leftLength;
doHilightJustOneEdge:
highlightStartX = stringStartX;
highlightWidth = digitWidth * leftLength;
doHighlightJustOneEdge:
// Invert the area 1px around the digits being rendered
baseY += OLED_MAIN_TOPMOST_PIXEL - 1;
deluge::hid::display::OLED::invertArea(hilightStartX, hilightWidth, baseY, baseY + digitHeight + 1,
deluge::hid::display::OLED::invertArea(highlightStartX, highlightWidth, baseY, baseY + digitHeight + 1,
deluge::hid::display::OLED::oledMainImage);
}
else if (soundEditor.editingRangeEdge == RangeEdit::RIGHT) {
int32_t stringEndX = (OLED_MAIN_WIDTH_PIXELS + stringWidth) >> 1;
hilightWidth = digitWidth * rightLength;
hilightStartX = stringEndX - hilightWidth;
goto doHilightJustOneEdge;
highlightWidth = digitWidth * rightLength;
highlightStartX = stringEndX - highlightWidth;
goto doHighlightJustOneEdge;
}
}
} // namespace deluge::gui::menu_item
11 changes: 6 additions & 5 deletions src/deluge/gui/ui/qwerty_ui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,10 +126,10 @@ void QwertyUI::drawTextForOLEDEditing(int32_t xPixel, int32_t xPixelMax, int32_t
OLED_MAIN_WIDTH_PIXELS, kTextSpacingX, kTextSpacingY, 0,
xPixel + maxNumChars * kTextSpacingX);

int32_t hilightStartX = xPixel + kTextSpacingX * (enteredTextEditPos - scrollPosHorizontal);
// int32_t hilightEndX = xPixel + TEXT_SIZE_X * (displayStringLength - scrollPosHorizontal);
// if (hilightEndX > OLED_MAIN_WIDTH_PIXELS || !enteredTextEditPos) hilightEndX = OLED_MAIN_WIDTH_PIXELS;
int32_t hilightWidth = xPixelMax - hilightStartX;
int32_t highlightStartX = xPixel + kTextSpacingX * (enteredTextEditPos - scrollPosHorizontal);
// int32_t highlightEndX = xPixel + TEXT_SIZE_X * (displayStringLength - scrollPosHorizontal);
// if (highlightEndX > OLED_MAIN_WIDTH_PIXELS || !enteredTextEditPos) highlightEndX = OLED_MAIN_WIDTH_PIXELS;
int32_t highlightWidth = xPixelMax - highlightStartX;

if (atVeryEnd) {
if (getCurrentUI() == this) {
Expand All @@ -139,7 +139,8 @@ void QwertyUI::drawTextForOLEDEditing(int32_t xPixel, int32_t xPixelMax, int32_t
}
}
else {
deluge::hid::display::OLED::invertArea(hilightStartX, hilightWidth, yPixel, yPixel + kTextSpacingY - 1, image);
deluge::hid::display::OLED::invertArea(highlightStartX, highlightWidth, yPixel, yPixel + kTextSpacingY - 1,
image);
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/deluge/hid/display/oled.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1015,15 +1015,15 @@ struct SideScroller {
int32_t stringLengthPixels;
int32_t boxLengthPixels;
bool finished;
bool doHilight;
bool doHighlight;
};

#define NUM_SIDE_SCROLLERS 2

SideScroller sideScrollers[NUM_SIDE_SCROLLERS];

void OLED::setupSideScroller(int32_t index, std::string_view text, int32_t startX, int32_t endX, int32_t startY,
int32_t endY, int32_t textSpacingX, int32_t textSizeY, bool doHilight) {
int32_t endY, int32_t textSpacingX, int32_t textSizeY, bool doHighlight) {

SideScroller* scroller = &sideScrollers[index];
scroller->textLength = text.size();
Expand All @@ -1042,7 +1042,7 @@ void OLED::setupSideScroller(int32_t index, std::string_view text, int32_t start
scroller->textSpacingX = textSpacingX;
scroller->textSizeY = textSizeY;
scroller->finished = false;
scroller->doHilight = doHilight;
scroller->doHighlight = doHighlight;

sideScrollerDirection = 1;
uiTimerManager.setTimer(TimerName::OLED_SCROLLING_AND_BLINKING, 400);
Expand Down Expand Up @@ -1107,7 +1107,7 @@ void OLED::scrollingAndBlinkingTimerEvent() {
clearAreaExact(scroller->startX, scroller->startY, scroller->endX - 1, scroller->endY, oledMainImage);
drawString(scroller->text, scroller->startX, scroller->startY, oledMainImage[0], OLED_MAIN_WIDTH_PIXELS,
scroller->textSpacingX, scroller->textSizeY, scroller->pos, scroller->endX);
if (scroller->doHilight) {
if (scroller->doHighlight) {
invertArea(scroller->startX, scroller->endX - scroller->startX, scroller->startY, scroller->endY,
&OLED::oledMainImage[0]);
}
Expand Down
2 changes: 1 addition & 1 deletion src/deluge/hid/display/oled.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class OLED : public Display {

static void stopScrollingAnimation();
static void setupSideScroller(int32_t index, std::string_view text, int32_t startX, int32_t endX, int32_t startY,
int32_t endY, int32_t textSpacingX, int32_t textSizeY, bool doHilight);
int32_t endY, int32_t textSpacingX, int32_t textSizeY, bool doHighlight);
static void drawPermanentPopupLookingText(char const* text);

void consoleTimerEvent();
Expand Down

0 comments on commit e5667a1

Please sign in to comment.