vn/code/vn_font.h

139 lines
3.9 KiB
C

/* date = May 7th 2023 10:16 am */
#ifndef VN_FONT_H
#define VN_FONT_H
enum font_id
{
Font_Regular,
Font_Bold,
Font_Monospace,
Font_MonospaceOblique,
Font_Fancy,
Font_Icons,
Font_Count,
};
#define FontIcon_None 0x0000
#define FontIcon_Pencil 0xe800
#define FontIcon_Forward 0xe801
#define FontIcon_Book 0xe802
#define FontIcon_FolderOpen 0xe803
#define FontIcon_Wrench 0xe804
#define FontIcon_CW 0xe805
#define FontIcon_CCW 0xe806
#define FontIcon_ArrowsCW 0xe807
#define FontIcon_ResizeVertical 0xe808
#define FontIcon_ResizeHorizontal 0xe809
#define FontIcon_Play 0xe80a
#define FontIcon_Stop 0xe80b
#define FontIcon_Floppy 0xe80c
#define FontIcon_Pause 0xe80d
#define FontIcon_Folder 0xe80e
#define FontIcon_Cog 0xe80f
#define FontIcon_Attention 0xe810
#define FontIcon_Cancel 0xe811
#define FontIcon_Filter 0xf0b0
#define FontIcon_Menu 0xf0c9
#define FontIcon_CircleEmpty 0xf10c
#define FontIcon_Circle 0xf111
#define FontIcon_Reply 0xf112
#define FontIcon_Terminal 0xf120
#define FontIcon_Ellipsis 0xf141
#define FontIcon_Document 0xe819
#define FontIcon_DocumentText 0xf15c
#define FontIcon_Eyedropper 0xf1fb
#define FontIcon_WindowMaximize 0xf2d0
#define FontIcon_WindowMinimize 0xf2d1
#define FontIcon_WindowRestore 0xf2d2
#define FontIcon_WindowClose 0xf2d4
#define FontIcon_DownDir 0xe812
#define FontIcon_UpDir 0xe813
#define FontIcon_LeftDir 0xe814
#define FontIcon_RightDir 0xe815
#define FontIcon_TextAlignLeft 0xe816
#define FontIcon_TextAlignCenter 0xe817
#define FontIcon_TextAlignRight 0xe818
#define FontIcon_DocumentInverted 0xf15b
#define FontIcon_DocumentInvertedText 0xf15c
#define FontIcon_DocumentFileImage 0xf1c5
#define FontIcon_DocumentFileAudio 0xf1c7
#define FontIcon_DocumentFileCode 0xf1c9
#define FontIcon_UserPlus 0xf234
#define FontIcon_UserTimes 0xf235
#define FontIcon_History 0xf1da
#define FontIcon_Trash 0xf1f8
#define FontIcon_Debug 0xf188
#define FontIcon_Gamepad 0xf11b
#define FontIcon_Paste 0xf0ea
#define FontIcon_Cut 0xe825
#define FontIcon_Lock 0xe821
#define FontIcon_LockOpen 0xe822
#define FontIcon_Pin 0xe820
#define FontIcon_User 0xe81e
#define FontIcon_Users 0xe81f
struct glyph
{
glyph *LRUNext;
glyph *LRUPrev;
font_id Font;
u32 Codepoint;
r32 Size;
s32 Subpixel;
v2_s32 P0;
v2_s32 P1;
v2_r32 Offset;
r32 Advance;
};
#define STB_TRUETYPE_IMPLEMENTATION
#include "third_party/stb_truetype.h"
struct loaded_font
{
stbtt_fontinfo Info;
string Data;
s32 Ascent;
s32 Descent;
s32 LineGap;
};
struct glyph_atlas
{
arena *Arena;
s32 MaxGlyphCount;
s32 GlyphsUsed;
glyph *Glyphs;
glyph *LRUFirst;
glyph *LRULast;
vn_render_commands *RenderCommands;
render_handle Texture;
u8 *BitmapBuffer;
s32 BitmapSize;
s32 GlyphSize;
loaded_font Fonts[Font_Count];
};
////////////////////////////////
//~ sixten: Font Atlas Functions
inline s32 F_SubpixelSegmentFromP(r32 Value);
static void F_RasterizeGlyph(glyph_atlas *Atlas, font_id Font, glyph *Glyph, u32 Codepoint, r32 Size, s32 Subpixel);
static glyph *F_GlyphFromAtlas(glyph_atlas *Atlas, font_id Font, u32 Codepoint, r32 Size, s32 Subpixel);
static loaded_font F_CreateFontFromFile(arena *Arena, string Filepath);
static glyph_atlas *F_CreateGlyphAtlas(vn_render_commands *RenderCommands, s32 BitmapSize, s32 GlyphSize);
#endif //VN_FONT_H