// font class library
#pragma once
#include <cstdint>
class font_t
{
public:
/// \param height - pixel character height
/// \param width - pixel character width
/// \param spacing - character to character spacing
/// \param chars - number of characters in character set
/// \param data - constant data
font_t(uint8_t const height, uint8_t const width,
uint8_t const spacing, uint8_t const chars,
char const *data) : m_height(height), m_width(width), m_spacing(spacing), m_chars(chars), m_data(data)
{
}
virtual char
getPixel(char c, int x, int y) = 0;
// character width
uint8_t
width()
{
return m_width;
}
// character height
uint8_t
height()
{
return m_height;
}
uint8_t
chars()
{
return m_chars;
}
uint8_t
spacing()
{
return m_spacing;
}
protected:
/// @brief Pixel height
uint8_t const m_height;
/// @brief Bitmap width
uint8_t const m_width;
/// @brief Spacing between characters
uint8_t const m_spacing;
/// @brief Number of characters in the character set bit map
uint8_t const m_chars;
char const *m_data;
};
class font5x7_t : public font_t
{
public:
// one byte of pixels per character row.
font5x7_t(unsigned char_count, char const *data) : font_t(7, 5, 6, char_count, data){};
char
getPixel(char c, int x, int y) override;
};
class font10x18_t : public font_t
{
public:
// XBM format
font10x18_t(unsigned char_count, char const *data) : font_t(18, 10, 10, char_count, data){};
char
getPixel(char c, int x, int y) override;
};
// defined fonts
// original 5x7
extern font5x7_t small_font;
// lucida font
// in 10x18
extern font10x18_t large_font;