From a30569eda256dd29dc4ec76a82a92853ee4b931b Mon Sep 17 00:00:00 2001 From: jonnieZG Date: Mon, 5 Mar 2018 13:06:43 +0100 Subject: [PATCH] Fast menu scroll (#218) * Enabled DOUBLE line for Croatian * Menu desciption scroll sped * Better description smooth-scrolling routine. * Tearing fixed. The screen will update only when required. --- .../TS100/.settings/language.settings.xml | 52 +++++++++---------- workspace/TS100/src/main.cpp | 20 ++++--- 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/workspace/TS100/.settings/language.settings.xml b/workspace/TS100/.settings/language.settings.xml index ee99e4da..81ca6911 100644 --- a/workspace/TS100/.settings/language.settings.xml +++ b/workspace/TS100/.settings/language.settings.xml @@ -1,27 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspace/TS100/src/main.cpp b/workspace/TS100/src/main.cpp index 0c39fcc1..be2c83bf 100644 --- a/workspace/TS100/src/main.cpp +++ b/workspace/TS100/src/main.cpp @@ -21,6 +21,7 @@ uint8_t PCBVersion = 0; uint16_t currentlyActiveTemperatureTarget = 0; uint32_t lastMovementTime = 0; uint32_t lastButtonTime = 0; +int16_t lastOffset = 0; // FreeRTOS variables osThreadId GUITaskHandle; @@ -334,12 +335,13 @@ static void gui_settingsMenu() { while ((settingsMenu[currentScreen].incrementHandler.func != NULL) && earlyExit == false) { lcd.setFont(0); - lcd.clearScreen(); lcd.setCursor(0, 0); if (xTaskGetTickCount() - lastButtonTime < 400) { - settingsMenu[currentScreen].draw.func(); + lcd.clearScreen(); + settingsMenu[currentScreen].draw.func(); + lastOffset = 0; } else { // Draw description // draw string starting from descriptionOffset @@ -349,10 +351,16 @@ static void gui_settingsMenu() { descriptionStart = HAL_GetTick(); int16_t descriptionOffset = ((((HAL_GetTick() - descriptionStart) - / 30) % (maxOffset * 3))) * 4; - //^ Rolling offset based on time - lcd.setCursor(((7 * 12) - descriptionOffset), 0); - lcd.print(settingsMenu[currentScreen].description); + / 20) % (maxOffset * 2))) * 6; + + if (lastOffset == 0 || lastOffset!=descriptionOffset) { + lcd.clearScreen(); + + //^ Rolling offset based on time + lcd.setCursor(((7 * 12) - descriptionOffset), 0); + lcd.print(settingsMenu[currentScreen].description); + lastOffset = descriptionOffset; + } }