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

#ifndef UI_ELEMENTS_H
#define UI_ELEMENTS_H

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

// Sure about this value
static const int MIN_FONT_SIZE = 10;
// Unsure about this value
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);

// ========== BUTTON ==========

typedef struct {
    Scene *parent;
    void (*OnClick)(Scene *);
    Texture *atlas;
    Rectangle textrueLocation;
    Rectangle previousFramePosition;
} Button;

void UpdateButton(Button *btn);
void DrawButton(Button *btn, Rectangle *location);

// ========== 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);
TextArea *CreateTextAreaFromText(TextAreaDisplayParams *DisplayParams, char *text);

void DrawTextArea(TextArea *ta, Rectangle rec);
void UpdateTextArea(TextArea *ta, Rectangle rec);

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

/// Fills pane1 and pane2 with the panes location
/// proporion_h and proportion_v are the scale ratio of the panes in horizontal
/// and vertical orientation
void GetPanesSplit(Rectangle *pane1, Rectangle *pane2, Rectangle body, float proportion_h, float proportion_v);

#endif // UI_ELEMENTS_H