mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-14 14:52:32 +00:00
Compare commits
1 Commits
Thinknode-
...
TinyFontTe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
89a35e302d |
@@ -103,3 +103,44 @@
|
||||
#define FONT_HEIGHT_SMALL _fontHeight(FONT_SMALL)
|
||||
#define FONT_HEIGHT_MEDIUM _fontHeight(FONT_MEDIUM)
|
||||
#define FONT_HEIGHT_LARGE _fontHeight(FONT_LARGE)
|
||||
|
||||
// ============================================================================
|
||||
// FINAL OVERRIDE: Force TomThumb font
|
||||
// ============================================================================
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
|
||||
#include "graphics/fonts/OLEDDisplayFontsTomThumb.h"
|
||||
|
||||
// -----------------------------
|
||||
// Replace all Meshtastic fonts
|
||||
// -----------------------------
|
||||
#undef FONT_SMALL_LOCAL
|
||||
#undef FONT_MEDIUM_LOCAL
|
||||
#undef FONT_LARGE_LOCAL
|
||||
|
||||
#undef FONT_SMALL
|
||||
#undef FONT_MEDIUM
|
||||
#undef FONT_LARGE
|
||||
|
||||
#define FONT_SMALL_LOCAL TomThumb4x6
|
||||
#define FONT_MEDIUM_LOCAL TomThumb4x6
|
||||
#define FONT_LARGE_LOCAL TomThumb4x6
|
||||
|
||||
#define FONT_SMALL TomThumb4x6
|
||||
#define FONT_MEDIUM TomThumb4x6
|
||||
#define FONT_LARGE TomThumb4x6
|
||||
|
||||
// -------------------------------------------------------
|
||||
// Override the *line height used for spacing*, NOT glyphs
|
||||
// TomThumb is 6 px tall → we give it 11 px layout height
|
||||
// -------------------------------------------------------
|
||||
#undef FONT_HEIGHT_SMALL
|
||||
#undef FONT_HEIGHT_MEDIUM
|
||||
#undef FONT_HEIGHT_LARGE
|
||||
|
||||
#define FONT_HEIGHT_SMALL 6
|
||||
#define FONT_HEIGHT_MEDIUM 6
|
||||
#define FONT_HEIGHT_LARGE 6
|
||||
|
||||
#endif
|
||||
// ============================================================================
|
||||
@@ -380,6 +380,17 @@ const int *getTextPositions(OLEDDisplay *display)
|
||||
{
|
||||
static int textPositions[7]; // Static array that persists beyond function scope
|
||||
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
textPositions[0] = textZeroLine;
|
||||
textPositions[1] = textFirstLine_tiny;
|
||||
textPositions[2] = textSecondLine_tiny;
|
||||
textPositions[3] = textThirdLine_tiny;
|
||||
textPositions[4] = textFourthLine_tiny;
|
||||
textPositions[5] = textFifthLine_tiny;
|
||||
textPositions[6] = textSixthLine_tiny;
|
||||
return textPositions;
|
||||
#endif
|
||||
|
||||
if (isHighResolution) {
|
||||
textPositions[0] = textZeroLine;
|
||||
textPositions[1] = textFirstLine_medium;
|
||||
|
||||
@@ -35,6 +35,21 @@ namespace graphics
|
||||
#define textFifthLine_large (textFourthLine_large + (FONT_HEIGHT_SMALL + 5))
|
||||
#define textSixthLine_large (textFifthLine_large + (FONT_HEIGHT_SMALL + 5))
|
||||
|
||||
// Tiny Font Spacing (TomThumb)
|
||||
// Only active when DISPLAY_FORCE_TOMTHUMB_FONT is defined
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
|
||||
#define TINY_REDUCE 5
|
||||
|
||||
#define textFirstLine_tiny (FONT_HEIGHT_SMALL + 1)
|
||||
#define textSecondLine_tiny (textFirstLine_tiny + (FONT_HEIGHT_SMALL - TINY_REDUCE + 5))
|
||||
#define textThirdLine_tiny (textSecondLine_tiny + (FONT_HEIGHT_SMALL - TINY_REDUCE + 5))
|
||||
#define textFourthLine_tiny (textThirdLine_tiny + (FONT_HEIGHT_SMALL - TINY_REDUCE + 5))
|
||||
#define textFifthLine_tiny (textFourthLine_tiny + (FONT_HEIGHT_SMALL - TINY_REDUCE + 5))
|
||||
#define textSixthLine_tiny (textFifthLine_tiny + (FONT_HEIGHT_SMALL - TINY_REDUCE + 5))
|
||||
|
||||
#endif
|
||||
|
||||
// Quick screen access
|
||||
#define SCREEN_WIDTH display->getWidth()
|
||||
#define SCREEN_HEIGHT display->getHeight()
|
||||
|
||||
@@ -24,7 +24,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "configuration.h"
|
||||
#if HAS_SCREEN
|
||||
#include "MessageRenderer.h"
|
||||
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
#define MESSAGE_TINY_Y_OFFSET -3
|
||||
#else
|
||||
#define MESSAGE_TINY_Y_OFFSET 0
|
||||
#endif
|
||||
// Core includes
|
||||
#include "NodeDB.h"
|
||||
#include "configuration.h"
|
||||
|
||||
@@ -424,7 +424,11 @@ void drawNodeListScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t
|
||||
EntryRenderer renderer, NodeExtrasRenderer extras, float heading, double lat, double lon)
|
||||
{
|
||||
const int COMMON_HEADER_HEIGHT = FONT_HEIGHT_SMALL - 1;
|
||||
const int rowYOffset = FONT_HEIGHT_SMALL - 3;
|
||||
int rowYOffset = FONT_HEIGHT_SMALL - 3;
|
||||
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
rowYOffset += 4;
|
||||
#endif
|
||||
bool locationScreen = false;
|
||||
|
||||
if (strcmp(title, "Bearings") == 0)
|
||||
@@ -443,6 +447,9 @@ void drawNodeListScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t
|
||||
|
||||
// Space below header
|
||||
y += COMMON_HEADER_HEIGHT;
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
y += 2; // Push entire list down by 2 pixels for TomThumb
|
||||
#endif
|
||||
|
||||
int totalEntries = nodeDB->getNumMeshNodes();
|
||||
int totalRowsAvailable = (display->getHeight() - y) / rowYOffset;
|
||||
|
||||
@@ -278,6 +278,9 @@ void NotificationRenderer::drawNodePicker(OLEDDisplay *display, OLEDDisplayUiSta
|
||||
uint16_t totalLines = lineCount + alertBannerOptions;
|
||||
uint16_t screenHeight = display->height();
|
||||
uint8_t effectiveLineHeight = FONT_HEIGHT_SMALL - 3;
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
effectiveLineHeight = FONT_HEIGHT_SMALL + 2;
|
||||
#endif
|
||||
uint8_t visibleTotalLines = std::min<uint8_t>(totalLines, (screenHeight - vPadding * 2) / effectiveLineHeight);
|
||||
uint8_t linesShown = lineCount;
|
||||
const char *linePointers[visibleTotalLines + 1] = {0}; // this is sort of a dynamic allocation
|
||||
@@ -408,6 +411,9 @@ void NotificationRenderer::drawAlertBannerOverlay(OLEDDisplay *display, OLEDDisp
|
||||
|
||||
uint16_t screenHeight = display->height();
|
||||
uint8_t effectiveLineHeight = FONT_HEIGHT_SMALL - 3;
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
effectiveLineHeight = FONT_HEIGHT_SMALL + 2;
|
||||
#endif
|
||||
uint8_t visibleTotalLines = std::min<uint8_t>(totalLines, (screenHeight - vPadding * 2) / effectiveLineHeight);
|
||||
uint8_t linesShown = lineCount;
|
||||
const char *linePointers[visibleTotalLines + 1] = {0}; // this is sort of a dynamic allocation
|
||||
@@ -633,6 +639,9 @@ void NotificationRenderer::drawNotificationBox(OLEDDisplay *display, OLEDDisplay
|
||||
|
||||
uint16_t screenHeight = display->height();
|
||||
uint8_t effectiveLineHeight = FONT_HEIGHT_SMALL - 3;
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
effectiveLineHeight = FONT_HEIGHT_SMALL + 2;
|
||||
#endif
|
||||
uint8_t visibleTotalLines = std::min<uint8_t>(lineCount, (screenHeight - vPadding * 2) / effectiveLineHeight);
|
||||
uint16_t contentHeight = visibleTotalLines * effectiveLineHeight;
|
||||
uint16_t boxHeight = contentHeight + vPadding * 2;
|
||||
@@ -664,6 +673,9 @@ void NotificationRenderer::drawNotificationBox(OLEDDisplay *display, OLEDDisplay
|
||||
|
||||
// === Draw Content ===
|
||||
int16_t lineY = boxTop + vPadding;
|
||||
#ifdef DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
lineY += 2; // Offset entire options list downward
|
||||
#endif
|
||||
for (int i = 0; i < lineCount; i++) {
|
||||
int16_t textX = boxLeft + (boxWidth - lineWidths[i]) / 2;
|
||||
if (needs_bell && i == 0) {
|
||||
|
||||
410
src/graphics/fonts/OLEDDisplayFontsTomThumb.cpp
Normal file
410
src/graphics/fonts/OLEDDisplayFontsTomThumb.cpp
Normal file
@@ -0,0 +1,410 @@
|
||||
#include "OLEDDisplayFontsTomThumb.h"
|
||||
|
||||
const uint8_t TomThumb4x6[] PROGMEM = {
|
||||
0x05, // heightMinus1 = 5 → height = 6
|
||||
0x04, // width (unused by Meshtastic, but must exist)
|
||||
0x20, // first char
|
||||
0xBD, // last char
|
||||
// Jump Table:
|
||||
0xFF, 0xFF, 0x00, 0x04, // space (advance 3->4)
|
||||
0x00, 0x00, 0x02, 0x04, // exclam (advance 3->4)
|
||||
0x00, 0x02, 0x03, 0x04, // quotedbl (advance 3->4)
|
||||
0x00, 0x05, 0x03, 0x04, // numbersign (advance 3->4)
|
||||
0x00, 0x08, 0x03, 0x04, // dollar (advance 3->4)
|
||||
0x00, 0x0B, 0x03, 0x04, // percent (advance 3->4)
|
||||
0x00, 0x0E, 0x03, 0x04, // ampersand (advance 3->4)
|
||||
0x00, 0x11, 0x02, 0x04, // quotesingle (advance 3->4)
|
||||
0x00, 0x13, 0x03, 0x04, // parenleft (advance 3->4)
|
||||
0x00, 0x16, 0x02, 0x04, // parenright (advance 3->4)
|
||||
0x00, 0x18, 0x03, 0x04, // asterisk (advance 3->4)
|
||||
0x00, 0x1B, 0x03, 0x04, // plus (advance 3->4)
|
||||
0x00, 0x1E, 0x02, 0x04, // comma (advance 3->4)
|
||||
0x00, 0x20, 0x03, 0x04, // hyphen (advance 3->4)
|
||||
0x00, 0x23, 0x02, 0x04, // period (advance 3->4)
|
||||
0x00, 0x25, 0x03, 0x04, // slash (advance 3->4)
|
||||
0x00, 0x28, 0x03, 0x04, // zero (advance 3->4)
|
||||
0x00, 0x2B, 0x02, 0x04, // one (advance 3->4)
|
||||
0x00, 0x2D, 0x03, 0x04, // two (advance 3->4)
|
||||
0x00, 0x30, 0x03, 0x04, // three (advance 3->4)
|
||||
0x00, 0x33, 0x03, 0x04, // four (advance 3->4)
|
||||
0x00, 0x36, 0x03, 0x04, // five (advance 3->4)
|
||||
0x00, 0x39, 0x03, 0x04, // six (advance 3->4)
|
||||
0x00, 0x3C, 0x03, 0x04, // seven (advance 3->4)
|
||||
0x00, 0x3F, 0x03, 0x04, // eight (advance 3->4)
|
||||
0x00, 0x42, 0x03, 0x04, // nine (advance 3->4)
|
||||
0x00, 0x45, 0x02, 0x04, // colon (advance 3->4)
|
||||
0x00, 0x47, 0x02, 0x04, // semicolon (advance 3->4)
|
||||
0x00, 0x49, 0x03, 0x04, // less (advance 3->4)
|
||||
0x00, 0x4C, 0x03, 0x04, // equal (advance 3->4)
|
||||
0x00, 0x4F, 0x03, 0x04, // greater (advance 3->4)
|
||||
0x00, 0x52, 0x03, 0x04, // question (advance 3->4)
|
||||
0x00, 0x55, 0x03, 0x04, // at (advance 3->4)
|
||||
0x00, 0x58, 0x03, 0x04, // A (advance 3->4)
|
||||
0x00, 0x5B, 0x03, 0x04, // B (advance 3->4)
|
||||
0x00, 0x5E, 0x03, 0x04, // C (advance 3->4)
|
||||
0x00, 0x61, 0x03, 0x04, // D (advance 3->4)
|
||||
0x00, 0x64, 0x03, 0x04, // E (advance 3->4)
|
||||
0x00, 0x67, 0x03, 0x04, // F (advance 3->4)
|
||||
0x00, 0x6A, 0x03, 0x04, // G (advance 3->4)
|
||||
0x00, 0x6D, 0x03, 0x04, // H (advance 3->4)
|
||||
0x00, 0x70, 0x03, 0x04, // I (advance 3->4)
|
||||
0x00, 0x73, 0x03, 0x04, // J (advance 3->4)
|
||||
0x00, 0x76, 0x03, 0x04, // K (advance 3->4)
|
||||
0x00, 0x79, 0x03, 0x04, // L (advance 3->4)
|
||||
0x00, 0x7C, 0x03, 0x04, // M (advance 3->4)
|
||||
0x00, 0x7F, 0x03, 0x04, // N (advance 3->4)
|
||||
0x00, 0x82, 0x03, 0x04, // O (advance 3->4)
|
||||
0x00, 0x85, 0x03, 0x04, // P (advance 3->4)
|
||||
0x00, 0x88, 0x03, 0x04, // Q (advance 3->4)
|
||||
0x00, 0x8B, 0x03, 0x04, // R (advance 3->4)
|
||||
0x00, 0x8E, 0x03, 0x04, // S (advance 3->4)
|
||||
0x00, 0x91, 0x03, 0x04, // T (advance 3->4)
|
||||
0x00, 0x94, 0x03, 0x04, // U (advance 3->4)
|
||||
0x00, 0x97, 0x03, 0x04, // V (advance 3->4)
|
||||
0x00, 0x9A, 0x03, 0x04, // W (advance 3->4)
|
||||
0x00, 0x9D, 0x03, 0x04, // X (advance 3->4)
|
||||
0x00, 0xA0, 0x03, 0x04, // Y (advance 3->4)
|
||||
0x00, 0xA3, 0x03, 0x04, // Z (advance 3->4)
|
||||
0x00, 0xA6, 0x03, 0x04, // bracketleft (advance 3->4)
|
||||
0x00, 0xA9, 0x03, 0x04, // backslash (advance 3->4)
|
||||
0x00, 0xAC, 0x03, 0x04, // bracketright (advance 3->4)
|
||||
0x00, 0xAF, 0x03, 0x04, // asciicircum (advance 3->4)
|
||||
0x00, 0xB2, 0x03, 0x04, // underscore (advance 3->4)
|
||||
0x00, 0xB5, 0x02, 0x04, // grave (advance 3->4)
|
||||
0x00, 0xB7, 0x03, 0x04, // a (advance 3->4)
|
||||
0x00, 0xBA, 0x03, 0x04, // b (advance 3->4)
|
||||
0x00, 0xBD, 0x03, 0x04, // c (advance 3->4)
|
||||
0x00, 0xC0, 0x03, 0x04, // d (advance 3->4)
|
||||
0x00, 0xC3, 0x03, 0x04, // e (advance 3->4)
|
||||
0x00, 0xC6, 0x03, 0x04, // f (advance 3->4)
|
||||
0x00, 0xC9, 0x03, 0x04, // g (advance 3->4)
|
||||
0x00, 0xCC, 0x03, 0x04, // h (advance 3->4)
|
||||
0x00, 0xCF, 0x02, 0x04, // i (advance 3->4)
|
||||
0x00, 0xD1, 0x03, 0x04, // j (advance 3->4)
|
||||
0x00, 0xD4, 0x03, 0x04, // k (advance 3->4)
|
||||
0x00, 0xD7, 0x03, 0x04, // l (advance 3->4)
|
||||
0x00, 0xDA, 0x03, 0x04, // m (advance 3->4)
|
||||
0x00, 0xDD, 0x03, 0x04, // n (advance 3->4)
|
||||
0x00, 0xE0, 0x03, 0x04, // o (advance 3->4)
|
||||
0x00, 0xE3, 0x03, 0x04, // p (advance 3->4)
|
||||
0x00, 0xE6, 0x03, 0x04, // q (advance 3->4)
|
||||
0x00, 0xE9, 0x03, 0x04, // r (advance 3->4)
|
||||
0x00, 0xEC, 0x03, 0x04, // s (advance 3->4)
|
||||
0x00, 0xEF, 0x03, 0x04, // t (advance 3->4)
|
||||
0x00, 0xF2, 0x03, 0x04, // u (advance 3->4)
|
||||
0x00, 0xF5, 0x03, 0x04, // v (advance 3->4)
|
||||
0x00, 0xF8, 0x03, 0x04, // w (advance 3->4)
|
||||
0x00, 0xFB, 0x03, 0x04, // x (advance 3->4)
|
||||
0x00, 0xFE, 0x03, 0x04, // y (advance 3->4)
|
||||
0x01, 0x01, 0x03, 0x04, // z (advance 3->4)
|
||||
0x01, 0x04, 0x03, 0x04, // braceleft (advance 3->4)
|
||||
0x01, 0x07, 0x02, 0x04, // bar (advance 3->4)
|
||||
0x01, 0x09, 0x03, 0x04, // braceright (advance 3->4)
|
||||
0x01, 0x0C, 0x03, 0x04, // asciitilde (advance 3->4)
|
||||
0x01, 0x0F, 0x02, 0x04, // exclamdown (advance 3->4)
|
||||
0x01, 0x11, 0x03, 0x04, // cent
|
||||
0x01, 0x14, 0x03, 0x04, // sterling
|
||||
0x01, 0x17, 0x03, 0x04, // currency
|
||||
0x01, 0x1A, 0x03, 0x04, // yen
|
||||
0x01, 0x1D, 0x02, 0x04, // brokenbar
|
||||
0x01, 0x1F, 0x03, 0x04, // section
|
||||
0x01, 0x22, 0x03, 0x04, // dieresis
|
||||
0x01, 0x25, 0x03, 0x04, // copyright
|
||||
0x01, 0x28, 0x03, 0x04, // ordfeminine
|
||||
0x01, 0x2B, 0x02, 0x04, // guillemotleft
|
||||
0x01, 0x2D, 0x03, 0x04, // logicalnot
|
||||
0x01, 0x30, 0x02, 0x04, // softhyphen
|
||||
0x01, 0x32, 0x03, 0x04, // registered
|
||||
0x01, 0x35, 0x03, 0x04, // macron
|
||||
0x01, 0x38, 0x03, 0x04, // degree
|
||||
0x01, 0x3B, 0x03, 0x04, // plusminus
|
||||
0x01, 0x3E, 0x03, 0x04, // twosuperior
|
||||
0x01, 0x41, 0x03, 0x04, // threesuperior
|
||||
0x01, 0x44, 0x03, 0x04, // acute
|
||||
0x01, 0x47, 0x03, 0x04, // mu
|
||||
0x01, 0x4A, 0x03, 0x04, // paragraph
|
||||
0x01, 0x4D, 0x03, 0x04, // periodcentered
|
||||
0x01, 0x50, 0x03, 0x04, // cedilla
|
||||
0x01, 0x53, 0x02, 0x04, // onesuperior
|
||||
0x01, 0x55, 0x03, 0x04, // ordmasculine
|
||||
0x01, 0x58, 0x03, 0x04, // guillemotright
|
||||
0x01, 0x5B, 0x03, 0x04, // onequarter
|
||||
0x01, 0x5E, 0x03, 0x04, // onehalf
|
||||
0x01, 0x61, 0x03, 0x04, // threequarters
|
||||
0x01, 0x64, 0x03, 0x04, // questiondown
|
||||
0x01, 0x67, 0x03, 0x04, // Agrave
|
||||
0x01, 0x6A, 0x03, 0x04, // Aacute
|
||||
0x01, 0x6D, 0x03, 0x04, // Acircumflex
|
||||
0x01, 0x70, 0x03, 0x04, // Atilde
|
||||
0x01, 0x73, 0x03, 0x04, // Adieresis
|
||||
0x01, 0x76, 0x03, 0x04, // Aring
|
||||
0x01, 0x79, 0x03, 0x04, // AE
|
||||
0x01, 0x7C, 0x03, 0x04, // Ccedilla
|
||||
0x01, 0x7F, 0x03, 0x04, // Egrave
|
||||
0x01, 0x82, 0x03, 0x04, // Eacute
|
||||
0x01, 0x85, 0x03, 0x04, // Ecircumflex
|
||||
0x01, 0x88, 0x03, 0x04, // Edieresis
|
||||
0x01, 0x8B, 0x03, 0x04, // Igrave
|
||||
0x01, 0x8E, 0x03, 0x04, // Iacute
|
||||
0x01, 0x91, 0x03, 0x04, // Icircumflex
|
||||
0x01, 0x94, 0x03, 0x04, // Idieresis
|
||||
0x01, 0x97, 0x03, 0x04, // Eth
|
||||
0x01, 0x9A, 0x03, 0x04, // Ntilde
|
||||
0x01, 0x9D, 0x03, 0x04, // Ograve
|
||||
0x01, 0xA0, 0x03, 0x04, // Oacute
|
||||
0x01, 0xA3, 0x03, 0x04, // Ocircumflex
|
||||
0x01, 0xA6, 0x03, 0x04, // Otilde
|
||||
0x01, 0xA9, 0x03, 0x04, // Odieresis
|
||||
0x01, 0xAC, 0x03, 0x04, // multiply
|
||||
0x01, 0xAF, 0x03, 0x04, // Oslash
|
||||
0x01, 0xB2, 0x03, 0x04, // Ugrave
|
||||
0x01, 0xB5, 0x03, 0x04, // Uacute
|
||||
0x01, 0xB8, 0x03, 0x04, // Ucircumflex
|
||||
0x01, 0xBB, 0x03, 0x04, // Udieresis
|
||||
0x01, 0xBE, 0x03, 0x04, // Yacute
|
||||
0x01, 0xC1, 0x03, 0x04, // Thorn
|
||||
0x01, 0xC4, 0x03, 0x04, // germandbls
|
||||
0x01, 0xC7, 0x03, 0x04, // agrave
|
||||
0x01, 0xCA, 0x03, 0x04, // aacute
|
||||
0x01, 0xCD, 0x03, 0x04, // acircumflex
|
||||
0x01, 0xD0, 0x03, 0x04, // atilde
|
||||
0x01, 0xD3, 0x03, 0x04, // adieresis
|
||||
0x01, 0xD6, 0x03, 0x04, // aring
|
||||
0x01, 0xD9, 0x03, 0x04, // ae
|
||||
0x01, 0xDC, 0x03, 0x04, // ccedilla
|
||||
0x01, 0xDF, 0x03, 0x04, // egrave
|
||||
0x01, 0xE2, 0x03, 0x04, // eacute
|
||||
0x01, 0xE5, 0x03, 0x04, // ecircumflex
|
||||
0x01, 0xE8, 0x03, 0x04, // edieresis
|
||||
0x01, 0xEB, 0x03, 0x04, // igrave
|
||||
0x01, 0xEE, 0x02, 0x04, // iacute
|
||||
0x01, 0xF0, 0x03, 0x04, // icircumflex
|
||||
0x01, 0xF3, 0x03, 0x04, // idieresis
|
||||
0x01, 0xF6, 0x03, 0x04, // eth
|
||||
0x01, 0xF9, 0x03, 0x04, // ntilde
|
||||
0x01, 0xFC, 0x03, 0x04, // ograve
|
||||
0x01, 0xFF, 0x03, 0x04, // oacute
|
||||
0x02, 0x02, 0x03, 0x04, // ocircumflex
|
||||
0x02, 0x05, 0x03, 0x04, // otilde
|
||||
0x02, 0x08, 0x03, 0x04, // odieresis
|
||||
0x02, 0x0B, 0x03, 0x04, // divide
|
||||
0x02, 0x0E, 0x03, 0x04, // oslash
|
||||
0x02, 0x11, 0x03, 0x04, // ugrave
|
||||
0x02, 0x14, 0x03, 0x04, // uacute
|
||||
0x02, 0x17, 0x03, 0x04, // ucircumflex
|
||||
0x02, 0x1A, 0x03, 0x04, // udieresis
|
||||
0x02, 0x1D, 0x03, 0x04, // yacute
|
||||
0x02, 0x20, 0x03, 0x04, // thorn
|
||||
|
||||
// =================
|
||||
// Font Bitmap Data:
|
||||
// =================
|
||||
0x00, 0x17, // exclam
|
||||
0x03, 0x00, 0x04, // quotedbl
|
||||
0x1F, 0x0A, 0x1F, // numbersign
|
||||
0x0A, 0x1F, 0x05, // dollar
|
||||
0x09, 0x04, 0x12, // percent
|
||||
0x0F, 0x17, 0x1C, // ampersand
|
||||
0x00, 0x04, // quotesingle
|
||||
0x00, 0x0E, 0x11, // parenleft
|
||||
0x11, 0x0E, // parenright
|
||||
0x05, 0x02, 0x05, // asterisk
|
||||
0x04, 0x0E, 0x04, // plus
|
||||
0x10, 0x08, // comma
|
||||
0x04, 0x04, 0x04, // hyphen
|
||||
0x00, 0x10, // period
|
||||
0x18, 0x04, 0x04, // slash
|
||||
0x1E, 0x11, 0x0F, // zero
|
||||
0x02, 0x1F, // one
|
||||
0x19, 0x15, 0x12, // two
|
||||
0x11, 0x15, 0x0A, // three
|
||||
0x07, 0x04, 0x1F, // four
|
||||
0x17, 0x15, 0x09, // five
|
||||
0x1E, 0x15, 0x1D, // six
|
||||
0x19, 0x05, 0x04, // seven
|
||||
0x1F, 0x15, 0x1F, // eight
|
||||
0x17, 0x15, 0x0F, // nine
|
||||
0x00, 0x0A, // colon
|
||||
0x10, 0x0A, // semicolon
|
||||
0x04, 0x0A, 0x11, // less
|
||||
0x0A, 0x0A, 0x0A, // equal
|
||||
0x11, 0x0A, 0x04, // greater
|
||||
0x01, 0x15, 0x04, // question
|
||||
0x0E, 0x15, 0x16, // at
|
||||
0x1E, 0x05, 0x1E, // A
|
||||
0x1F, 0x15, 0x0A, // B
|
||||
0x0E, 0x11, 0x11, // C
|
||||
0x1F, 0x11, 0x0E, // D
|
||||
0x1F, 0x15, 0x15, // E
|
||||
0x1F, 0x05, 0x05, // F
|
||||
0x0E, 0x15, 0x1D, // G
|
||||
0x1F, 0x04, 0x1F, // H
|
||||
0x11, 0x1F, 0x11, // I
|
||||
0x08, 0x10, 0x0F, // J
|
||||
0x1F, 0x04, 0x1B, // K
|
||||
0x1F, 0x10, 0x10, // L
|
||||
0x1F, 0x06, 0x1F, // M
|
||||
0x1F, 0x0E, 0x1F, // N
|
||||
0x0E, 0x11, 0x0E, // O
|
||||
0x1F, 0x05, 0x02, // P
|
||||
0x0E, 0x19, 0x1E, // Q
|
||||
0x1F, 0x0D, 0x16, // R
|
||||
0x12, 0x15, 0x09, // S
|
||||
0x01, 0x1F, 0x01, // T
|
||||
0x0F, 0x10, 0x1F, // U
|
||||
0x07, 0x18, 0x07, // V
|
||||
0x1F, 0x0C, 0x1F, // W
|
||||
0x1B, 0x04, 0x1B, // X
|
||||
0x03, 0x1C, 0x04, // Y
|
||||
0x19, 0x15, 0x13, // Z
|
||||
0x1F, 0x11, 0x11, // bracketleft
|
||||
0x02, 0x04, 0x08, // backslash
|
||||
0x11, 0x11, 0x1F, // bracketright
|
||||
0x02, 0x01, 0x02, // asciicircum
|
||||
0x10, 0x10, 0x10, // underscore
|
||||
0x01, 0x02, // grave
|
||||
0x1A, 0x16, 0x1C, // a
|
||||
0x1F, 0x12, 0x0C, // b
|
||||
0x0C, 0x12, 0x12, // c
|
||||
0x0C, 0x12, 0x1F, // d
|
||||
0x0C, 0x1A, 0x16, // e
|
||||
0x04, 0x1E, 0x05, // f
|
||||
0x0C, 0x2A, 0x1E, // g
|
||||
0x1F, 0x02, 0x1C, // h
|
||||
0x00, 0x1D, // i
|
||||
0x10, 0x20, 0x1D, // j
|
||||
0x1F, 0x0C, 0x12, // k
|
||||
0x11, 0x1F, 0x10, // l
|
||||
0x1E, 0x0E, 0x1E, // m
|
||||
0x1E, 0x02, 0x1C, // n
|
||||
0x0C, 0x12, 0x0C, // o
|
||||
0x3E, 0x12, 0x0C, // p
|
||||
0x0C, 0x12, 0x3E, // q
|
||||
0x1C, 0x02, 0x02, // r
|
||||
0x14, 0x1E, 0x0A, // s
|
||||
0x02, 0x1F, 0x12, // t
|
||||
0x0E, 0x10, 0x1E, // u
|
||||
0x0E, 0x18, 0x0E, // v
|
||||
0x1E, 0x1C, 0x1E, // w
|
||||
0x12, 0x0C, 0x12, // x
|
||||
0x06, 0x28, 0x1E, // y
|
||||
0x1A, 0x1E, 0x16, // z
|
||||
0x04, 0x1B, 0x11, // braceleft
|
||||
0x00, 0x1B, // bar
|
||||
0x11, 0x1B, 0x04, // braceright
|
||||
0x02, 0x03, 0x01, // asciitilde
|
||||
0x00, 0x1D, // exclamdown
|
||||
0x0E, 0x1B, 0x0A, // cent
|
||||
0x14, 0x1F, 0x15, // sterling
|
||||
0x15, 0x0E, 0x15, // currency
|
||||
0x0B, 0x1C, 0x0B, // yen
|
||||
0x00, 0x1B, // brokenbar
|
||||
0x14, 0x1B, 0x05, // section
|
||||
0x01, 0x00, 0x01, // dieresis
|
||||
0x02, 0x05, 0x05, // copyright
|
||||
0x16, 0x15, 0x17, // ordfeminine
|
||||
0x02, 0x05, // guillemotleft
|
||||
0x02, 0x02, 0x06, // logicalnot
|
||||
0x04, 0x04, // softhyphen
|
||||
0x07, 0x03, 0x04, // registered
|
||||
0x01, 0x01, 0x01, // macron
|
||||
0x02, 0x05, 0x02, // degree
|
||||
0x12, 0x17, 0x12, // plusminus
|
||||
0x01, 0x07, 0x04, // twosuperior
|
||||
0x05, 0x07, 0x07, // threesuperior
|
||||
0x00, 0x02, 0x01, // acute
|
||||
0x1F, 0x08, 0x07, // mu
|
||||
0x02, 0x1D, 0x1F, // paragraph
|
||||
0x0E, 0x0E, 0x0E, // periodcentered
|
||||
0x10, 0x14, 0x08, // cedilla
|
||||
0x00, 0x07, // onesuperior
|
||||
0x12, 0x15, 0x12, // ordmasculine
|
||||
0x00, 0x05, 0x02, // guillemotright
|
||||
0x03, 0x08, 0x18, // onequarter
|
||||
0x0B, 0x18, 0x10, // onehalf
|
||||
0x03, 0x0B, 0x18, // threequarters
|
||||
0x18, 0x15, 0x10, // questiondown
|
||||
0x18, 0x0D, 0x1A, // Agrave
|
||||
0x1A, 0x0D, 0x18, // Aacute
|
||||
0x19, 0x0D, 0x19, // Acircumflex
|
||||
0x1A, 0x0F, 0x19, // Atilde
|
||||
0x1D, 0x0A, 0x1D, // Adieresis
|
||||
0x1F, 0x0B, 0x1C, // Aring
|
||||
0x1E, 0x1F, 0x15, // AE
|
||||
0x06, 0x29, 0x19, // Ccedilla
|
||||
0x1C, 0x1D, 0x16, // Egrave
|
||||
0x1E, 0x1D, 0x14, // Eacute
|
||||
0x1D, 0x1D, 0x15, // Ecircumflex
|
||||
0x1D, 0x1C, 0x15, // Edieresis
|
||||
0x14, 0x1D, 0x16, // Igrave
|
||||
0x16, 0x1D, 0x14, // Iacute
|
||||
0x15, 0x1D, 0x15, // Icircumflex
|
||||
0x15, 0x1C, 0x15, // Idieresis
|
||||
0x1F, 0x15, 0x0E, // Eth
|
||||
0x1D, 0x0B, 0x1E, // Ntilde
|
||||
0x1C, 0x15, 0x1E, // Ograve
|
||||
0x1E, 0x15, 0x1C, // Oacute
|
||||
0x1D, 0x15, 0x1D, // Ocircumflex
|
||||
0x1D, 0x17, 0x1E, // Otilde
|
||||
0x1D, 0x14, 0x1D, // Odieresis
|
||||
0x0A, 0x04, 0x0A, // multiply
|
||||
0x1E, 0x15, 0x0F, // Oslash
|
||||
0x1D, 0x12, 0x1C, // Ugrave
|
||||
0x1C, 0x12, 0x1D, // Uacute
|
||||
0x1D, 0x11, 0x1D, // Ucircumflex
|
||||
0x1D, 0x10, 0x1D, // Udieresis
|
||||
0x0C, 0x1A, 0x0D, // Yacute
|
||||
0x1F, 0x0A, 0x0E, // Thorn
|
||||
0x3E, 0x15, 0x0B, // germandbls
|
||||
0x18, 0x15, 0x1E, // agrave
|
||||
0x1A, 0x15, 0x1C, // aacute
|
||||
0x19, 0x15, 0x1D, // acircumflex
|
||||
0x1A, 0x17, 0x1D, // atilde
|
||||
0x19, 0x14, 0x1D, // adieresis
|
||||
0x18, 0x17, 0x1F, // aring
|
||||
0x1C, 0x1E, 0x0E, // ae
|
||||
0x04, 0x2A, 0x1A, // ccedilla
|
||||
0x08, 0x1D, 0x1E, // egrave
|
||||
0x0A, 0x1D, 0x1C, // eacute
|
||||
0x09, 0x1D, 0x1D, // ecircumflex
|
||||
0x09, 0x1C, 0x1D, // edieresis
|
||||
0x00, 0x1D, 0x02, // igrave
|
||||
0x02, 0x1D, // iacute
|
||||
0x01, 0x1D, 0x01, // icircumflex
|
||||
0x01, 0x1C, 0x01, // idieresis
|
||||
0x0A, 0x17, 0x1D, // eth
|
||||
0x1D, 0x07, 0x1A, // ntilde
|
||||
0x08, 0x15, 0x0A, // ograve
|
||||
0x0A, 0x15, 0x08, // oacute
|
||||
0x09, 0x15, 0x09, // ocircumflex
|
||||
0x09, 0x17, 0x0A, // otilde
|
||||
0x09, 0x14, 0x09, // odieresis
|
||||
0x04, 0x15, 0x04, // divide
|
||||
0x1C, 0x16, 0x0E, // oslash
|
||||
0x0D, 0x12, 0x1C, // ugrave
|
||||
0x0C, 0x12, 0x1D, // uacute
|
||||
0x0D, 0x11, 0x1D, // ucircumflex
|
||||
0x0D, 0x10, 0x1D, // udieresis
|
||||
0x04, 0x2A, 0x1D, // yacute
|
||||
0x3E, 0x14, 0x08 // thorn
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// FONT_INFO wrapper required by Meshtastic
|
||||
// ============================================================================
|
||||
//
|
||||
// NOTE:
|
||||
// Meshtastic OLED renderer does *not* use the FONT_CHAR_INFO jump table when
|
||||
// the font uses the raw-array jump table format. But this struct MUST exist.
|
||||
//
|
||||
static const FONT_CHAR_INFO TomThumb4x6_CharInfo[] PROGMEM = {};
|
||||
|
||||
// ============================================================================
|
||||
// Final FONT_INFO Export
|
||||
// ============================================================================
|
||||
const FONT_INFO TomThumb4x6_Info = {.heightBits = 6, // REAL glyph height
|
||||
.baseline = 4, // Correct baseline for 6px font
|
||||
.startChar = 0x20,
|
||||
.endChar = 0xBD,
|
||||
.charInfo = TomThumb4x6_CharInfo,
|
||||
.data = TomThumb4x6};
|
||||
32
src/graphics/fonts/OLEDDisplayFontsTomThumb.h
Normal file
32
src/graphics/fonts/OLEDDisplayFontsTomThumb.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
#include <Arduino.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Information about a single character
|
||||
typedef struct {
|
||||
uint8_t widthBits; // Glyph width in bits
|
||||
uint16_t offset; // Offset into the bitmap table
|
||||
} FONT_CHAR_INFO;
|
||||
|
||||
// Information about the whole font
|
||||
typedef struct {
|
||||
uint8_t heightBits; // Character height in pixels (6px)
|
||||
uint8_t baseline; // baseline (height-1) = 5
|
||||
uint8_t startChar; // First supported char = 0x20
|
||||
uint8_t endChar; // Last supported char = 0xBD
|
||||
const FONT_CHAR_INFO *charInfo; // Jump table
|
||||
const uint8_t *data; // Bitmap table
|
||||
} FONT_INFO;
|
||||
|
||||
// Raw PROGMEM font data (jump table + bitmap stream)
|
||||
extern const uint8_t TomThumb4x6[] PROGMEM;
|
||||
|
||||
// Wrapper combining the tables so OLED code can use it
|
||||
extern const FONT_INFO TomThumb4x6_Info;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
@@ -1,6 +1,8 @@
|
||||
#define LED_PIN LED
|
||||
|
||||
#define USE_SSD1306 // Heltec_v3 has a SSD1306 display
|
||||
#define DISPLAY_FORCE_SMALL_FONTS
|
||||
#define DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
|
||||
#define RESET_OLED RST_OLED
|
||||
#define I2C_SDA SDA_OLED // I2C pins for this board
|
||||
|
||||
@@ -7,6 +7,12 @@
|
||||
#define VARIANT_MCK (64000000ul) // Master clock frequency
|
||||
#define USE_LFXO // 32.768kHz crystal for LFCLK
|
||||
|
||||
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
// Sample size change
|
||||
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
#define DISPLAY_FORCE_SMALL_FONTS
|
||||
#define DISPLAY_FORCE_TOMTHUMB_FONT
|
||||
|
||||
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
// Pin Capacity Definitions
|
||||
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Reference in New Issue
Block a user