2018-07-05 08:55:09 +00:00
|
|
|
#include "lib/stb/stb_truetype.h"
|
2017-02-03 23:16:30 +00:00
|
|
|
#include <stdint.h>
|
2018-01-23 02:49:45 +00:00
|
|
|
#include <stdbool.h>
|
2017-01-30 02:37:56 +00:00
|
|
|
|
2017-02-19 09:54:58 +00:00
|
|
|
#pragma once
|
|
|
|
|
2017-07-14 16:53:05 +00:00
|
|
|
#define GLYPH_PADDING 1
|
|
|
|
|
2019-04-05 11:27:48 +00:00
|
|
|
struct Blob;
|
|
|
|
struct TextureData;
|
|
|
|
|
2019-04-05 11:58:29 +00:00
|
|
|
typedef struct Rasterizer {
|
2018-07-05 08:55:09 +00:00
|
|
|
stbtt_fontinfo font;
|
2019-04-05 11:27:48 +00:00
|
|
|
struct Blob* blob;
|
2019-01-12 06:37:54 +00:00
|
|
|
float size;
|
2018-07-05 08:55:09 +00:00
|
|
|
float scale;
|
2018-01-23 02:49:45 +00:00
|
|
|
int glyphCount;
|
2017-02-19 09:54:58 +00:00
|
|
|
int height;
|
2018-01-23 02:49:45 +00:00
|
|
|
int advance;
|
2017-03-16 08:12:32 +00:00
|
|
|
int ascent;
|
|
|
|
int descent;
|
2018-01-22 16:28:33 +00:00
|
|
|
} Rasterizer;
|
2017-02-19 09:54:58 +00:00
|
|
|
|
|
|
|
typedef struct {
|
2019-05-26 19:51:25 +00:00
|
|
|
uint32_t x;
|
|
|
|
uint32_t y;
|
2019-05-21 03:35:07 +00:00
|
|
|
uint32_t w;
|
|
|
|
uint32_t h;
|
|
|
|
uint32_t tw;
|
|
|
|
uint32_t th;
|
|
|
|
int32_t dx;
|
|
|
|
int32_t dy;
|
|
|
|
int32_t advance;
|
2019-04-05 11:27:48 +00:00
|
|
|
struct TextureData* data;
|
2017-02-19 09:54:58 +00:00
|
|
|
} Glyph;
|
|
|
|
|
2019-04-05 11:27:48 +00:00
|
|
|
Rasterizer* lovrRasterizerInit(Rasterizer* rasterizer, struct Blob* blob, float size);
|
2018-12-19 08:25:20 +00:00
|
|
|
#define lovrRasterizerCreate(...) lovrRasterizerInit(lovrAlloc(Rasterizer), __VA_ARGS__)
|
2018-02-26 08:59:03 +00:00
|
|
|
void lovrRasterizerDestroy(void* ref);
|
2018-01-23 02:49:45 +00:00
|
|
|
bool lovrRasterizerHasGlyph(Rasterizer* fontData, uint32_t character);
|
|
|
|
bool lovrRasterizerHasGlyphs(Rasterizer* fontData, const char* str);
|
2018-01-22 16:28:33 +00:00
|
|
|
void lovrRasterizerLoadGlyph(Rasterizer* fontData, uint32_t character, Glyph* glyph);
|
2019-05-21 03:35:07 +00:00
|
|
|
int32_t lovrRasterizerGetKerning(Rasterizer* fontData, uint32_t left, uint32_t right);
|