Explorar o código

Scrolling text

Just Call Me Koko %!s(int64=6) %!d(string=hai) anos
pai
achega
22dc0ff396
Modificáronse 3 ficheiros con 60 adicións e 4 borrados
  1. 48 1
      esp32_marauder/Display.cpp
  2. 5 1
      esp32_marauder/Display.h
  3. 7 2
      esp32_marauder/MenuFunctions.cpp

+ 48 - 1
esp32_marauder/Display.cpp

@@ -474,8 +474,55 @@ void Display::listDir(fs::FS &fs, const char * dirname, uint8_t levels) {
 }
 #endif
 
-void Display::main()
+
+void Display::updateBanner(String msg)
 {
+  this->img.deleteSprite();
+  
+  this->img.setColorDepth(8);
+
+  this->img.createSprite(SCREEN_WIDTH, TEXT_HEIGHT);
+
+  this->buildBanner(msg, current_banner_pos);
+
+  this->img.pushSprite(0, 0);
+
+  current_banner_pos--;
+
+  if (current_banner_pos <= 0)
+    current_banner_pos = SCREEN_WIDTH;
+}
+
+
+void Display::buildBanner(String msg, int xpos)
+{
+  int h = TEXT_HEIGHT;
+
+  // We could just use fillSprite(color) but lets be a bit more creative...
+
+  // Fill with rainbow stripes
+  //while (h--) img.drawFastHLine(0, h, SCREEN_WIDTH, 255);
+
+  // Draw some graphics, the text will apear to scroll over these
+  //img.fillRect  (SCREEN_WIDTH / 2 - 20, TEXT_HEIGHT / 2 - 10, 40, 20, TFT_YELLOW);
+  //img.fillCircle(SCREEN_WIDTH / 2, TEXT_HEIGHT / 2, 10, TFT_ORANGE);
+
+  // Now print text on top of the graphics
+  img.setTextSize(2);           // Font size scaling is x1
+  img.setTextFont(0);           // Font 4 selected
+  img.setTextColor(TFT_WHITE);  // Black text, no background colour
+  img.setTextWrap(false);       // Turn of wrap so we can print past end of sprite
+
+  // Need to print twice so text appears to wrap around at left and right edges
+  img.setCursor(xpos, 2);  // Print text at xpos
+  img.print(msg);
+
+  img.setCursor(xpos - SCREEN_WIDTH, 2); // Print text at xpos - sprite width
+  img.print(msg);
+}
+
+void Display::main()
+{  
   return;
 }
 // End SPIFFS_functions

+ 5 - 1
esp32_marauder/Display.h

@@ -47,6 +47,7 @@ class Display
   public:
     Display();
     TFT_eSPI tft = TFT_eSPI();
+    TFT_eSprite img = TFT_eSprite(&tft);
     String version_number = "v0.2";
 
     bool printing = false;
@@ -56,6 +57,7 @@ class Display
 
     int TOP_FIXED_AREA_2 = 32;
     int print_delay_1, print_delay_2 = 10;
+    int current_banner_pos = SCREEN_WIDTH;
 
     //Menu* current_menu;
     
@@ -80,7 +82,8 @@ class Display
     // for a full width line, meanwhile the serial buffer may be filling... and overflowing
     // We can speed up scrolling of short text lines by just blanking the character we drew
     int blank[19]; // We keep all the strings pixel lengths to optimise the speed of the top line blanking
-    
+
+    void buildBanner(String msg, int xpos);
     void clearScreen();
     void displayBuffer(bool do_clear = false);
     void drawJpeg(const char *filename, int xpos, int ypos);
@@ -99,5 +102,6 @@ class Display
     void showCenterText(String text, int y);
     void touchToExit();
     void twoPartDisplay(String center_text);
+    void updateBanner(String msg);
 };
 #endif

+ 7 - 2
esp32_marauder/MenuFunctions.cpp

@@ -8,6 +8,11 @@ MenuFunctions::MenuFunctions()
 // Function to check menu input
 void MenuFunctions::main()
 {
+  if (wifi_scan_obj.currentScanMode == WIFI_SCAN_OFF)
+    display_obj.updateBanner(current_menu->name);
+
+  //this->displayCurrentMenu();
+  
   boolean pressed = false;
   // This is code from bodmer's keypad example
   uint16_t t_x = 0, t_y = 0; // To store the touch coordinates
@@ -256,7 +261,7 @@ void MenuFunctions::displayCurrentMenu()
   Serial.println("Displaying current menu...");
   display_obj.clearScreen();
   display_obj.tft.setTextColor(TFT_LIGHTGREY, TFT_DARKGREY);
-  display_obj.tft.fillRect(0,0,240,16, TFT_DARKGREY);
+  //display_obj.tft.fillRect(0,0,240,16, TFT_DARKGREY);
   //display_obj.tft.drawCentreString(" ESP32 Marauder ",120,0,2);
   //Serial.println("Getting size...");
   //char buf[&current_menu->parentMenu->name.length() + 1] = {};
@@ -264,7 +269,7 @@ void MenuFunctions::displayCurrentMenu()
   //current_menu->parentMenu->name.toCharArray(buf, current_menu->parentMenu->name.length() + 1);
   //String current_name = &current_menu->parentMenu->name;
   //Serial.println("gottem");
-  display_obj.tft.drawCentreString(current_menu->name,120,0,2);
+  //display_obj.tft.drawCentreString(current_menu->name,120,0,2);
   if (current_menu->list != NULL)
   {
     display_obj.tft.setFreeFont(MENU_FONT);