summaryrefslogtreecommitdiff
path: root/src/ui_elements/UI.h
blob: f461cf58502041ddf9a9367495321dd7034d1a97 (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
#include <raylib.h>
#include <stddef.h>

#ifndef UI_ELEMENTS_H
#define UI_ELEMENTS_H

static const float SCROLL_SENC = 10;
static const float TAB_WIDTH = 4;

static const int MIN_FONT_SIZE = 10;
static const int MAX_FONT_SIZE = 100;

void DrawRecBordered(Rectangle rec, Color bg, Color border_color, int border_width);
void DrawTextInRec(Rectangle rec, char *text, Font *font, int height, Color color, float padding, int *scroll);
float MeasureChar(Font *font, int height, char symbol);
bool IsMouseInRec(Rectangle rec);

// ========== TEXT EDITOR ==========

static const size_t DEFAULT_TEXT_NODE_SIZE = 256;

typedef struct {
    void *PrevNode;
    void *NextNode;
    char *text;
    size_t len;
    size_t cap;
} TextNode;


typedef struct {
    Font *font;
    int font_size;
    int spacing;

    int scroll_h;
    int scroll_v;

    /// DO NOT MODIFY THAT! It's for internal use only
    int _area_width;
    /// DO NOT MODIFY THAT! It's for internal use only
    int _area_height;
} TextAreaDisplayParams;

typedef struct {
    TextNode *StartNode;
    /// For the quick access
    TextNode *CurrentNode;
    size_t NodeLenth;

    Vector2 CursorPosition;
    TextAreaDisplayParams *DisplayParams;
} TextArea;

TextArea *CreateTextArea(TextAreaDisplayParams *DisplayParams);
void DrawTextArea(TextArea *ta, Rectangle rec);
void InsertChar(TextArea *ta, char new_char);
void DeleteChar(TextArea *ta);

void HandleKeyboard(TextArea *ta);
char *GetText(TextArea *ta);
void FreeTextArea(TextArea *ta);

#endif // UI_ELEMENTS_H