110 lines
3.3 KiB
C
110 lines
3.3 KiB
C
|
#ifndef TINYFONT_H
|
||
|
#define TINYFONT_H
|
||
|
|
||
|
#include <Arduino.h>
|
||
|
#include <Print.h>
|
||
|
|
||
|
/**
|
||
|
* Tinyfont uses a 4x4 font to print text.
|
||
|
* It conforms do standard ASCII letters in range from 32 to 126.
|
||
|
* Even tough the lowercase letters are available, the best readability
|
||
|
* is given with the Uppercase letters.
|
||
|
*
|
||
|
* Usage:
|
||
|
* Call the print() method of a Tinyfont instance.
|
||
|
*
|
||
|
* Special letters:
|
||
|
* \n makes a linebreak in print().
|
||
|
* \t makes a 9 px long jump in print().
|
||
|
*/
|
||
|
class Tinyfont : public Print {
|
||
|
public:
|
||
|
Tinyfont(uint8_t *screenBuffer, int16_t width, int16_t height); //!< Needs to be initialized with a screenBuffer where the height is a multiple of 8.
|
||
|
virtual size_t write(uint8_t); // used by the Arduino Print class
|
||
|
|
||
|
/** \brief
|
||
|
* Prints a single letter in ASCII range from 32 to 126.
|
||
|
*
|
||
|
* \details
|
||
|
* Every character outside the range will be 127, wich is a square fallback sprite.
|
||
|
*/
|
||
|
void printChar(char c, int16_t x, int16_t y);
|
||
|
|
||
|
|
||
|
/** \brief
|
||
|
* Set the location of the text cursor.
|
||
|
*
|
||
|
* \param x The X coordinate, in pixels, for the new location of the text cursor.
|
||
|
* \param y The Y coordinate, in pixels, for the new location of the text cursor.
|
||
|
*
|
||
|
* \details
|
||
|
* The location of the text cursor is set the the specified coordinates.
|
||
|
* The coordinates are in pixels. Since the coordinates can specify any pixel
|
||
|
* location, the text does not have to be placed on specific rows.
|
||
|
* As with all drawing functions, location 0, 0 is the top left corner of
|
||
|
* the display. The cursor location will be the top left corner of the next
|
||
|
* character written.
|
||
|
*/
|
||
|
void setCursor(int16_t x, int16_t y);
|
||
|
|
||
|
/** \brief
|
||
|
* Get the X coordinate of the current text cursor position.
|
||
|
*
|
||
|
* \return The X coordinate of the current text cursor position.
|
||
|
*
|
||
|
* \details
|
||
|
* The X coordinate returned is a pixel location with 0 indicating the
|
||
|
* leftmost column.
|
||
|
*/
|
||
|
int16_t getCursorX() const;
|
||
|
|
||
|
/** \brief
|
||
|
* Get the Y coordinate of the current text cursor position.
|
||
|
*
|
||
|
* \return The Y coordinate of the current text cursor position.
|
||
|
*
|
||
|
* \details
|
||
|
* The Y coordinate returned is a pixel location with 0 indicating the
|
||
|
* topmost row.
|
||
|
*/
|
||
|
int16_t getCursorY() const;
|
||
|
|
||
|
/** \brief
|
||
|
* Set the text foreground color.
|
||
|
*
|
||
|
* \param color The color to be used for following text.
|
||
|
*/
|
||
|
void setTextColor(uint8_t color);
|
||
|
|
||
|
/** \brief
|
||
|
* Get the text foreground color.
|
||
|
*
|
||
|
* \return The color used for text.
|
||
|
*/
|
||
|
uint8_t getTextColor() const;
|
||
|
|
||
|
/** \brief
|
||
|
* If set to true the pixel behind the text will be set to the opposite of textColor.
|
||
|
* Default is false.
|
||
|
*/
|
||
|
bool maskText;
|
||
|
|
||
|
private:
|
||
|
void drawByte(int16_t x, int16_t y, uint8_t pixels, uint8_t color);
|
||
|
|
||
|
uint8_t *sBuffer;
|
||
|
int16_t sWidth;
|
||
|
int16_t sHeight;
|
||
|
|
||
|
int16_t cursorX; //!< Default is 0.
|
||
|
int16_t baseX; //!< needed for linebreak.
|
||
|
int16_t cursorY; //!< Default is 0.
|
||
|
|
||
|
uint8_t textColor; // BLACK == 0, everything else is WHITE. Default is WHITE.
|
||
|
|
||
|
uint8_t letterSpacing; //!< letterSpacing controls the distance between letters. Default is 1.
|
||
|
uint8_t lineHeight; //!< lineHeight controls the height between lines breakend by \n. Default is 5.
|
||
|
};
|
||
|
|
||
|
#endif
|