summaryrefslogtreecommitdiff
path: root/src/ui/text.h
blob: 864173e0bd31137346948fb1f0dc259796e72015 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#pragma once

#include <the_Foundation/rect.h>
#include <the_Foundation/string.h>

#include <SDL_render.h>

enum iFontId {
    default_FontId,
    defaultMonospace_FontId,
    regular_FontId,
    monospace_FontId,    
    monospaceSmall_FontId,
    medium_FontId,
    italic_FontId,
    bold_FontId,
    mediumBold_FontId,
    largeBold_FontId,
    hugeBold_FontId,
    largeLight_FontId,
    /* symbol fonts */
    defaultSymbols_FontId,
    symbols_FontId,
    mediumSymbols_FontId,
    largeSymbols_FontId,
    hugeSymbols_FontId,
    smallSymbols_FontId,
    defaultEmoji_FontId,
    emoji_FontId,
    mediumEmoji_FontId,
    largeEmoji_FontId,
    hugeEmoji_FontId,
    smallEmoji_FontId,
    max_FontId,
    /* Meta: */
    fromSymbolsToEmojiOffset_FontId = 6,
    /* UI fonts: */
    uiLabel_FontId     = default_FontId,
    uiShortcuts_FontId = default_FontId,
    uiInput_FontId     = defaultMonospace_FontId,
    /* Document fonts: */
    paragraph_FontId         = regular_FontId,
    firstParagraph_FontId    = medium_FontId,
    preformatted_FontId      = monospace_FontId,
    preformattedSmall_FontId = monospaceSmall_FontId,
    quote_FontId             = italic_FontId,
    heading1_FontId          = hugeBold_FontId,
    heading2_FontId          = largeBold_FontId,
    heading3_FontId          = medium_FontId,
    banner_FontId            = largeLight_FontId,
};

extern int gap_Text; /* affected by content font size */

void    init_Text           (SDL_Renderer *);
void    deinit_Text         (void);

void    setContentFontSize_Text (float fontSizeFactor); /* affects all except `default*` fonts */
void    resetFonts_Text     (void);

int     lineHeight_Text     (int fontId);
iInt2   measure_Text        (int fontId, const char *text);
iInt2   measureRange_Text   (int fontId, iRangecc text);
iRect   visualBounds_Text   (int fontId, iRangecc text);
iInt2   advance_Text        (int fontId, const char *text);
iInt2   advanceN_Text       (int fontId, const char *text, size_t n); /* `n` in characters */
iInt2   advanceRange_Text   (int fontId, iRangecc text);

iInt2   tryAdvance_Text         (int fontId, iRangecc text, int width, const char **endPos);
iInt2   tryAdvanceNoWrap_Text   (int fontId, iRangecc text, int width, const char **endPos);

enum iAlignment {
    left_Alignment,
    center_Alignment,
    right_Alignment,
};

void    draw_Text           (int fontId, iInt2 pos, int color, const char *text, ...);
void    drawAlign_Text      (int fontId, iInt2 pos, int color, enum iAlignment align, const char *text, ...);
void    drawCentered_Text   (int fontId, iRect rect, iBool alignVisual, int color, const char *text, ...);
void    drawString_Text     (int fontId, iInt2 pos, int color, const iString *text);
void    drawRange_Text      (int fontId, iInt2 pos, int color, iRangecc text);

SDL_Texture *   glyphCache_Text     (void);

/*-----------------------------------------------------------------------------------------------*/

iDeclareType(TextBuf)
iDeclareTypeConstructionArgs(TextBuf, int font, const char *text)

struct Impl_TextBuf {
    SDL_Texture *texture;
    iInt2        size;
};

void    draw_TextBuf        (const iTextBuf *, iInt2 pos, int color);