83 lines
2.9 KiB
C++
83 lines
2.9 KiB
C++
// Copyright (c) 2022 Dominic Masters
|
|
//
|
|
// This software is released under the MIT License.
|
|
// https://opensource.org/licenses/MIT
|
|
|
|
#pragma once
|
|
#include "Font.hpp"
|
|
|
|
namespace Dawn {
|
|
/** Which character (ASCII) to start the font from */
|
|
#define TRUETYPE_FIRST_CHAR 32
|
|
|
|
/** How many characters (after the first char) to generate */
|
|
#define TRUETYPE_NUM_CHARS 96
|
|
|
|
/** Refer to STBTT docs for OpenGL Fill Mode v d3d Fill Modes */
|
|
#define TRUETYPE_FILL_MODE 0
|
|
|
|
typedef stbtt_bakedchar truetypechar_t;
|
|
typedef stbtt_aligned_quad truetypequad_t;
|
|
|
|
class TrueTypeFont : public Font {
|
|
protected:
|
|
/**
|
|
* Calculate the quad information for a given character.
|
|
*
|
|
* @param font Font to get the character from.
|
|
* @param quad Pointer to the quad to store the quad information in.
|
|
* @param x Pointer to the X position for the quad.
|
|
* @param y Pointer to the Y position for the quad.
|
|
* @param c Character to get the quad and position information for.
|
|
*/
|
|
void bakeQuad(truetypequad_t *quad, float_t *x, float_t *y, char c);
|
|
|
|
/**
|
|
* Returns the font scale to use for rendering your desired font size at a
|
|
* font size that is different than the precompiled font size for this
|
|
* true type font. For example, let's say you render your font size at 36
|
|
* when you are precompiling it, but rather than creating a new font just
|
|
* to add a size 24, you can instead use this method to get the scale to
|
|
* use to downscale your font to match.
|
|
*
|
|
* @param font TrueType font to get the scale of.
|
|
* @param fontSize Font size you desire.
|
|
* @return The scale used to get the font size that will match.
|
|
*/
|
|
float_t getScale(float_t fontSize);
|
|
|
|
/**
|
|
* Returns the size of a space character for a given font.
|
|
*
|
|
* @param fontSize Font size of the font to get the space size for.
|
|
* @return The size of the space character.
|
|
*/
|
|
float_t getSpaceSize(float_t fontSize);
|
|
|
|
/**
|
|
* Returns the initial line height of a font.
|
|
*
|
|
* @param fontSize Font size for the font to get the line height of.
|
|
* @return The line height initial value.
|
|
*/
|
|
float_t getInitialLineHeight(float_t fontSize);
|
|
|
|
public:
|
|
Texture texture;
|
|
int32_t fontSize;
|
|
truetypechar_t characterData[TRUETYPE_NUM_CHARS];
|
|
|
|
void buffer(
|
|
std::string text,
|
|
float_t fontSize,
|
|
float_t maxWidth,
|
|
Mesh *mesh,
|
|
struct FontMeasure *info
|
|
) override;
|
|
bool_t isReady() override;
|
|
Texture * getTexture() override;
|
|
void draw(Mesh *mesh, int32_t startCharacter, int32_t length) override;
|
|
float_t getLineHeight(float_t fontSize) override;
|
|
float_t getDefaultFontSize() override;
|
|
};
|
|
} |