steering-wheel/Middlewares/ST/touchgfx/framework/tools/textconvert/Templates/GeneratedFont.hpp.temp

133 lines
5.3 KiB
Plaintext
Raw Normal View History

2023-03-06 21:21:00 +01:00
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#ifndef TOUCHGFX_GENERATEDFONT_HPP
#define TOUCHGFX_GENERATEDFONT_HPP
#include <touchgfx/ConstFont.hpp>
namespace touchgfx
{
class GeneratedFont : public ConstFont
{
public:
GeneratedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable);
using ConstFont::getGlyph;
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const;
virtual const uint16_t* getGSUBTable() const
{
return gsubTable;
}
virtual const FontContextualFormsTable* getContextualFormsTable() const
{
return arabicTable;
}
protected:
GeneratedFont()
: ConstFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), glyphData(0), kerningData(0), gsubTable(0), arabicTable(0)
{
}
const void* glyphData; ///< The glyphs
const KerningNode* kerningData; ///< The kerning
const uint16_t* gsubTable; ///< The GSUB tables
const FontContextualFormsTable* arabicTable; ///< Contextual forms
};
struct BinaryFontData
{
uint32_t fontIndex; // The font index (as used by TypedTextDatabase)
uint32_t sizeOfFontData; // Size of the complete BinaryFont
uint32_t offsetToTable; // GlyphNode[]
uint32_t offsetToKerning; // KerningNode[]
uint32_t offsetToGlyphs; // uint8_t[]
uint32_t offsetToGSUB; // uint16_t[]
uint32_t offsetToArabicTable; // FontContextualFormsTable
uint16_t numberOfGlyphs; // Number of glyphs in Table and Glyphs
uint16_t fontHeight; // Font height
uint16_t baseline; // Distance to baseline
uint8_t pixAboveTop; // Max pixels above top
uint8_t pixBelowBottom; // Max pixels below bottom
uint8_t bitsPerPixel; // Bpp
uint8_t byteAlignRow; // A4/A2/A1
uint8_t maxLeft; // The maximum a glyph extends to the left
uint8_t maxRight; // The maximum a glyph extends to the right
Unicode::UnicodeChar fallbackChar; // Fallback Character for the font
Unicode::UnicodeChar ellipsisChar; // Ellipsis Character for the font
};
class BinaryFont : public GeneratedFont
{
public:
BinaryFont(const struct touchgfx::BinaryFontData* data)
: GeneratedFont((const GlyphNode*)((const uint8_t*)data + data->offsetToTable),
data->numberOfGlyphs,
data->fontHeight,
data->baseline,
data->pixAboveTop,
data->pixBelowBottom,
data->bitsPerPixel,
data->byteAlignRow,
data->maxLeft,
data->maxRight,
0,
(const KerningNode*)((const uint8_t*)data + data->offsetToKerning),
data->fallbackChar,
data->ellipsisChar,
(data->offsetToGSUB == 0) ? 0 : (const uint16_t*)((const uint8_t*)data + data->offsetToGSUB),
0),
glyphData((const uint8_t*)data + data->offsetToGlyphs)
{
if (data->offsetToArabicTable > 0)
{
setupContextualTable(data);
}
}
BinaryFont()
: GeneratedFont()
{
}
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const
{
const uint8_t* data = (const uint8_t*)glyphData;
return &(data[glyph->dataOffset]);
}
protected:
const uint8_t* glyphData;
FontContextualFormsTable contextualForms;
private:
typedef const Unicode::UnicodeChar (*array5ptr)[5];
typedef const Unicode::UnicodeChar (*array4ptr)[4];
void setupContextualTable(const struct touchgfx::BinaryFontData* data)
{
const uint16_t* const base = (const uint16_t*)(((const uint8_t*)data) + data->offsetToArabicTable);
// First elements in binary font are offsets to arrays in 16bit words
contextualForms.contextualForms4Long = (array5ptr)(base + base[0]);
contextualForms.contextualForms3Long = (array5ptr)(base + base[1]);
contextualForms.contextualForms2Long = (array5ptr)(base + base[2]);
contextualForms.contextualForms0621_063a = (array4ptr)(base + base[3]);
contextualForms.contextualForms0641_064a = (array4ptr)(base + base[4]);
contextualForms.contextualForms06XX = (array5ptr)(base + base[5]);
contextualForms.contextualForms4LongSize = base[6];
contextualForms.contextualForms3LongSize = base[7];
contextualForms.contextualForms2LongSize = base[8];
contextualForms.contextualForms06XXSize = base[9];
arabicTable = &contextualForms;
}
};
} // namespace touchgfx
#endif // TOUCHGFX_GENERATEDFONT_HPP