diff options
Diffstat (limited to ':w')
| -rw-r--r-- | :w | 53 |
1 files changed, 53 insertions, 0 deletions
@@ -0,0 +1,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 |
