47 рядки
991 B
C
47 рядки
991 B
C
#include "font.h"
|
|
#include "odroid/display.h"
|
|
#include "text.h"
|
|
|
|
|
|
static const int MAX_GLYPHS_PER_ROW = LCD_WIDTH / GLYPH_WIDTH;
|
|
static const int MAX_GLYPHS_PER_COL = LCD_HEIGHT / GLYPH_HEIGHT;
|
|
|
|
void DrawText(uint16_t* framebuffer, char* string, int length, int x, int y, uint16_t color)
|
|
{
|
|
assert(x + length <= MAX_GLYPHS_PER_ROW);
|
|
assert(y <= MAX_GLYPHS_PER_COL);
|
|
|
|
for (int charIndex = 0; charIndex < length; ++charIndex)
|
|
{
|
|
char c = string[charIndex];
|
|
|
|
if (c == ' ')
|
|
{
|
|
continue;
|
|
}
|
|
|
|
int xStart = GLYPH_WIDTH * (x + charIndex);
|
|
int yStart = GLYPH_HEIGHT * y;
|
|
|
|
for (int row = 0; row < GLYPH_HEIGHT; ++row)
|
|
{
|
|
for (int col = 0; col < GLYPH_WIDTH; ++col)
|
|
{
|
|
int bitPosition = 1U << (15U - col);
|
|
int glyphIndex = GetGlyphIndex(c);
|
|
|
|
uint16_t pixel = glyphMap[glyphIndex][row] & bitPosition;
|
|
|
|
if (pixel)
|
|
{
|
|
int screenX = xStart + col;
|
|
int screenY = yStart + row;
|
|
|
|
framebuffer[screenY * LCD_WIDTH + screenX] = color;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|