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
|
#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;
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 {
TextNode *StartNode;
/// For the quick access
TextNode *CurrentNode;
size_t NodeLenth;
Vector2 CursorPosition;
} TextArea;
typedef struct {
Font *font;
int scroll_h;
int scroll_v;
} TextAreaDisplayParams;
TextArea *CreateTextArea();
void FreeTextArea(TextArea *ta);
void DrawTextArea(TextArea *ta, Rectangle rec, Font *font, int height, int spacing, int *scroll);
void InsertChar(TextArea *ta, char new_char);
void DeleteChar(TextArea *ta);
void HandleKeyboard(TextArea *ta);
void MoveCursorRight(TextArea *ta);
void MoveCursorLeft(TextArea *ta);
void MoveCursorDown(TextArea *ta);
#endif // UI_ELEMENTS_H
|