mirror of
https://github.com/SatDump/SatDump
synced 2026-08-13 17:47:30 -04:00
80 lines
No EOL
2.1 KiB
C++
80 lines
No EOL
2.1 KiB
C++
#pragma once
|
|
|
|
/**
|
|
* @file text.h
|
|
* @brief Image Text drawing
|
|
*/
|
|
|
|
#include "image.h"
|
|
#include "image/font/imstb_truetype.h"
|
|
#include <string>
|
|
|
|
namespace satdump
|
|
{
|
|
namespace image
|
|
{
|
|
/**
|
|
* @brief Text image drawer, used to draw
|
|
* arbitrary text onto an image. This needs to be
|
|
* its own class as the font needs to be loaded and
|
|
* kept around as a pointer.
|
|
*/
|
|
class TextDrawer
|
|
{
|
|
protected:
|
|
struct char_el
|
|
{
|
|
int char_nb;
|
|
int glyph_nb;
|
|
unsigned char *bitmap;
|
|
int cx0, cx1, cy0, cy1, advance, lsb, w, h, ix0, ix1, iy0, iy1, size;
|
|
};
|
|
|
|
struct font_info
|
|
{
|
|
struct stbtt_fontinfo fontp;
|
|
std::string path;
|
|
int x0, x1, y0, y1, asc, dsc, lg, wdh, hht;
|
|
std::vector<char_el> chars;
|
|
};
|
|
|
|
protected:
|
|
// font rendering stuff
|
|
font_info font;
|
|
bool has_font = false;
|
|
uint8_t *ttf_buffer;
|
|
|
|
public:
|
|
~TextDrawer();
|
|
|
|
/**
|
|
* @brief Init the font
|
|
* @param font_path path to a .ttf file
|
|
*/
|
|
void init_font(std::string font_path);
|
|
|
|
/**
|
|
* @brief Init with the default font
|
|
*/
|
|
void init_font();
|
|
|
|
/**
|
|
* @brief Is the font ready?
|
|
* @return true if the font is ready
|
|
*/
|
|
bool font_ready() { return has_font; }
|
|
|
|
/**
|
|
* @brief Draw text onto an image
|
|
* @param img to draw onto
|
|
* @param xs0 start X position
|
|
* @param ys0 start Y position
|
|
* @param color of the text
|
|
* @param size size/height (in pixels) of the text to draw
|
|
* @param text string the draw
|
|
* @return text length on X axis in pixels
|
|
*/
|
|
int draw_text(Image &img, int xs0, int ys0, std::vector<double> color, int size, std::string text);
|
|
};
|
|
} // namespace image
|
|
} // namespace satdump
|