summaryrefslogtreecommitdiff
path: root/:w
diff options
context:
space:
mode:
Diffstat (limited to ':w')
-rw-r--r--:w53
1 files changed, 53 insertions, 0 deletions
diff --git a/:w b/:w
new file mode 100644
index 0000000..f1569bf
--- /dev/null
+++ b/:w
@@ -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