Ver código fonte

Merge pull request #247 from jquatier/ui-text-width

UI Text Width - minor improvement
ripplebiz 1 ano atrás
pai
commit
1f06d22bde

+ 1 - 1
examples/companion_radio/UITask.cpp

@@ -144,7 +144,7 @@ void UITask::renderCurrScreen() {
     // version info
     _display->setColor(DisplayDriver::LIGHT);
     _display->setTextSize(1);
-    int textWidth = strlen(_version_info) * 5; // Assuming each character is 5 pixels wide
+    uint16_t textWidth = _display->getTextWidth(_version_info);
     _display->setCursor((_display->width() - textWidth) / 2, 22);
     _display->print(_version_info);
   } else {  // home screen

+ 3 - 3
examples/simple_repeater/UITask.cpp

@@ -51,14 +51,14 @@ void UITask::renderCurrScreen() {
     // version info
     _display->setColor(DisplayDriver::LIGHT);
     _display->setTextSize(1);
-    int versionWidth = strlen(_version_info) * 6;
+    uint16_t versionWidth = _display->getTextWidth(_version_info);
     _display->setCursor((_display->width() - versionWidth) / 2, 22);
     _display->print(_version_info);
 
     // node type
     const char* node_type = "< Repeater >";
-    int nodeTypeWidth = strlen(node_type) * 6;
-    _display->setCursor((_display->width() - nodeTypeWidth) / 2, 35);
+    uint16_t typeWidth = _display->getTextWidth(node_type);
+    _display->setCursor((_display->width() - typeWidth) / 2, 35);
     _display->print(node_type);
   } else {  // home screen
     // node name

+ 4 - 4
examples/simple_room_server/UITask.cpp

@@ -51,14 +51,14 @@ void UITask::renderCurrScreen() {
     // version info
     _display->setColor(DisplayDriver::LIGHT);
     _display->setTextSize(1);
-    int versionWidth = strlen(_version_info) * 6;
+    uint16_t versionWidth = _display->getTextWidth(_version_info);
     _display->setCursor((_display->width() - versionWidth) / 2, 22);
     _display->print(_version_info);
 
     // node type
-    const char* node_type = "< Room Server >";
-    int nodeTypeWidth = strlen(node_type) * 6;
-    _display->setCursor((_display->width() - nodeTypeWidth) / 2, 35);
+    const char* node_type = "< Repeater >";
+    uint16_t typeWidth = _display->getTextWidth(node_type);
+    _display->setCursor((_display->width() - typeWidth) / 2, 35);
     _display->print(node_type);
   } else {  // home screen
     // node name

+ 1 - 0
src/helpers/ui/DisplayDriver.h

@@ -24,5 +24,6 @@ public:
   virtual void fillRect(int x, int y, int w, int h) = 0;
   virtual void drawRect(int x, int y, int w, int h) = 0;
   virtual void drawXbm(int x, int y, const uint8_t* bits, int w, int h) = 0;
+  virtual uint16_t getTextWidth(const char* str) = 0;
   virtual void endFrame() = 0;
 };

+ 7 - 0
src/helpers/ui/GxEPDDisplay.cpp

@@ -94,6 +94,13 @@ void GxEPDDisplay::drawXbm(int x, int y, const uint8_t* bits, int w, int h) {
   display.drawBitmap(x*1.5, (y*1.5) + 10, bits, w, h, GxEPD_BLACK);
 }
 
+uint16_t GxEPDDisplay::getTextWidth(const char* str) {
+  int16_t x1, y1;
+  uint16_t w, h;
+  display.getTextBounds(str, 0, 0, &x1, &y1, &w, &h);
+  return w;
+}
+
 void GxEPDDisplay::endFrame() {
   display.display(true);
 }

+ 1 - 0
src/helpers/ui/GxEPDDisplay.h

@@ -47,5 +47,6 @@ public:
   void fillRect(int x, int y, int w, int h) override;
   void drawRect(int x, int y, int w, int h) override;
   void drawXbm(int x, int y, const uint8_t* bits, int w, int h) override;
+  uint16_t getTextWidth(const char* str) override;
   void endFrame() override;
 };

+ 7 - 0
src/helpers/ui/SSD1306Display.cpp

@@ -62,6 +62,13 @@ void SSD1306Display::drawXbm(int x, int y, const uint8_t* bits, int w, int h) {
   display.drawBitmap(x, y, bits, w, h, SSD1306_WHITE);
 }
 
+uint16_t SSD1306Display::getTextWidth(const char* str) {
+  int16_t x1, y1;
+  uint16_t w, h;
+  display.getTextBounds(str, 0, 0, &x1, &y1, &w, &h);
+  return w;
+}
+
 void SSD1306Display::endFrame() {
   display.display();
 }

+ 1 - 0
src/helpers/ui/SSD1306Display.h

@@ -36,5 +36,6 @@ public:
   void fillRect(int x, int y, int w, int h) override;
   void drawRect(int x, int y, int w, int h) override;
   void drawXbm(int x, int y, const uint8_t* bits, int w, int h) override;
+  uint16_t getTextWidth(const char* str) override;
   void endFrame() override;
 };

+ 4 - 0
src/helpers/ui/ST7789Display.cpp

@@ -107,6 +107,10 @@ void ST7789Display::drawXbm(int x, int y, const uint8_t* bits, int w, int h) {
   display.drawBitmap(x+X_OFFSET, y, w, h, bits);
 }
 
+uint16_t ST7789Display::getTextWidth(const char* str) {
+  return display.getStringWidth(str);
+}
+
 void ST7789Display::endFrame() {
   display.display();
 }

+ 1 - 0
src/helpers/ui/ST7789Display.h

@@ -31,5 +31,6 @@ public:
   void fillRect(int x, int y, int w, int h) override;
   void drawRect(int x, int y, int w, int h) override;
   void drawXbm(int x, int y, const uint8_t* bits, int w, int h) override;
+  uint16_t getTextWidth(const char* str) override;
   void endFrame() override;
 };