annotate postdog/main.c @ 213:60918f88070e

Simple change regarding to accessibility.
author MrJuneJune <me@mrjunejune.com>
date Sun, 15 Feb 2026 21:39:43 -0800
parents 0face9898d04
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1 #include <stdio.h>
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2 #include <stdlib.h>
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
3 #include <string.h>
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
4 #include <time.h>
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
5 #include <sys/stat.h>
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
6 #include <uv.h>
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 57
diff changeset
7
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
8 #ifdef _WIN32
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
9 #include <direct.h>
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
10 #include <io.h>
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
11 #define mkdir(path, mode) _mkdir(path)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
12 #define access _access
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
13 #define F_OK 0
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
14 #else
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
15 #include <sys/stat.h>
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
16 #include <dirent.h>
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
17 #include <unistd.h>
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
18 #endif
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
19
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
20
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
21 #include "dowa/dowa.h"
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
22 #include "seobeo/seobeo.h"
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
23 #include "third_party/raylib/include/raylib.h"
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
24 #include "third_party/raylib/include/raygui.h"
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
25 #include "third_party/raylib/custom.h"
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
26
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
27 #ifndef POSTDOG_PATHS
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
28 #define POSTDOG_PATHS "/home/june/zenbu/postdog/history"
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
29 #endif
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
30
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
31 #define SCREEN_WIDTH 1280
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
32 #define SCREEN_HEIGHT 780
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
33 #define MAX_SCROLL_HEIGHT 10000
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
34
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
35 #define HEADER_BUFFER_LENGTH 1024 * 4
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
36 #define DEFAULT_TEXT_BUFFER_LENGTH 1024 * 4
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
37 #define URL_TEXT_BUFFER_LENGTH 1024 * 10
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
38 #define BODY_BUFFER_LENGTH 1024 * 1024 * 5
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
39 #define RESULT_BUFFER_LENGTH 1024 * 1024 * 5
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
40
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
41 // #define URL_TEXT_DEFAULT "https://httpbin.org/get"
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
42 #define URL_TEXT_DEFAULT "wss://mrjunejune.com/echo"
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
43 #define HEADER_TEXT_DEFAULT "Content-Type: application/json"
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
44 #define BODY_TEXT_DEFAULT ""
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
45 #define GET_PARAM_TEXT_DEFAULT "foo bar"
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
46
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
47 // ============================================================================
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
48 // TextArea Component
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
49 // ============================================================================
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
50
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
51 #define TEXT_SIZE_DEFAULT 20 // used to calcualte spacing
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
52 #define TEXT_AREA_LINE_HEIGHT GuiGetStyle(DEFAULT, TEXT_SIZE)
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
53 #define TEXT_AREA_PADDING 30
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
54 #define TEXT_AREA_CURSOR_WIDTH 2
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
55 #define TEXT_AREA_MAX_UNDO_STATES 64
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
56 #define TEXT_AREA_MAX_INSTANCES 8
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
57
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
58 typedef struct {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
59 char *text;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
60 int cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
61 int selection_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
62 int selection_end;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
63 } TextAreaUndoEntry;
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
64
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
65 // Cached line info for fast rendering
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
66 typedef struct {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
67 int start_pos; // Character position where this line starts
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
68 int end_pos; // Character position where this line ends (exclusive)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
69 int char_count; // Number of characters in this line
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
70 } LineInfo;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
71
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
72 typedef struct {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
73 int id; // Unique ID for this text area
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
74 int cursor_pos; // Current cursor position in text
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
75 int selection_start; // Selection start (-1 if no selection)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
76 int selection_end; // Selection end (-1 if no selection)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
77 float scroll_offset_y; // Vertical scroll offset
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
78 float scroll_offset_x; // Horizontal scroll offset (for non-wrap mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
79 boolean is_selecting; // Currently dragging to select
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
80 boolean is_initialized; // State has been initialized
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
81
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
82 // Undo history
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
83 TextAreaUndoEntry *undo_stack; // Dowa array of undo entries
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
84 int undo_index; // Current position in undo stack
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
85
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
86 // Internal tracking
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
87 double last_blink_time;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
88 boolean cursor_visible;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
89
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
90 // Line cache for fast rendering
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
91 LineInfo *line_cache; // Dowa array of line info
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
92 int cached_text_len; // Text length when cache was built
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
93 int cached_text_hash; // Simple hash to detect text changes
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
94 float cached_content_width; // Content width when cache was built
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
95 boolean cache_valid; // Whether cache is valid
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
96 } TextAreaState;
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
97
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
98 static TextAreaState g_text_area_states[TEXT_AREA_MAX_INSTANCES] = {0};
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
99 static int g_text_area_state_count = 0;
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
100 static char *g_clipboard_text = NULL;
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
101 static Dowa_Arena *g_text_area_arena = NULL;
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
102
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
103 // Helper functions
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
104 static int TA_Min_Int(int a, int b) { return a < b ? a : b; }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
105 static int TA_Max_Int(int a, int b) { return a > b ? a : b; }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
106 static float TA_Min_Float(float a, float b) { return a < b ? a : b; }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
107 static float TA_Max_Float(float a, float b) { return a > b ? a : b; }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
108
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
109 // Sanitize text for display - replace tabs with spaces, remove other non-printable chars
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
110 static void SanitizeTextForDisplay(char *text) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
111 if (!text) return;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
112 char *read = text;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
113 char *write = text;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
114 while (*read) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
115 if (*read == '\t') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
116 // Replace tab with 2 spaces
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
117 *write++ = ' ';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
118 *write++ = ' ';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
119 } else if (*read == '\n' || *read == '\r') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
120 // Keep newlines and carriage returns
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
121 *write++ = *read;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
122 } else if ((unsigned char)*read >= 32 && (unsigned char)*read < 127) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
123 // Keep printable ASCII
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
124 *write++ = *read;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
125 } else if ((unsigned char)*read >= 128) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
126 // Keep UTF-8 characters (high bit set)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
127 *write++ = *read;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
128 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
129 // Skip other non-printable characters
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
130 read++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
131 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
132 *write = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
133 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
134
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
135 static TextAreaState* GetTextAreaState(int id) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
136 for (int i = 0; i < g_text_area_state_count; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
137 if (g_text_area_states[i].id == id && g_text_area_states[i].is_initialized) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
138 return &g_text_area_states[i];
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
139 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
140 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
141 return NULL;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
142 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
143
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
144 static TextAreaState* CreateTextAreaState(int id) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
145 // First, check if there's an existing slot with this ID (possibly reset)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
146 for (int i = 0; i < g_text_area_state_count; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
147 if (g_text_area_states[i].id == id) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
148 TextAreaState *state = &g_text_area_states[i];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
149 // Reuse this slot - clear it but keep the id
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
150 memset(state, 0, sizeof(TextAreaState));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
151 state->id = id;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
152 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
153 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
154 state->undo_index = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
155 state->cursor_visible = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
156 state->is_initialized = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
157 return state;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
158 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
159 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
160
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
161 // No existing slot, create a new one
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
162 if (g_text_area_state_count >= TEXT_AREA_MAX_INSTANCES) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
163 return &g_text_area_states[0]; // Reuse first slot as fallback
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
164 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
165
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
166 TextAreaState *state = &g_text_area_states[g_text_area_state_count++];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
167 memset(state, 0, sizeof(TextAreaState));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
168 state->id = id;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
169 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
170 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
171 state->undo_index = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
172 state->cursor_visible = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
173 state->is_initialized = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
174 return state;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
175 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
176
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
177 static void GetLineAndColumn(const char *text, int pos, int *out_line, int *out_column) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
178 int line = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
179 int column = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
180 for (int i = 0; i < pos && text[i] != '\0'; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
181 if (text[i] == '\n') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
182 line++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
183 column = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
184 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
185 column++;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
186 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
187 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
188 *out_line = line;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
189 *out_column = column;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
190 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
191
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
192 static int GetPosFromLineColumn(const char *text, int line, int column) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
193 int current_line = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
194 int current_col = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
195 int i = 0;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
196
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
197 while (text[i] != '\0') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
198 if (current_line == line && current_col == column) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
199 return i;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
200 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
201 if (text[i] == '\n') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
202 if (current_line == line) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
203 return i;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
204 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
205 current_line++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
206 current_col = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
207 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
208 current_col++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
209 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
210 i++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
211 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
212 return i;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
213 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
214
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
215 static int GetLineStart(const char *text, int pos) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
216 int i = pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
217 while (i > 0 && text[i - 1] != '\n') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
218 i--;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
219 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
220 return i;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
221 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
222
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
223 static int GetLineEnd(const char *text, int pos) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
224 int i = pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
225 int len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
226 while (i < len && text[i] != '\n') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
227 i++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
228 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
229 return i;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
230 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
231
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
232 static int CountLines(const char *text) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
233 int count = 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
234 for (int i = 0; text[i] != '\0'; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
235 if (text[i] == '\n') count++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
236 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
237 return count;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
238 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
239
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
240 // Simple hash to detect text changes (djb2)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
241 static int SimpleTextHash(const char *text, int len) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
242 int hash = 5381;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
243 int sample_count = len < 100 ? len : 100; // Sample first 100 chars
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
244 for (int i = 0; i < sample_count; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
245 hash = ((hash << 5) + hash) + text[i];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
246 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
247 // Also sample some chars from middle and end
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
248 if (len > 200) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
249 for (int i = len/2; i < len/2 + 50 && i < len; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
250 hash = ((hash << 5) + hash) + text[i];
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
251 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
252 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
253 return hash;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
254 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
255
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
256 // Build line cache - O(n) once, then O(1) for rendering
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
257 static void BuildLineCache(TextAreaState *state, const char *text, float content_width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
258 int font_size, boolean wrap, Dowa_Arena *arena) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
259 int text_len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
260
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
261 // Check if cache is still valid
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
262 int new_hash = SimpleTextHash(text, text_len);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
263 if (state->cache_valid &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
264 state->cached_text_len == text_len &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
265 state->cached_text_hash == new_hash &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
266 state->cached_content_width == content_width) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
267 return; // Cache is valid, no need to rebuild
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
268 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
269
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
270 // Clear old cache
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
271 if (state->line_cache) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
272 Dowa_Array_Free(state->line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
273 state->line_cache = NULL;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
274 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
275
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
276 // Approximate character width (for non-monospace, use average)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
277 float avg_char_width = font_size * 0.6f; // Reasonable approximation for most fonts
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
278 int max_chars_per_line = (int)(content_width / avg_char_width);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
279 if (max_chars_per_line < 1) max_chars_per_line = 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
280
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
281 Dowa_Array_Reserve(state->line_cache, text_len / max_chars_per_line + 10);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
282
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
283 int line_start = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
284 int i = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
285
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
286 while (i <= text_len) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
287 boolean is_end = (i == text_len);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
288 boolean is_newline = (!is_end && text[i] == '\n');
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
289 int chars_in_line = i - line_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
290
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
291 // Check if we need to wrap (based on character count approximation)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
292 boolean should_wrap = wrap && !is_end && !is_newline &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
293 chars_in_line >= max_chars_per_line;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
294
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
295 if (is_end || is_newline || should_wrap) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
296 LineInfo line = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
297 .start_pos = line_start,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
298 .end_pos = i,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
299 .char_count = chars_in_line
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
300 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
301 Dowa_Array_Push(state->line_cache, line);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
302
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
303 if (is_newline) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
304 line_start = i + 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
305 } else if (should_wrap) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
306 // Try to find a space to wrap at
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
307 int wrap_pos = i;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
308 for (int j = i - 1; j > line_start && j > i - 20; j--) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
309 if (text[j] == ' ') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
310 wrap_pos = j;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
311 break;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
312 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
313 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
314 // Update the last line entry with correct end
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
315 state->line_cache[Dowa_Array_Length(state->line_cache) - 1].end_pos = wrap_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
316 state->line_cache[Dowa_Array_Length(state->line_cache) - 1].char_count = wrap_pos - line_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
317 line_start = (text[wrap_pos] == ' ') ? wrap_pos + 1 : wrap_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
318 i = line_start - 1; // Will be incremented at end of loop
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
319 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
320 line_start = i + 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
321 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
322 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
323 i++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
324 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
325
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
326 // Ensure at least one line exists
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
327 if (Dowa_Array_Length(state->line_cache) == 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
328 LineInfo empty_line = { .start_pos = 0, .end_pos = 0, .char_count = 0 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
329 Dowa_Array_Push(state->line_cache, empty_line);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
330 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
331
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
332 // Update cache metadata
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
333 state->cached_text_len = text_len;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
334 state->cached_text_hash = new_hash;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
335 state->cached_content_width = content_width;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
336 state->cache_valid = TRUE;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
337 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
338
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
339 static int MeasureTextRange(const char *text, int start, int end, int font_size) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
340 if (start >= end) return 0;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
341
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
342 char temp[1024];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
343 int len = TA_Min_Int(end - start, 1023);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
344 strncpy(temp, text + start, len);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
345 temp[len] = '\0';
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
346
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
347 return MeasureTextEx(GuiGetFont(), temp, font_size, TEXT_SIZE_DEFAULT/GuiGetStyle(DEFAULT, TEXT_SIZE)).x;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
348 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
349
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
350 static int GetCharIndexFromPos(const char *text, Rectangle bounds, Vector2 pos,
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
351 boolean wrap, float scroll_y, int font_size, int line_height) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
352 if (!text || strlen(text) == 0) return 0;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
353
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
354 float content_x = bounds.x + TEXT_AREA_PADDING;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
355 float content_y = bounds.y + TEXT_AREA_PADDING - scroll_y;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
356 float content_width = bounds.width - TEXT_AREA_PADDING * 2;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
357
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
358 int text_len = strlen(text);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
359
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
360 float click_line_y = (pos.y - content_y) / line_height;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
361 int target_visual_line = (int)click_line_y;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
362 if (target_visual_line < 0) target_visual_line = 0;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
363
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
364 int current_visual_line = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
365 int i = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
366 int line_char_start = 0;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
367
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
368 while (i <= text_len) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
369 boolean is_newline = (i < text_len && text[i] == '\n');
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
370
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
371 if (wrap && i > line_char_start) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
372 int line_width = MeasureTextRange(text, line_char_start, i, font_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
373 if (line_width > content_width && i > line_char_start + 1) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
374 int wrap_pos = i - 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
375 for (int j = i - 1; j > line_char_start; j--) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
376 if (text[j] == ' ') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
377 wrap_pos = j;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
378 break;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
379 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
380 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
381
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
382 if (current_visual_line == target_visual_line) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
383 float click_x = pos.x - content_x;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
384 int best_pos = line_char_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
385 float best_dist = 99999;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
386
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
387 for (int k = line_char_start; k <= wrap_pos; k++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
388 int char_x = MeasureTextRange(text, line_char_start, k, font_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
389 float dist = (float)(click_x - char_x);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
390 if (dist < 0) dist = -dist;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
391 if (dist < best_dist) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
392 best_dist = dist;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
393 best_pos = k;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
394 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
395 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
396 return best_pos;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
397 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
398
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
399 current_visual_line++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
400 line_char_start = (text[wrap_pos] == ' ') ? wrap_pos + 1 : wrap_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
401 i = line_char_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
402 continue;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
403 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
404 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
405
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
406 if (is_newline || i == text_len) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
407 if (current_visual_line == target_visual_line || i == text_len) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
408 float click_x = pos.x - content_x;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
409 int line_end = i;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
410 int best_pos = line_char_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
411 float best_dist = 99999;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
412
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
413 for (int k = line_char_start; k <= line_end; k++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
414 int char_x = MeasureTextRange(text, line_char_start, k, font_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
415 float dist = (float)(click_x - char_x);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
416 if (dist < 0) dist = -dist;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
417 if (dist < best_dist) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
418 best_dist = dist;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
419 best_pos = k;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
420 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
421 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
422 return TA_Min_Int(best_pos, text_len);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
423 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
424
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
425 current_visual_line++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
426 line_char_start = i + 1;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
427 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
428
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
429 i++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
430 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
431
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
432 return text_len;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
433 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
434
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
435 // Get character index from mouse position using line cache
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
436 static int GetCharIndexFromPosWithCache(const char *text, Rectangle bounds, Vector2 pos,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
437 float scroll_y, int font_size, int line_height,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
438 LineInfo *line_cache) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
439 if (!text || strlen(text) == 0) return 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
440 if (!line_cache || Dowa_Array_Length(line_cache) == 0) return 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
441
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
442 float content_x = bounds.x + TEXT_AREA_PADDING;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
443 float content_y = bounds.y + TEXT_AREA_PADDING - scroll_y;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
444
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
445 int text_len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
446 int line_count = Dowa_Array_Length(line_cache);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
447
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
448 // Find which visual line was clicked
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
449 float click_line_y = (pos.y - content_y) / line_height;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
450 int target_line = (int)click_line_y;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
451 if (target_line < 0) target_line = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
452 if (target_line >= line_count) target_line = line_count - 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
453 if (target_line < 0) return 0; // Safety check
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
454
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
455 LineInfo *line = &line_cache[target_line];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
456
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
457 // Find character position within the line
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
458 float click_x = pos.x - content_x;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
459 if (click_x < 0) return line->start_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
460
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
461 // Linear search for the character closest to click position
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
462 int best_pos = line->start_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
463 float best_dist = 99999;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
464
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
465 for (int k = line->start_pos; k <= line->end_pos; k++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
466 int char_x = MeasureTextRange(text, line->start_pos, k, font_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
467 float dist = click_x - char_x;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
468 if (dist < 0) dist = -dist;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
469
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
470 if (dist < best_dist) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
471 best_dist = dist;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
472 best_pos = k;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
473 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
474 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
475
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
476 return TA_Min_Int(best_pos, text_len);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
477 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
478
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
479 // Get cursor position using line cache (fast O(log n) or O(n) worst case)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
480 static Vector2 GetCursorScreenPosFromCache(const char *text, int cursor_pos, Rectangle bounds,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
481 float scroll_y, int font_size, int line_height,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
482 LineInfo *line_cache) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
483 float content_x = bounds.x + TEXT_AREA_PADDING;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
484 float content_y = bounds.y + TEXT_AREA_PADDING - scroll_y;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
485
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
486 if (!text || cursor_pos == 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
487 return (Vector2){content_x, content_y};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
488 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
489 if (!line_cache || Dowa_Array_Length(line_cache) == 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
490 return (Vector2){content_x, content_y};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
491 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
492
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
493 int text_len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
494 cursor_pos = TA_Min_Int(cursor_pos, text_len);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
495
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
496 // Find which line contains the cursor
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
497 int line_count = Dowa_Array_Length(line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
498 for (int i = 0; i < line_count; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
499 LineInfo *line = &line_cache[i];
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
500
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
501 // Cursor is within this line or at the end of this line
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
502 if (cursor_pos >= line->start_pos && cursor_pos <= line->end_pos) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
503 float x = content_x + MeasureTextRange(text, line->start_pos, cursor_pos, font_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
504 float y = content_y + i * line_height;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
505 return (Vector2){x, y};
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
506 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
507 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
508
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
509 // Fallback: cursor at the end
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
510 int last_line = line_count > 0 ? line_count - 1 : 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
511 LineInfo *line = &line_cache[last_line];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
512 float x = content_x + MeasureTextRange(text, line->start_pos, cursor_pos, font_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
513 float y = content_y + last_line * line_height;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
514 return (Vector2){x, y};
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
515 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
516
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
517 static float GetContentHeight(const char *text, Rectangle bounds, boolean wrap,
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
518 int font_size, int line_height) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
519 if (!text || strlen(text) == 0) return line_height;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
520
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
521 float content_width = bounds.width - TEXT_AREA_PADDING * 2;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
522 int visual_lines = 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
523 int line_char_start = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
524 int text_len = strlen(text);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
525
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
526 for (int i = 0; i <= text_len; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
527 if (i == text_len || text[i] == '\n') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
528 visual_lines++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
529 line_char_start = i + 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
530 } else if (wrap) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
531 int line_width = MeasureTextRange(text, line_char_start, i + 1, font_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
532 if (line_width > content_width && i > line_char_start) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
533 int wrap_pos = i;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
534 for (int j = i; j > line_char_start; j--) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
535 if (text[j] == ' ') {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
536 wrap_pos = j;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
537 break;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
538 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
539 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
540 visual_lines++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
541 line_char_start = (text[wrap_pos] == ' ') ? wrap_pos + 1 : wrap_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
542 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
543 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
544 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
545
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
546 return visual_lines * line_height;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
547 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
548
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
549 static void PushUndoState(TextAreaState *state, const char *text, Dowa_Arena *arena) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
550 TextAreaUndoEntry entry;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
551 entry.text = Dowa_String_Copy_Arena((char*)text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
552 entry.cursor_pos = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
553 entry.selection_start = state->selection_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
554 entry.selection_end = state->selection_end;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
555
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
556 if (state->undo_index < (int)Dowa_Array_Length(state->undo_stack) - 1) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
557 dowa__header(state->undo_stack)->length = state->undo_index + 1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
558 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
559
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
560 Dowa_Array_Push_Arena(state->undo_stack, entry, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
561 state->undo_index = Dowa_Array_Length(state->undo_stack) - 1;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
562
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
563 if (Dowa_Array_Length(state->undo_stack) > TEXT_AREA_MAX_UNDO_STATES) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
564 for (int i = 0; i < (int)Dowa_Array_Length(state->undo_stack) - 1; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
565 state->undo_stack[i] = state->undo_stack[i + 1];
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
566 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
567 dowa__header(state->undo_stack)->length--;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
568 state->undo_index--;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
569 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
570 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
571
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
572 static boolean PerformUndo(TextAreaState *state, char *text, int text_size) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
573 if (state->undo_index <= 0) return FALSE;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
574
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
575 state->undo_index--;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
576 TextAreaUndoEntry *entry = &state->undo_stack[state->undo_index];
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
577
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
578 strncpy(text, entry->text, text_size - 1);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
579 text[text_size - 1] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
580 state->cursor_pos = entry->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
581 state->selection_start = entry->selection_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
582 state->selection_end = entry->selection_end;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
583
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
584 return TRUE;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
585 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
586
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
587 static boolean PerformRedo(TextAreaState *state, char *text, int text_size) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
588 if (state->undo_index >= (int)Dowa_Array_Length(state->undo_stack) - 1) return FALSE;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
589
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
590 state->undo_index++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
591 TextAreaUndoEntry *entry = &state->undo_stack[state->undo_index];
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
592
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
593 strncpy(text, entry->text, text_size - 1);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
594 text[text_size - 1] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
595 state->cursor_pos = entry->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
596 state->selection_start = entry->selection_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
597 state->selection_end = entry->selection_end;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
598
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
599 return TRUE;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
600 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
601
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
602 static void InsertTextAtCursor(char *text, int text_size, int cursor_pos,
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
603 const char *insert_text, int *new_cursor_pos) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
604 int text_len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
605 int insert_len = strlen(insert_text);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
606
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
607 if (text_len + insert_len >= text_size - 1) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
608 insert_len = text_size - 1 - text_len;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
609 if (insert_len <= 0) return;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
610 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
611
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
612 memmove(text + cursor_pos + insert_len,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
613 text + cursor_pos,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
614 text_len - cursor_pos + 1);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
615
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
616 memcpy(text + cursor_pos, insert_text, insert_len);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
617
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
618 *new_cursor_pos = cursor_pos + insert_len;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
619 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
620
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
621 static void DeleteTextRange(char *text, int start, int end) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
622 if (start >= end) return;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
623 int text_len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
624 if (start < 0) start = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
625 if (end > text_len) end = text_len;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
626
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
627 memmove(text + start, text + end, text_len - end + 1);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
628 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
629
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
630 static char* GetSelectedText(const char *text, int sel_start, int sel_end, Dowa_Arena *arena) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
631 if (sel_start < 0 || sel_end < 0 || sel_start >= sel_end) return NULL;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
632
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
633 int len = sel_end - sel_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
634 char *result = Dowa_Arena_Allocate(arena, len + 1);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
635 strncpy(result, text + sel_start, len);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
636 result[len] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
637 return result;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
638 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
639
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
640 boolean GuiTextArea(int id, Rectangle bounds, char *text, int text_size, boolean is_edit_mode,
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
641 boolean should_text_wrap, boolean readonly, Dowa_Arena *arena) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
642 boolean should_toggle_edit_mode = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
643
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
644 // Get or create state for this text area
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
645 TextAreaState *state = GetTextAreaState(id);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
646 if (!state) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
647 state = CreateTextAreaState(id);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
648 state->cursor_pos = readonly ? 0 : strlen(text); // Readonly starts at beginning
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
649 state->last_blink_time = GetTime();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
650 if (!readonly) PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
651 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
652
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
653 int text_len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
654 Vector2 mouse_pos = GetMousePosition();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
655 boolean mouse_in_bounds = CheckCollisionPointRec(mouse_pos, bounds);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
656
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
657 // Handle click to enter/exit edit mode (readonly still allows selection mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
658 if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
659 if (mouse_in_bounds && !is_edit_mode) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
660 should_toggle_edit_mode = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
661 } else if (!mouse_in_bounds && is_edit_mode) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
662 should_toggle_edit_mode = TRUE;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
663 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
664 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
665
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
666 // Content area - build/update line cache
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
667 float content_width = bounds.width - TEXT_AREA_PADDING * 2;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
668 BuildLineCache(state, text, content_width, GuiGetStyle(DEFAULT, TEXT_SIZE), should_text_wrap, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
669
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
670 // Calculate content height from cache (O(1))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
671 int total_lines = Dowa_Array_Length(state->line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
672 float content_height = total_lines * TEXT_AREA_LINE_HEIGHT;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
673 float visible_height = bounds.height - TEXT_AREA_PADDING * 2;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
674 float max_scroll = TA_Max_Float(0, content_height - visible_height);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
675
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
676 // Handle scrolling
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
677 float wheel = GetMouseWheelMove();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
678 if (mouse_in_bounds && wheel != 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
679 state->scroll_offset_y -= wheel * TEXT_AREA_LINE_HEIGHT * 3;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
680 state->scroll_offset_y = TA_Max_Float(0, TA_Min_Float(state->scroll_offset_y, max_scroll));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
681 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
682
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
683 if (is_edit_mode) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
684 boolean ctrl_pressed = IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_CONTROL) ||
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
685 IsKeyDown(KEY_LEFT_SUPER) || IsKeyDown(KEY_RIGHT_SUPER);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
686 boolean shift_pressed = IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
687 boolean text_changed = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
688
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
689 double current_time = GetTime();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
690 if (current_time - state->last_blink_time > 0.5) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
691 state->cursor_visible = !state->cursor_visible;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
692 state->last_blink_time = current_time;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
693 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
694
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
695 // Mouse Selection (use line cache for accurate position)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
696 if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && mouse_in_bounds) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
697 int click_pos = GetCharIndexFromPosWithCache(text, bounds, mouse_pos,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
698 state->scroll_offset_y, GuiGetStyle(DEFAULT, TEXT_SIZE),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
699 TEXT_AREA_LINE_HEIGHT, state->line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
700 state->cursor_pos = click_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
701 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
702 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
703 state->is_selecting = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
704 state->cursor_visible = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
705 state->last_blink_time = current_time;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
706 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
707
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
708 if (state->is_selecting && IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
709 int drag_pos = GetCharIndexFromPosWithCache(text, bounds, mouse_pos,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
710 state->scroll_offset_y, GuiGetStyle(DEFAULT, TEXT_SIZE),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
711 TEXT_AREA_LINE_HEIGHT, state->line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
712 if (drag_pos != state->cursor_pos) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
713 if (state->selection_start < 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
714 state->selection_start = state->cursor_pos;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
715 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
716 state->selection_end = drag_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
717 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
718 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
719
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
720 if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
721 state->is_selecting = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
722 if (state->selection_start >= 0 && state->selection_end >= 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
723 if (state->selection_start > state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
724 int temp = state->selection_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
725 state->selection_start = state->selection_end;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
726 state->selection_end = temp;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
727 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
728 if (state->selection_start == state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
729 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
730 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
731 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
732 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
733 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
734
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
735 // Ctrl+A: Select All
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
736 if (ctrl_pressed && IsKeyPressed(KEY_A)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
737 state->selection_start = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
738 state->selection_end = text_len;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
739 state->cursor_pos = text_len;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
740 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
741
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
742 // Ctrl+C: Copy
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
743 if (ctrl_pressed && IsKeyPressed(KEY_C)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
744 if (state->selection_start >= 0 && state->selection_end >= 0 &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
745 state->selection_start != state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
746 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
747 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
748 char *selected = GetSelectedText(text, sel_min, sel_max, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
749 if (selected) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
750 if (g_clipboard_text) free(g_clipboard_text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
751 g_clipboard_text = strdup(selected);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
752 SetClipboardText(g_clipboard_text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
753 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
754 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
755 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
756
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
757 // Ctrl+X: Cut (not allowed in readonly mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
758 if (!readonly && ctrl_pressed && IsKeyPressed(KEY_X)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
759 if (state->selection_start >= 0 && state->selection_end >= 0 &&
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
760 state->selection_start != state->selection_end) {
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
761 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
762 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
763 char *selected = GetSelectedText(text, sel_min, sel_max, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
764 if (selected) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
765 if (g_clipboard_text) free(g_clipboard_text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
766 g_clipboard_text = strdup(selected);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
767 SetClipboardText(g_clipboard_text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
768 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
769
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
770 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
771 DeleteTextRange(text, sel_min, sel_max);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
772 state->cursor_pos = sel_min;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
773 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
774 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
775 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
776 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
777 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
778
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
779 // Ctrl+V: Paste (not allowed in readonly mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
780 if (!readonly && ctrl_pressed && IsKeyPressed(KEY_V)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
781 const char *clipboard = GetClipboardText();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
782 if (clipboard && strlen(clipboard) > 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
783 // Skip leading whitespace (spaces, tabs, newlines)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
784 while (*clipboard && (*clipboard == ' ' || *clipboard == '\t' ||
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
785 *clipboard == '\n' || *clipboard == '\r')) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
786 clipboard++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
787 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
788
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
789 if (strlen(clipboard) > 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
790 if (state->selection_start >= 0 && state->selection_end >= 0 &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
791 state->selection_start != state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
792 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
793 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
794 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
795 DeleteTextRange(text, sel_min, sel_max);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
796 state->cursor_pos = sel_min;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
797 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
798 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
799 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
800 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
801 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
802
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
803 int new_cursor;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
804 InsertTextAtCursor(text, text_size, state->cursor_pos, clipboard, &new_cursor);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
805 state->cursor_pos = new_cursor;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
806 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
807 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
808 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
809 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
810
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
811 // Ctrl+Z: Undo / Ctrl+Shift+Z: Redo (not allowed in readonly mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
812 if (!readonly && ctrl_pressed && IsKeyPressed(KEY_Z)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
813 if (shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
814 PerformRedo(state, text, text_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
815 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
816 PerformUndo(state, text, text_size);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
817 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
818 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
819
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
820 // Arrow Keys Navigation
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
821 if (IsKeyPressed(KEY_LEFT) || IsKeyPressedRepeat(KEY_LEFT)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
822 if (state->selection_start >= 0 && !shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
823 state->cursor_pos = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
824 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
825 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
826 } else if (state->cursor_pos > 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
827 if (shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
828 if (state->selection_start < 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
829 state->selection_start = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
830 state->selection_end = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
831 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
832 state->cursor_pos--;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
833 state->selection_end = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
834 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
835 state->cursor_pos--;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
836 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
837 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
838 state->cursor_visible = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
839 state->last_blink_time = current_time;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
840 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
841
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
842 if (IsKeyPressed(KEY_RIGHT) || IsKeyPressedRepeat(KEY_RIGHT)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
843 if (state->selection_start >= 0 && !shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
844 state->cursor_pos = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
845 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
846 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
847 } else if (state->cursor_pos < text_len) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
848 if (shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
849 if (state->selection_start < 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
850 state->selection_start = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
851 state->selection_end = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
852 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
853 state->cursor_pos++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
854 state->selection_end = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
855 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
856 state->cursor_pos++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
857 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
858 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
859 state->cursor_visible = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
860 state->last_blink_time = current_time;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
861 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
862
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
863 if (IsKeyPressed(KEY_UP) || IsKeyPressedRepeat(KEY_UP)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
864 int line, col;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
865 GetLineAndColumn(text, state->cursor_pos, &line, &col);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
866 if (line > 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
867 int new_pos = GetPosFromLineColumn(text, line - 1, col);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
868 if (shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
869 if (state->selection_start < 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
870 state->selection_start = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
871 state->selection_end = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
872 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
873 state->selection_end = new_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
874 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
875 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
876 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
877 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
878 state->cursor_pos = new_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
879 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
880 state->cursor_visible = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
881 state->last_blink_time = current_time;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
882 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
883
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
884 if (IsKeyPressed(KEY_DOWN) || IsKeyPressedRepeat(KEY_DOWN)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
885 int line, col;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
886 GetLineAndColumn(text, state->cursor_pos, &line, &col);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
887 int total_lines = CountLines(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
888 if (line < total_lines - 1) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
889 int new_pos = GetPosFromLineColumn(text, line + 1, col);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
890 if (shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
891 if (state->selection_start < 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
892 state->selection_start = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
893 state->selection_end = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
894 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
895 state->selection_end = new_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
896 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
897 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
898 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
899 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
900 state->cursor_pos = new_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
901 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
902 state->cursor_visible = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
903 state->last_blink_time = current_time;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
904 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
905
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
906 // Home/End keys
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
907 if (IsKeyPressed(KEY_HOME)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
908 int line_start = GetLineStart(text, state->cursor_pos);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
909 if (shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
910 if (state->selection_start < 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
911 state->selection_start = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
912 state->selection_end = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
913 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
914 state->selection_end = line_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
915 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
916 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
917 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
918 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
919 state->cursor_pos = line_start;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
920 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
921
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
922 if (IsKeyPressed(KEY_END)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
923 int line_end = GetLineEnd(text, state->cursor_pos);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
924 if (shift_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
925 if (state->selection_start < 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
926 state->selection_start = state->cursor_pos;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
927 state->selection_end = state->cursor_pos;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
928 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
929 state->selection_end = line_end;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
930 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
931 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
932 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
933 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
934 state->cursor_pos = line_end;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
935 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
936
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
937 // Text Input (not allowed in readonly mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
938 if (!readonly && !ctrl_pressed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
939 int key = GetCharPressed();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
940 while (key > 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
941 if (key >= 32 && key <= 126) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
942 if (state->selection_start >= 0 && state->selection_end >= 0 &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
943 state->selection_start != state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
944 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
945 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
946 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
947 DeleteTextRange(text, sel_min, sel_max);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
948 state->cursor_pos = sel_min;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
949 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
950 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
951 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
952 } else if (!text_changed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
953 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
954 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
955
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
956 char insert_str[2] = {(char)key, '\0'};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
957 int new_cursor;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
958 InsertTextAtCursor(text, text_size, state->cursor_pos, insert_str, &new_cursor);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
959 state->cursor_pos = new_cursor;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
960 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
961 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
962 key = GetCharPressed();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
963 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
964 } else if (readonly) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
965 // Consume key presses to prevent them from being handled elsewhere
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
966 while (GetCharPressed() > 0) {}
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
967 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
968
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
969 // Enter key (not allowed in readonly mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
970 if (!readonly && (IsKeyPressed(KEY_ENTER) || IsKeyPressed(KEY_KP_ENTER))) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
971 if (state->selection_start >= 0 && state->selection_end >= 0 &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
972 state->selection_start != state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
973 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
974 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
975 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
976 DeleteTextRange(text, sel_min, sel_max);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
977 state->cursor_pos = sel_min;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
978 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
979 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
980 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
981 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
982 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
983
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
984 int new_cursor;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
985 InsertTextAtCursor(text, text_size, state->cursor_pos, "\n", &new_cursor);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
986 state->cursor_pos = new_cursor;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
987 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
988 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
989
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
990 // Backspace (not allowed in readonly mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
991 if (!readonly && (IsKeyPressed(KEY_BACKSPACE) || IsKeyPressedRepeat(KEY_BACKSPACE))) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
992 if (state->selection_start >= 0 && state->selection_end >= 0 &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
993 state->selection_start != state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
994 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
995 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
996 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
997 DeleteTextRange(text, sel_min, sel_max);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
998 state->cursor_pos = sel_min;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
999 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1000 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1001 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1002 } else if (state->cursor_pos > 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1003 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1004 DeleteTextRange(text, state->cursor_pos - 1, state->cursor_pos);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1005 state->cursor_pos--;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1006 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1007 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1008 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1009
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1010 // Delete key (not allowed in readonly mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1011 if (!readonly && (IsKeyPressed(KEY_DELETE) || IsKeyPressedRepeat(KEY_DELETE))) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1012 text_len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1013 if (state->selection_start >= 0 && state->selection_end >= 0 &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1014 state->selection_start != state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1015 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1016 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1017 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1018 DeleteTextRange(text, sel_min, sel_max);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1019 state->cursor_pos = sel_min;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1020 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1021 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1022 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1023 } else if (state->cursor_pos < text_len) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1024 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1025 DeleteTextRange(text, state->cursor_pos, state->cursor_pos + 1);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1026 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1027 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1028 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1029
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1030 // Tab key (not allowed in readonly mode)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1031 if (!readonly && IsKeyPressed(KEY_TAB)) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1032 if (state->selection_start >= 0 && state->selection_end >= 0 &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1033 state->selection_start != state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1034 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1035 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1036 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1037 DeleteTextRange(text, sel_min, sel_max);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1038 state->cursor_pos = sel_min;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1039 state->selection_start = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1040 state->selection_end = -1;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1041 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1042 PushUndoState(state, text, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1043 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1044
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1045 int new_cursor;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1046 InsertTextAtCursor(text, text_size, state->cursor_pos, " ", &new_cursor);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1047 state->cursor_pos = new_cursor;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1048 text_changed = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1049 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1050
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1051 // Auto-scroll to keep cursor visible
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1052 // Rebuild cache if text changed during editing
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1053 if (text_changed) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1054 state->cache_valid = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1055 BuildLineCache(state, text, content_width, GuiGetStyle(DEFAULT, TEXT_SIZE), should_text_wrap, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1056 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1057 Vector2 cursor_screen = GetCursorScreenPosFromCache(text, state->cursor_pos, bounds,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1058 state->scroll_offset_y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1059 GuiGetStyle(DEFAULT, TEXT_SIZE), TEXT_AREA_LINE_HEIGHT,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1060 state->line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1061
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1062 float visible_top = bounds.y + TEXT_AREA_PADDING;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1063 float visible_bottom = bounds.y + bounds.height - TEXT_AREA_PADDING - TEXT_AREA_LINE_HEIGHT;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1064
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1065 if (cursor_screen.y < visible_top) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1066 state->scroll_offset_y -= visible_top - cursor_screen.y;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1067 } else if (cursor_screen.y > visible_bottom) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1068 state->scroll_offset_y += cursor_screen.y - visible_bottom;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1069 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1070
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1071 state->scroll_offset_y = TA_Max_Float(0, TA_Min_Float(state->scroll_offset_y, max_scroll));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1072 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1073
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1074 // Drawing
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1075 DrawRectangleSelectiveRounded(bounds, 0.2, 1, g_colors.secondary, FALSE, FALSE, TRUE, TRUE);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1076 DrawRectangleRec(AddPadding(bounds, 10), WHITE);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1077 // DrawRectangleRec(bounds, is_edit_mode ? DARKGRAY : (Color){40, 40, 40, 255});
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1078 // DrawRectangleLinesEx(bounds, 1, is_edit_mode ? WHITE : GRAY);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1079 // DrawRectangleRoundedLines(bounds, 0.2, 1, is_edit_mode ? BLACK : GRAY);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1080
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1081 BeginScissorMode((int)bounds.x, (int)bounds.y, (int)bounds.width, (int)bounds.height);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1082
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1083 float content_x = bounds.x + TEXT_AREA_PADDING;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1084 float content_y = bounds.y + TEXT_AREA_PADDING - state->scroll_offset_y;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1085
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1086 text_len = strlen(text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1087
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1088 // Calculate visible line range (only render what's visible)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1089 int first_visible_line = (int)(state->scroll_offset_y / TEXT_AREA_LINE_HEIGHT);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1090 int last_visible_line = first_visible_line + (int)(visible_height / TEXT_AREA_LINE_HEIGHT) + 2;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1091 int line_count = Dowa_Array_Length(state->line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1092 if (first_visible_line < 0) first_visible_line = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1093 if (last_visible_line > line_count) last_visible_line = line_count;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1094
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1095 // Draw selection highlight (only for visible lines)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1096 if (state->selection_start >= 0 && state->selection_end >= 0 &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1097 state->selection_start != state->selection_end) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1098 int sel_min = TA_Min_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1099 int sel_max = TA_Max_Int(state->selection_start, state->selection_end);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1100
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1101 for (int line_idx = first_visible_line; line_idx < last_visible_line; line_idx++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1102 LineInfo *line = &state->line_cache[line_idx];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1103
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1104 // Check if selection intersects this line
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1105 if (sel_min < line->end_pos && sel_max > line->start_pos) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1106 int highlight_start = TA_Max_Int(sel_min, line->start_pos);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1107 int highlight_end = TA_Min_Int(sel_max, line->end_pos);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1108
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1109 float x1 = content_x + MeasureTextRange(text, line->start_pos, highlight_start, GuiGetStyle(DEFAULT, TEXT_SIZE));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1110 float x2 = content_x + MeasureTextRange(text, line->start_pos, highlight_end, GuiGetStyle(DEFAULT, TEXT_SIZE));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1111 float y = content_y + line_idx * TEXT_AREA_LINE_HEIGHT;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1112
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1113 DrawRectangle((int)x1, (int)y, (int)(x2 - x1), TEXT_AREA_LINE_HEIGHT,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1114 Fade(SKYBLUE, 0.5f));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1115 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1116 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1117 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1118
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1119 // Draw text using line cache (only visible lines)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1120 Color text_color = should_text_wrap ? BLACK : WHITE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1121 for (int line_idx = first_visible_line; line_idx < last_visible_line; line_idx++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1122 LineInfo *line = &state->line_cache[line_idx];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1123
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1124 if (line->char_count > 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1125 char line_buffer[1024];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1126 int line_len = TA_Min_Int(line->end_pos - line->start_pos, 1023);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1127 strncpy(line_buffer, text + line->start_pos, line_len);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1128 line_buffer[line_len] = '\0';
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1129
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1130 Vector2 draw_text_vector = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1131 .x = content_x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1132 .y = content_y + line_idx * TEXT_AREA_LINE_HEIGHT
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1133 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1134 DrawTextEx(GuiGetFont(), line_buffer, draw_text_vector,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1135 GuiGetStyle(DEFAULT, TEXT_SIZE), TEXT_SIZE_DEFAULT/GuiGetStyle(DEFAULT, TEXT_SIZE), text_color);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1136 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1137 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1138
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1139 // Draw cursor
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1140 if (is_edit_mode && state->cursor_visible) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1141 Vector2 cursor_pos = GetCursorScreenPosFromCache(text, state->cursor_pos, bounds,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1142 state->scroll_offset_y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1143 GuiGetStyle(DEFAULT, TEXT_SIZE), TEXT_AREA_LINE_HEIGHT,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1144 state->line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1145
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1146 DrawRectangle((int)cursor_pos.x, (int)cursor_pos.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1147 TEXT_AREA_CURSOR_WIDTH, TEXT_AREA_LINE_HEIGHT, BLACK);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1148 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1149
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1150 EndScissorMode();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1151
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1152 // Draw scrollbar if needed
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1153 if (max_scroll > 0) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1154 float scrollbar_height = (visible_height / content_height) * visible_height;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1155 float scrollbar_y = bounds.y + TEXT_AREA_PADDING +
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1156 (state->scroll_offset_y / max_scroll) * (visible_height - scrollbar_height);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1157
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1158 DrawRectangle((int)(bounds.x + bounds.width - 8), (int)scrollbar_y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1159 6, (int)scrollbar_height, Fade(WHITE, 0.3f));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1160 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1161
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1162 return should_toggle_edit_mode;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1163 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1164
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1165 void GuiTextAreaResetState(int id) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1166 TextAreaState *state = GetTextAreaState(id);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1167 if (state) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1168 if (state->undo_stack) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1169 Dowa_Array_Free(state->undo_stack);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1170 state->undo_stack = NULL;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1171 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1172 if (state->line_cache) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1173 Dowa_Array_Free(state->line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1174 state->line_cache = NULL;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1175 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1176 state->cache_valid = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1177 state->is_initialized = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1178 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1179 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1180
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1181 void GuiTextAreaResetAllStates(void) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1182 for (int i = 0; i < g_text_area_state_count; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1183 if (g_text_area_states[i].undo_stack) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1184 Dowa_Array_Free(g_text_area_states[i].undo_stack);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1185 g_text_area_states[i].undo_stack = NULL;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1186 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1187 if (g_text_area_states[i].line_cache) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1188 Dowa_Array_Free(g_text_area_states[i].line_cache);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1189 g_text_area_states[i].line_cache = NULL;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1190 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1191 g_text_area_states[i].cache_valid = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1192 g_text_area_states[i].is_initialized = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1193 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1194 g_text_area_state_count = 0;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1195 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1196
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1197 // ============================================================================
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1198 // End TextArea Component
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1199 // ============================================================================
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1200
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1201 typedef Dowa_KV(char*, char*) INPUT_HASHMAP;
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1202
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1203 typedef struct {
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1204 char *data;
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1205 size_t size;
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1206 } ResponseBuffer;
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1207
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1208 typedef struct {
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1209 char *filename;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1210 char *title;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1211 Rectangle rect;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1212 long time_modified;
117
b91f2dd6f84d [PostDog] Fixed delete logic.
June Park <parkjune1995@gmail.com>
parents: 116
diff changeset
1213 boolean deleted;
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1214 } HistoryItem;
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1215
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1216 typedef struct {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1217 Rectangle rectangle;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1218 char *label;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1219 bool active;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1220 } TabItem;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1221
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1222 typedef enum {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1223 TAB_HEADER = 0,
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1224 TAB_BODY,
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1225 TAB_GET_PARAMS,
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1226 TAB_WEBSOCKET,
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1227 TAB_LENGTH
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1228 } PostDog_Tab_Enum;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1229
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1230 typedef enum {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1231 RESULT_TAB_BODY = 0,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1232 RESULT_TAB_HEADERS,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1233 RESULT_TAB_LENGTH
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1234 } PostDog_ResultTab_Enum;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1235
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1236 // Text area IDs
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1237 #define TEXT_AREA_ID_INPUT_HEADER 1
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1238 #define TEXT_AREA_ID_INPUT_BODY 2
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1239 #define TEXT_AREA_ID_INPUT_PARAMS 3
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1240 #define TEXT_AREA_ID_INPUT_WS 4
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1241 #define TEXT_AREA_ID_RESULT_BODY 5
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1242 #define TEXT_AREA_ID_RESULT_HEADERS 6
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1243
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1244 static uint32 counter = 0;
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1245 static uv_mutex_t history_mutex;
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1246 static uv_loop_t *main_loop = NULL;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1247 HistoryItem *history_items = NULL;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1248 HistoryItem *new_history_items = NULL;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1249
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1250 // Global UI state
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1251 char *url_input_text = NULL;
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1252 char **result_body_array = NULL; // [RESULT_TAB_BODY, RESULT_TAB_HEADERS]
155
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
1253 char **input_body_array = NULL;
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1254 int active_method_dropdown = 0;
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1255 int active_input_tab = 0;
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1256 int active_result_tab = 0;
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1257 Seobeo_WebSocket *ws = NULL;
153
790930d9bb90 [PostDog] Adding websocket to be more usable.
June Park <parkjune1995@gmail.com>
parents: 152
diff changeset
1258 boolean WS_BREAK = FALSE;
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1259 uv_thread_t websocket_thread_id;
155
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
1260 Color TEXT_COLOR = BLACK;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1261 boolean LOADING = FALSE;
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1262
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1263 int CompareHistoryItemsByDate(const void *a, const void *b) {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1264 HistoryItem *itemA = (HistoryItem *)a;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1265 HistoryItem *itemB = (HistoryItem *)b;
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1266 return (itemB->time_modified - itemA->time_modified);
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1267 }
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1268
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1269 char *PostDog_Extract_Title(const char *filename)
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1270 {
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1271 char full_file_path[512] = {0};
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1272 snprintf(full_file_path, 512, "%s/%s", POSTDOG_PATHS, filename);
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1273 FILE *file = fopen(full_file_path, "r");
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1274 if (!file)
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1275 return strdup(filename);
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1276
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1277 char *title = malloc(sizeof(char) * 512);
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1278 if (!fgets(title, 512, file)) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1279 fclose(file);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1280 free(title);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1281 return strdup(filename);
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1282 }
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1283 fclose(file);
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1284
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1285 // Strip trailing newline
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1286 title[strcspn(title, "\n")] = '\0';
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1287
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1288 return title;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1289 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1290
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1291 // TODO: Make this into generic fucntion so I can use it across different thing.
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1292 void PostDog_List_Directory(const char *path, HistoryItem **p_file_arr)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1293 {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1294 HistoryItem *file_arr = *p_file_arr;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1295 #ifdef _WIN32
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1296 struct _finddata_t fileinfo;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1297 intptr_t handle;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1298 char search_path[256];
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1299 sprintf(search_path, "%s\\*", path);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1300
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1301 if ((handle = _findfirst(search_path, &fileinfo)) == -1L) {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1302 printf("Directory is empty or cannot be read.\n");
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1303 } else {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1304 do {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1305 HistoryItem item = {0};
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1306 item.filename = strdup(fileinfo.name);
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1307 item.title = PostDog_Extract_Title(fileinfo.name);
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1308 item.time_modified = fileinfo.time_write;
117
b91f2dd6f84d [PostDog] Fixed delete logic.
June Park <parkjune1995@gmail.com>
parents: 116
diff changeset
1309 item.deleted = FALSE;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1310 Dowa_Array_Push(file_arr, item);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1311 } while (_findnext(handle, &fileinfo) == 0);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1312 _findclose(handle);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1313 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1314 #else
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1315 struct dirent *entry;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1316 struct stat file_stat;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1317 DIR *dp = opendir(path);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1318 if (dp == NULL) return;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1319
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1320 char full_path[256];
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1321 while ((entry = readdir(dp)))
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1322 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1323 if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1324 continue;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1325 snprintf(full_path, sizeof(full_path), "%s/%s", path, entry->d_name);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1326 if (stat(full_path, &file_stat) == 0)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1327 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1328 HistoryItem item = {0};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1329 item.filename = strdup(entry->d_name);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1330 item.title = PostDog_Extract_Title(entry->d_name);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1331 item.time_modified = file_stat.st_mtime;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1332 item.deleted = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1333 Dowa_Array_Push(file_arr, item);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1334 }
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1335 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1336 closedir(dp);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1337 #endif
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1338
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1339 // Update the caller's pointer in case array was reallocated
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1340 *p_file_arr = file_arr;
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1341
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1342 int count = Dowa_Array_Length(file_arr);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1343 if (count > 1) {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1344 qsort(file_arr, count, sizeof(HistoryItem), CompareHistoryItemsByDate);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1345 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1346 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1347
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1348 int PostDog_History_Load(HistoryItem **p_history_files)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1349 {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1350 if (access(POSTDOG_PATHS, F_OK) == -1)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1351 {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1352 printf("Directory '%s' not found. Creating it...\n", POSTDOG_PATHS);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1353 if (mkdir(POSTDOG_PATHS, 0777) != 0)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1354 return -1;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1355 return 0;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1356 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1357
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1358 printf("Directory '%s' already exists.\n", POSTDOG_PATHS);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1359 PostDog_List_Directory(POSTDOG_PATHS, p_history_files);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1360 return 0;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1361 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1362
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1363 bool InArea(Vector2 mouse_position, Rectangle area)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1364 {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1365 return (
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1366 mouse_position.x >= area.x &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1367 mouse_position.x < area.x + area.width &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1368 mouse_position.y >= area.y &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1369 mouse_position.y < area.y + area.height
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1370 );
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1371 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1372
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1373 bool Clicked(Vector2 mouse_position, Rectangle area)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1374 {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1375 return (InArea(mouse_position, area) && IsMouseButtonPressed(MOUSE_BUTTON_LEFT));
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1376 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1377
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1378 // -------- END of UI ---- //
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1379
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1380 char *PostDog_Enum_To_String(int active_enum)
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1381 {
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1382 switch(active_enum)
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1383 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1384 case 0: return "GET";
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1385 case 1: return "POST";
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1386 case 2: return "PUT";
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1387 case 3: return "DELETE";
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1388 }
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1389 return 0;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1390 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1391
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1392 char *PostDog_Construct_URL(char *filename, char *out_buffer, size_t buffer_size)
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1393 {
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1394 snprintf(out_buffer, buffer_size, "%s/%s", POSTDOG_PATHS, filename);
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1395 return out_buffer;
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1396 }
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1397
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1398 boolean PostDog_History_CreateFile(char *filename, char* values)
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1399 {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1400 char full_file_path[512] = {0};
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1401 snprintf(full_file_path, 512, "%s/%s", POSTDOG_PATHS, filename);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1402 FILE *file = fopen(full_file_path, "w");
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1403 if (!file)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1404 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1405 fprintf(stderr, "Failed to create a file: %s\n", full_file_path);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1406 return FALSE;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1407 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1408 fwrite(values, 1, strlen(values), file);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1409 fclose(file);
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1410 return TRUE;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1411 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1412
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1413 void PostDog_Request_SaveFile(void)
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1414 {
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1415 const char *method = PostDog_Enum_To_String(active_method_dropdown);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1416 size_t new_file_size = 1024 * 1024;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1417 Dowa_Arena *arena = Dowa_Arena_Create(1024 * 1024 * 2);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1418 char *new_file = Dowa_Arena_Allocate(arena, 1024 * 1024);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1419 char *title = Dowa_Arena_Allocate(arena, strlen(method) + strlen(url_input_text) + 2);
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1420 sprintf(title, "%s %s", method, url_input_text);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1421 snprintf(
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1422 new_file,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1423 new_file_size,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1424 "%s\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1425 "---\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1426 "%s\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1427 "---\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1428 "%s\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1429 "---\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1430 "%s\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1431 "---\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1432 "%s\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1433 "---\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1434 "%s\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1435 "---\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1436 "%s\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1437 "---\n"
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1438 "%s\n",
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1439 title,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1440 url_input_text,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1441 method,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1442 input_body_array[TAB_HEADER],
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1443 input_body_array[TAB_BODY],
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1444 input_body_array[TAB_GET_PARAMS],
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1445 input_body_array[TAB_WEBSOCKET],
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1446 result_body_array[RESULT_TAB_BODY]
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1447 );
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1448 char *filename = Dowa_Arena_Allocate(arena, 1024);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1449 if (!filename)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1450 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1451 perror("Error opening file");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1452 exit(EXIT_FAILURE);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1453 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1454 char *uuid4 = (char *)Dowa_Arena_Allocate(arena, 37);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1455 if (!uuid4)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1456 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1457 perror("Error uuid");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1458 exit(EXIT_FAILURE);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1459 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1460
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1461 uv_mutex_lock(&history_mutex);
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1462
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1463 int32 seed = (uint32)time(NULL) ^ counter++;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1464 Dowa_String_UUID(seed, uuid4);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1465 snprintf(filename, 1024, "%s.txt", uuid4);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1466
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1467 if (PostDog_History_CreateFile(filename, new_file))
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1468 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1469 HistoryItem item = {0};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1470 item.filename = strdup(filename);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1471 item.title = strdup(title);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1472 item.deleted = FALSE;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1473
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1474 Dowa_Array_Push(new_history_items, item);
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1475 }
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1476
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1477 uv_mutex_unlock(&history_mutex);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1478 Dowa_Arena_Free(arena);
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1479 }
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1480
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1481 void PostDog_Websocket_Listen(void)
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1482 {
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1483 while (TRUE)
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1484 {
153
790930d9bb90 [PostDog] Adding websocket to be more usable.
June Park <parkjune1995@gmail.com>
parents: 152
diff changeset
1485 if (WS_BREAK) break;
790930d9bb90 [PostDog] Adding websocket to be more usable.
June Park <parkjune1995@gmail.com>
parents: 152
diff changeset
1486
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1487 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(ws);
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1488 if (p_msg)
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1489 {
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1490 if (p_msg->opcode == SEOBEO_WS_OPCODE_TEXT)
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1491 {
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1492 printf("Response: %.*s\n", (int)p_msg->length, (char*)p_msg->data);
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1493 char *body = result_body_array[RESULT_TAB_BODY];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1494 size_t current_len = strlen(body);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1495 snprintf(body + current_len, RESULT_BUFFER_LENGTH - current_len,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1496 "\n%s", (char*)p_msg->data);
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1497 }
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1498 Seobeo_WebSocket_Message_Destroy(p_msg);
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1499 }
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1500 usleep(10000);
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1501 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1502 return;
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1503 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1504
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1505 void PostDog_Websocket_Connect(void)
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1506 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1507 // Pass headers from the Headers tab when connecting
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1508 const char *headers = input_body_array[TAB_HEADER];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1509 if (headers && strlen(headers) > 0)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1510 ws = Seobeo_WebSocket_Connect_With_Headers(url_input_text, headers);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1511 else
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1512 ws = Seobeo_WebSocket_Connect(url_input_text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1513
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1514 result_body_array[RESULT_TAB_BODY][0] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1515 result_body_array[RESULT_TAB_HEADERS][0] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1516
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1517 // Reset result text area states
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1518 GuiTextAreaResetState(TEXT_AREA_ID_RESULT_BODY);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1519 GuiTextAreaResetState(TEXT_AREA_ID_RESULT_HEADERS);
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1520 }
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1521
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1522 int PostDog_Websocket_Send(void)
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1523 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1524 char *body = result_body_array[RESULT_TAB_BODY];
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1525 if (Seobeo_WebSocket_Send_Text(ws, input_body_array[active_input_tab]) < 0)
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1526 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1527 snprintf(body + strlen(body), RESULT_BUFFER_LENGTH - strlen(body),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1528 "Failed to send message\n");
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1529 return -1;
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1530 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1531 snprintf(body + strlen(body), RESULT_BUFFER_LENGTH - strlen(body),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1532 "\n%s", input_body_array[active_input_tab]);
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1533 return 0;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1534 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1535
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1536 void PostDog_Websocket_Destroy(uv_thread_t thread_id)
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1537 {
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1538 Seobeo_WebSocket_Destroy(ws);
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1539 uv_thread_join(&thread_id);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1540 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1541
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1542 void PostDog_Websocket_Start(void *arg)
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1543 {
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1544 PostDog_Websocket_Connect();
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1545 PostDog_Websocket_Listen();
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1546 }
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1547
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1548 uv_thread_t PostDog_Websocket_Start_Thread()
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1549 {
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1550 uv_thread_t thread_id;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1551
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1552 if (uv_thread_create(&thread_id, PostDog_Websocket_Start, NULL) != 0)
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1553 {
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
1554 perror("Failed to create thread");
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
1555 memset(&thread_id, 0, sizeof(thread_id));
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
1556 return thread_id;
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1557 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1558
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1559 return thread_id;
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1560 }
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1561
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1562 int PostDog_Http_Request(void)
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1563 {
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1564 Seobeo_Client_Request *req = Seobeo_Client_Request_Create(url_input_text);
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1565 printf("URL: %s\n", url_input_text);
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1566 Seobeo_Client_Response *res;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1567 switch (active_method_dropdown)
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1568 {
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1569 case 0:
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1570 {
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1571 Seobeo_Client_Request_Set_Method(req, "GET");
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1572 break;
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1573 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1574 case 1:
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1575 {
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1576 Seobeo_Client_Request_Set_Method(req, "POST");
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1577 break;
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1578 }
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1579 case 2:
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1580 {
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1581 Seobeo_Client_Request_Set_Method(req, "PUT");
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1582 break;
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1583 }
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1584 case 3:
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1585 {
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1586 Seobeo_Client_Request_Set_Method(req, "DELETE");
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1587 break;
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1588 }
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1589 }
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1590
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1591 if (input_body_array[TAB_HEADER] && strlen(input_body_array[TAB_HEADER]) > 0)
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1592 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1593 char *headersCopy = strdup(input_body_array[TAB_HEADER]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1594 char *line = strtok(headersCopy, "\n");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1595 while (line != NULL)
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1596 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1597 while (*line == ' ' || *line == '\t') line++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1598 if (strlen(line) > 0)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1599 Seobeo_Client_Request_Add_Header_Array(req, line);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1600 line = strtok(NULL, "\n");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1601 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1602
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1603 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1604 Seobeo_Client_Request_Set_Follow_Redirects(req, TRUE, 5); // TODO: remove magic number;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1605 res = Seobeo_Client_Request_Execute(req);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1606
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1607 if (res == NULL) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1608 snprintf(result_body_array[RESULT_TAB_BODY], RESULT_BUFFER_LENGTH, "Error: Failed to send the request\n");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1609 result_body_array[RESULT_TAB_HEADERS][0] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1610 } else {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1611 // Store response body
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1612 snprintf(result_body_array[RESULT_TAB_BODY], RESULT_BUFFER_LENGTH, "%s",
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1613 res->body ? res->body : "");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1614 // Sanitize body for display (replace tabs, remove non-printable chars)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1615 SanitizeTextForDisplay(result_body_array[RESULT_TAB_BODY]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1616
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1617 // Store response headers
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1618 int offset = snprintf(result_body_array[RESULT_TAB_HEADERS], RESULT_BUFFER_LENGTH,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1619 "HTTP Status: %d %s\n\n",
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1620 res->status_code, res->status_text ? res->status_text : "");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1621 if (res->headers) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1622 size_t header_count = Dowa_Array_Length(res->headers);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1623 for (size_t i = 0; i < header_count && offset < RESULT_BUFFER_LENGTH - 100; i++) {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1624 offset += snprintf(result_body_array[RESULT_TAB_HEADERS] + offset,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1625 RESULT_BUFFER_LENGTH - offset,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1626 "%s: %s\n", res->headers[i].key, res->headers[i].value);
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1627 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1628 }
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1629 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1630 printf("Body: %s\n", res ? res->body : "NULL");
152
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1631 Seobeo_Client_Request_Destroy(req);
7387eec8e7f8 [Postdog] Updated to use Seobeo_Client instead of CURL. Updated to handle websocket connection.
June Park <parkjune1995@gmail.com>
parents: 118
diff changeset
1632 Seobeo_Client_Response_Destroy(res);
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1633 PostDog_Request_SaveFile();
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1634
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1635 // Reset result text area states so scroll/cursor don't carry over
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1636 GuiTextAreaResetState(TEXT_AREA_ID_RESULT_BODY);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1637 GuiTextAreaResetState(TEXT_AREA_ID_RESULT_HEADERS);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1638
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1639 return 0;
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1640 }
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1641
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1642 void PostDog_Http_Work(uv_work_t *req)
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1643 {
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1644 PostDog_Http_Request();
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1645 printf("HTTP request finished.\n");
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1646 }
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1647
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1648 void PostDog_Http_Work_Done(uv_work_t *req, int status)
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1649 {
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1650 LOADING = FALSE;
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1651 free(req);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1652 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1653
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1654 void PostDog_Http_Thread_Request()
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1655 {
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1656 uv_work_t *work_req = malloc(sizeof(uv_work_t));
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1657 if (!work_req)
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1658 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1659 perror("Failed to allocate work request");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1660 return;
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1661 }
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1662 LOADING = TRUE;
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1663 if (uv_queue_work(main_loop, work_req, PostDog_Http_Work, PostDog_Http_Work_Done) != 0)
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1664 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1665 perror("Failed to queue work");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1666 free(work_req);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1667 LOADING = FALSE;
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
1668 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1669 }
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1670
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1671 void PostDog_Update_URL(boolean is_url_updated)
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1672 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1673 char *params_start = strchr(url_input_text, '?');
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1674 if (is_url_updated)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1675 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1676 if (!params_start)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1677 return;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1678 params_start++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1679 Dowa_Arena *arena = Dowa_Arena_Create(1024*1024);
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1680
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1681 char buffer[4096] = "";
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1682 char **lines = Dowa_String_Split(params_start, "&", URL_TEXT_BUFFER_LENGTH, 1, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1683 for (int i = 0; i < Dowa_Array_Length(lines); i++)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1684 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1685 char *line = lines[i];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1686 char **key_value = Dowa_String_Split(line, "=", (int)strlen(line), 1, arena);
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1687
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1688 if (Dowa_Array_Length(key_value) < 2)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1689 break;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1690 snprintf(buffer + strlen(buffer), 4096 - strlen(buffer), "%s %s\n", key_value[0], key_value[1]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1691 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1692 snprintf(input_body_array[TAB_GET_PARAMS], URL_TEXT_BUFFER_LENGTH, "%s", buffer);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1693 int length = strlen(input_body_array[TAB_GET_PARAMS]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1694 input_body_array[TAB_GET_PARAMS][length--] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1695 Dowa_Arena_Free(arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1696 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1697 else
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1698 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1699 if (params_start)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1700 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1701 size_t length = params_start - url_input_text;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1702 url_input_text[length] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1703 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1704 int get_params_length = (int)strlen(input_body_array[TAB_GET_PARAMS]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1705 if (get_params_length == 0)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1706 return;
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1707
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1708 char *separator = "?";
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1709 Dowa_Arena *arena = Dowa_Arena_Create(1024*1024);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1710 char **lines = Dowa_String_Split(input_body_array[TAB_GET_PARAMS], "\n", get_params_length, 1, arena);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1711 for (int i = 0; i < Dowa_Array_Length(lines); i++)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1712 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1713 char *line = lines[i];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1714 char **key_value = Dowa_String_Split(line, " ", (int)strlen(line), 1, arena);
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1715
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1716 if (Dowa_Array_Length(key_value) < 2)
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1717 break;
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1718
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1719 strcat(url_input_text, separator);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1720 strcat(url_input_text, key_value[0]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1721 strcat(url_input_text, "=");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1722 for (int i = 1; i < Dowa_Array_Length(key_value); i++)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1723 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1724 if (!key_value[i] || key_value[i][0] == '\0')
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1725 break;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1726 if (i > 1) strcat(url_input_text, "%20");
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1727 strcat(url_input_text, key_value[i]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1728 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1729 separator = "&";
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1730 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1731
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1732 Dowa_Arena_Free(arena);
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1733 }
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1734 }
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
1735
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1736 int PostDog_String_To_MethodEnum(char *value)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1737 {
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1738 if (strstr(value, "GET"))
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1739 return 0;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1740 if (strstr(value, "POST"))
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1741 return 1;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1742 if (strstr(value, "PUT"))
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1743 return 2;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1744 if (strstr(value, "DELETE"))
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1745 return 3;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1746 return 0;
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1747 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1748
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1749 void PostDog_Params_Reset(void)
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1750 {
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1751 url_input_text[0] = '\0';
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1752 active_method_dropdown = 0;
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1753 active_result_tab = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1754
155
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
1755 for (int i = 0; i < Dowa_Array_Length(input_body_array); i++)
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
1756 input_body_array[i][0] = '\0';
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1757
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1758 for (int i = 0; i < Dowa_Array_Length(result_body_array); i++)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1759 result_body_array[i][0] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1760
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1761 // Reset text area states when clearing
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1762 GuiTextAreaResetAllStates();
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1763 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1764
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1765 void PostDog_Load_File(const char *filename)
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1766 {
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1767 char full_file_path[512] = {0};
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1768 snprintf(full_file_path, 512, "%s/%s", POSTDOG_PATHS, filename);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1769 FILE *file = fopen(full_file_path, "r");
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1770 if (!file)
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1771 return;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1772
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1773 fseek(file, 0, SEEK_END);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1774 size_t file_size = ftell(file);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1775 fseek(file, 0, SEEK_SET);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1776
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1777 Dowa_Arena *init_arena = Dowa_Arena_Create(file_size + 2);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1778 Dowa_Arena *split_arena = Dowa_Arena_Create(file_size * 2);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1779 char *file_buffer = Dowa_Arena_Allocate(init_arena, file_size+1);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1780 fread(file_buffer, 1, file_size, file);
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1781 fclose(file);
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1782
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1783 char **values = Dowa_String_Split(file_buffer, "---\n", file_size, 4, split_arena);
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1784
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1785 for (int i = 0; i < Dowa_Array_Length(values); i++)
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1786 {
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1787 switch (i)
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1788 {
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1789 case 0: // Title - skip
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1790 break;
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1791
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1792 case 1: // URL
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1793 snprintf(url_input_text, strlen(values[i]) + 1, "%s", values[i]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1794 url_input_text[strcspn(url_input_text, "\n")] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1795 break;
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1796
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1797 case 2: // Method
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1798 active_method_dropdown = PostDog_String_To_MethodEnum(values[i]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1799 break;
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1800
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1801 case 3: // Headers (TAB_HEADER)
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1802 case 4: // Body (TAB_BODY)
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1803 case 5: // Get Params (TAB_GET_PARAMS)
155
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
1804 case 6: // Websocket (TAB_WEBSOCKET)
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1805 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1806 int map_index = i - 3; // 3->0, 4->1, 5->2, 6->3
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1807 snprintf(input_body_array[map_index], strlen(values[i]) + 1, "%s", values[i]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1808 // Trim trailing newlines
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1809 for (int j = strlen(values[i]); j > 0; j--)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1810 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1811 if (input_body_array[map_index][j] == '\n')
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1812 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1813 input_body_array[map_index][j] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1814 break;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1815 }
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1816 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1817 break;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1818 }
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
1819
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1820 default: // Response (index 7+) - load into body tab for backward compatibility
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1821 snprintf(result_body_array[RESULT_TAB_BODY], strlen(values[i]) + 1, "%s", values[i]);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1822 break;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1823 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1824 }
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1825
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1826 // Reset result tab to body
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1827 active_result_tab = RESULT_TAB_BODY;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1828
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1829 // Reset text area states when loading new file
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1830 GuiTextAreaResetAllStates();
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
1831
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1832 Dowa_Arena_Free(init_arena);
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
1833 Dowa_Arena_Free(split_arena);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1834 }
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
1835
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1836 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1837 // UI LAYOUT STRUCTURE - All rectangles for the UI
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1838 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1839 typedef struct {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1840 // Main areas
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1841 Rectangle screen;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1842 Rectangle sidebar;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1843 Rectangle content;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1844
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1845 // Sidebar sections
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1846 Rectangle logo_area;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1847 Rectangle history_list;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1848
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1849 // URL bar section
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1850 Rectangle url_bar;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1851 Rectangle method_dropdown;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1852 Rectangle url_input;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1853 Rectangle send_button;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1854
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1855 // Body section (input + result split)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1856 Rectangle body_area;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1857 Rectangle input_panel;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1858 Rectangle result_panel;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1859
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1860 // Input panel internals
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1861 Rectangle input_tabs;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1862 Rectangle input_body;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1863
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1864 // Result panel internals
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1865 Rectangle result_tabs;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1866 Rectangle result_body;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1867 } UILayout;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1868
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1869 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1870 // UI STATE - All interactive state
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1871 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1872 typedef struct {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1873 boolean url_edit_mode;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1874 boolean method_edit_mode;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1875 boolean input_body_edit_mode;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1876 boolean result_body_edit_mode;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1877 int prev_input_tab;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1878 float history_scroll_offset;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1879 } UIState;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1880
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1881 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1882 // LAYOUT CALCULATION FUNCTIONS
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1883 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1884 static UILayout CalculateLayout(int screen_width, int screen_height, float padding)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1885 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1886 UILayout layout = {0};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1887
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1888 // Screen
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1889 layout.screen = (Rectangle){0, 0, screen_width, screen_height};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1890
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1891 // Main split: sidebar (20%) | content (80%)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1892 layout.sidebar = LeftColumn(layout.screen, 0.20f, 0);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1893 layout.content = RightColumn(layout.screen, layout.sidebar, 0);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1894
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1895 // Sidebar sections
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1896 layout.logo_area = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1897 .x = layout.sidebar.x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1898 .y = layout.sidebar.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1899 .width = layout.sidebar.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1900 .height = 120
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1901 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1902
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1903 layout.history_list = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1904 .x = layout.sidebar.x + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1905 .y = layout.logo_area.y + layout.logo_area.height + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1906 .width = layout.sidebar.width - (2 * padding),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1907 .height = layout.sidebar.height - layout.logo_area.height - (2 * padding)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1908 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1909
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1910 // URL bar section (top of content area)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1911 float url_bar_height = 60;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1912 layout.url_bar = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1913 .x = layout.content.x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1914 .y = layout.content.y + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1915 .width = layout.content.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1916 .height = url_bar_height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1917 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1918
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1919 // URL bar components (method dropdown + URL input + send button)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1920 float dropdown_width = 100;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1921 float button_width = 80;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1922 float url_bar_inner_padding = 8;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1923 float control_height = 36;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1924 float control_y = layout.url_bar.y + (layout.url_bar.height - control_height) / 2;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1925
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1926 layout.method_dropdown = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1927 .x = layout.url_bar.x + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1928 .y = control_y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1929 .width = dropdown_width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1930 .height = control_height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1931 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1932
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1933 layout.url_input = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1934 .x = layout.method_dropdown.x + layout.method_dropdown.width + url_bar_inner_padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1935 .y = control_y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1936 .width = layout.url_bar.width - dropdown_width - button_width - (4 * padding) - (2 * url_bar_inner_padding),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1937 .height = control_height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1938 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1939
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1940 layout.send_button = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1941 .x = layout.url_input.x + layout.url_input.width + url_bar_inner_padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1942 .y = control_y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1943 .width = button_width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1944 .height = control_height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1945 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1946
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1947 // Body area (below URL bar)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1948 layout.body_area = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1949 .x = layout.content.x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1950 .y = layout.url_bar.y + layout.url_bar.height + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1951 .width = layout.content.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1952 .height = layout.content.height - layout.url_bar.height - (3 * padding)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1953 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1954
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1955 // Split body into input (left) and result (right) panels
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1956 float split_ratio = 0.5f;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1957 layout.input_panel = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1958 .x = layout.body_area.x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1959 .y = layout.body_area.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1960 .width = layout.body_area.width * split_ratio,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1961 .height = layout.body_area.height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1962 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1963
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1964 layout.result_panel = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1965 .x = layout.body_area.x + layout.input_panel.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1966 .y = layout.body_area.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1967 .width = layout.body_area.width - layout.input_panel.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1968 .height = layout.body_area.height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1969 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1970
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1971 // Input panel internals
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1972 float tab_height = 40;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1973 layout.input_tabs = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1974 .x = layout.input_panel.x + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1975 .y = layout.input_panel.y + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1976 .width = layout.input_panel.width - (2 * padding),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1977 .height = tab_height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1978 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1979
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1980 layout.input_body = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1981 .x = layout.input_panel.x + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1982 .y = layout.input_tabs.y + layout.input_tabs.height,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1983 .width = layout.input_panel.width - (2 * padding),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1984 .height = layout.input_panel.height - tab_height - (2 * padding)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1985 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1986
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1987 // Result panel internals
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1988 layout.result_tabs = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1989 .x = layout.result_panel.x + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1990 .y = layout.result_panel.y + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1991 .width = layout.result_panel.width - (2 * padding),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1992 .height = tab_height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1993 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1994
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1995 layout.result_body = (Rectangle){
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1996 .x = layout.result_panel.x + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1997 .y = layout.result_tabs.y + layout.result_tabs.height,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1998 .width = layout.result_panel.width - (2 * padding),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
1999 .height = layout.result_panel.height - tab_height - (2 * padding)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2000 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2001
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2002 return layout;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2003 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2004
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2005 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2006 // DRAWING FUNCTIONS - Separated for clarity
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2007 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2008
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2009 static void DrawSidebar(UILayout *layout, Texture2D logo_texture, float padding)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2010 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2011 // Sidebar background with rounded left corners
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2012 DrawRectangleRec(layout->sidebar, g_colors.primary);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2013
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2014 // Logo
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2015 Rectangle logo_inner = AddPadding(layout->logo_area, padding);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2016 float logo_size = logo_inner.height < logo_inner.width ? logo_inner.height : logo_inner.width;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2017 Rectangle dest_rect = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2018 .x = logo_inner.x + (logo_inner.width - logo_size) / 2,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2019 .y = logo_inner.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2020 .width = logo_size,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2021 .height = logo_size
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2022 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2023 Rectangle source_rect = {0, 0, logo_texture.width, logo_texture.height};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2024 DrawTexturePro(logo_texture, source_rect, dest_rect, (Vector2){0, 0}, 0.0f, WHITE);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2025 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2026
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2027 static void DrawHistoryList(UILayout *layout, Vector2 mouse_pos, float padding, float scroll_offset)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2028 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2029 int32 new_len = Dowa_Array_Length(new_history_items);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2030 int32 history_len = Dowa_Array_Length(history_items);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2031 int32 total = new_len + history_len;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2032 float item_height = 70;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2033
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2034 BeginScissorMode(layout->history_list.x, layout->history_list.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2035 layout->history_list.width, layout->history_list.height);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2036
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2037 int32 visible_index = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2038 for (int i = 0; i < total; i++)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2039 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2040 HistoryItem *item = i < new_len ?
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2041 &new_history_items[new_len - i - 1] : &history_items[i - new_len];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2042
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2043 if (item->deleted) continue;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2044
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2045 // Calculate item rectangle
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2046 Rectangle item_rect = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2047 .x = layout->history_list.x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2048 .y = layout->history_list.y + (padding + item_height) * visible_index + scroll_offset,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2049 .width = layout->history_list.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2050 .height = item_height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2051 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2052 item->rect = item_rect;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2053 visible_index++;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2054
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2055 // Skip if not visible
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2056 if (item_rect.y + item_rect.height < layout->history_list.y ||
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2057 item_rect.y > layout->history_list.y + layout->history_list.height)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2058 continue;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2059
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2060 // Draw item background
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2061 DrawRectangleRounded(item_rect, 0.3f, 8, g_colors.secondary);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2062
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2063 // Title area (top 60%)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2064 Rectangle title_rect = item_rect;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2065 title_rect.height = item_rect.height * 0.55f;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2066
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2067 // Draw title text
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2068 Rectangle title_text_rect = AddPadding(title_rect, 8);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2069 if (item->title)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2070 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2071 DrawTextEx(GuiGetFont(), item->title, (Vector2){ .x=title_text_rect.x, .y=title_text_rect.y + 4 },
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2072 GuiGetStyle(DEFAULT, TEXT_SIZE), TEXT_SIZE_DEFAULT/GuiGetStyle(DEFAULT, TEXT_SIZE), g_colors.text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2073 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2074
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2075 // Button area (bottom 40%)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2076 Rectangle button_area = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2077 .x = item_rect.x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2078 .y = title_rect.y + title_rect.height,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2079 .width = item_rect.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2080 .height = item_rect.height - title_rect.height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2081 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2082
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2083 Rectangle btn_view = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2084 .x = button_area.x + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2085 .y = button_area.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2086 .width = (button_area.width - 3 * padding) / 2,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2087 .height = button_area.height - padding
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2088 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2089
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2090 Rectangle btn_delete = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2091 .x = btn_view.x + btn_view.width + padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2092 .y = btn_view.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2093 .width = btn_view.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2094 .height = btn_view.height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2095 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2096
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2097 // Hover cursor for buttons
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2098 if (CheckCollisionPointRec(mouse_pos, btn_view) ||
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2099 CheckCollisionPointRec(mouse_pos, btn_delete))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2100 SetMouseCursor(MOUSE_CURSOR_POINTING_HAND);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2101
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2102 if (GuiButton(btn_view, "View"))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2103 PostDog_Load_File(item->filename);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2104
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2105 if (GuiButton(btn_delete, "Delete"))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2106 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2107 char delete_path[512];
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2108 if (!remove(PostDog_Construct_URL(item->filename, delete_path, sizeof(delete_path))))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2109 item->deleted = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2110 else
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2111 fprintf(stderr, "Couldn't delete file: %s\n", item->filename);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2112 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2113 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2114
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2115 EndScissorMode();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2116
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2117 // Scrollbar
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2118 float content_height = visible_index * (item_height + padding);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2119 if (content_height > layout->history_list.height)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2120 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2121 float scrollbar_height = (layout->history_list.height / content_height) * layout->history_list.height;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2122 float scrollbar_y = layout->history_list.y - (scroll_offset / content_height) * layout->history_list.height;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2123 Rectangle scrollbar_rect = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2124 layout->history_list.x + layout->history_list.width - 6,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2125 scrollbar_y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2126 4,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2127 scrollbar_height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2128 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2129 DrawRectangleRounded(scrollbar_rect, 0.5f, 4, Fade(g_colors.text_light, 0.5f));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2130 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2131 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2132
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2133 static void DrawURLBar(UILayout *layout, UIState *state, float padding)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2134 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2135 // URL bar background
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2136 Rectangle url_bar_bg = AddPadding(layout->url_bar, padding / 2);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2137 DrawRectangleRounded(url_bar_bg, 0.3f, 8, g_colors.secondary);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2138
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2139 // Combined method dropdown + URL input with rounded corners
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2140 Rectangle combined_input = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2141 .x = layout->method_dropdown.x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2142 .y = layout->method_dropdown.y,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2143 .width = layout->url_input.x + layout->url_input.width - layout->method_dropdown.x,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2144 .height = layout->method_dropdown.height
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2145 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2146
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2147 // Method colors: GET=Green, POST=Blue, PUT=Orange, DELETE=Red
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2148 Color method_colors[] = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2149 (Color){76, 175, 80, 255}, // GET - Green
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2150 (Color){33, 150, 243, 255}, // POST - Blue
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2151 (Color){255, 152, 0, 255}, // PUT - Orange
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2152 (Color){244, 67, 54, 255} // DELETE - Red
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2153 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2154
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2155 // Method dropdown + URL input combined component
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2156 DropdownTextBoxConfig url_config = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2157 .dropdown_items = "GET;POST;PUT;DELETE",
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2158 .dropdown_active = &active_method_dropdown,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2159 .dropdown_edit_mode = &state->method_edit_mode,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2160 .dropdown_width = layout->method_dropdown.width,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2161 .text_buffer = url_input_text,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2162 .text_buffer_size = URL_TEXT_BUFFER_LENGTH,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2163 .text_edit_mode = &state->url_edit_mode,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2164 .corner_radius = 0.2f,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2165 .background_color = g_colors.background,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2166 .border_color = g_colors.border,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2167 .text_color = g_colors.text,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2168 .item_colors = method_colors,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2169 .item_count = 4
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2170 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2171 PostDog_DropdownTextBox(combined_input, url_config);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2172
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2173 // Handle Enter key in URL input
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2174 if (state->url_edit_mode && IsKeyPressed(KEY_ENTER))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2175 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2176 PostDog_Http_Thread_Request();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2177 state->url_edit_mode = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2178 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2179
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2180 // Send button
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2181 DrawRectangleRounded(layout->send_button, 0.3f, 8, g_colors.primary);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2182 Rectangle btn_text_rect = layout->send_button;
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
2183 char *btn_text = "Send";
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2184 int text_width = MeasureText(btn_text, GuiGetStyle(DEFAULT, TEXT_SIZE));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2185 DrawTextEx(GuiGetFont(),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2186 btn_text,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2187 (Vector2){ .x=btn_text_rect.x + (btn_text_rect.width - text_width) / 2, .y=btn_text_rect.y + (btn_text_rect.height - GuiGetStyle(DEFAULT, TEXT_SIZE)) / 2 },
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2188 GuiGetStyle(DEFAULT, TEXT_SIZE), TEXT_SIZE_DEFAULT/GuiGetStyle(DEFAULT, TEXT_SIZE), g_colors.text_light);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2189
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2190 if (CheckCollisionPointRec(GetMousePosition(), layout->send_button) &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2191 IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2192 PostDog_Http_Thread_Request();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2193 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2194
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2195 static void DrawBodyPanels(UILayout *layout, UIState *state, float padding)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2196 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2197 // Draw split panel background (input left, result right)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2198 DrawRectangleSelectiveRounded(layout->input_panel, 12, 8, g_colors.background,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2199 TRUE, FALSE, FALSE, TRUE);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2200 DrawRectangleSelectiveRounded(layout->result_panel, 12, 8,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2201 LOADING ? Fade(g_colors.error, 0.3f) : g_colors.secondary,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2202 FALSE, TRUE, TRUE, FALSE);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2203
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2204 // Tab labels
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2205 const char *tab_labels[] = {"Headers", "Body", "Params", "WebSocket"};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2206 int tab_count = 4;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2207
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2208 // Draw custom tabs
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2209 PostDog_TabBarSimple(layout->input_tabs, tab_labels, tab_count, &active_input_tab);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2210
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2211 // Input body text area
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2212 int text_area_id = TEXT_AREA_ID_INPUT_HEADER + active_input_tab;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2213 if (GuiTextArea(text_area_id, layout->input_body, input_body_array[active_input_tab],
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2214 BODY_BUFFER_LENGTH, state->input_body_edit_mode, TRUE, FALSE, g_text_area_arena))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2215 state->input_body_edit_mode = !state->input_body_edit_mode;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2216
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2217 // WebSocket send button (only on WebSocket tab)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2218 if (active_input_tab == TAB_WEBSOCKET)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2219 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2220 WS_BREAK = FALSE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2221 Rectangle ws_send_btn = {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2222 .x = layout->input_body.x + layout->input_body.width - 90 - padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2223 .y = layout->input_body.y + layout->input_body.height - 35 - padding,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2224 .width = 90,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2225 .height = 35
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2226 };
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2227
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2228 DrawRectangleRounded(ws_send_btn, 0.3f, 8, g_colors.highlight);
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
2229 char *ws_text = !ws ? "Connect" : "Send";
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2230 int ws_text_width = MeasureText(ws_text, GuiGetStyle(DEFAULT, TEXT_SIZE));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2231 DrawTextEx(GuiGetFont(),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2232 ws_text,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2233 (Vector2) { .x=ws_send_btn.x + (ws_send_btn.width - ws_text_width) / 2, .y=ws_send_btn.y + (ws_send_btn.height - GuiGetStyle(DEFAULT, TEXT_SIZE)) / 2 },
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2234 GuiGetStyle(DEFAULT, TEXT_SIZE),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2235 TEXT_SIZE_DEFAULT/GuiGetStyle(DEFAULT, TEXT_SIZE),
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2236 g_colors.text);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2237
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2238 if ((CheckCollisionPointRec(GetMousePosition(), ws_send_btn) &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2239 IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) ||
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2240 (state->input_body_edit_mode && IsKeyDown(KEY_LEFT_SHIFT) && IsKeyPressed(KEY_ENTER)))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2241 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2242 if (!ws)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2243 websocket_thread_id = PostDog_Websocket_Start_Thread();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2244 usleep(10000);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2245 PostDog_Websocket_Send();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2246 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2247 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2248 else
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2249 {
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2250 WS_BREAK = TRUE;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2251 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2252
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2253 // Result tabs
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2254 const char *result_tab_labels[] = {"Body", "Headers"};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2255 int result_tab_count = 2;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2256 PostDog_TabBarSimple(layout->result_tabs, result_tab_labels, result_tab_count, &active_result_tab);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2257
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2258 // Result body text area
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2259 int result_text_area_id = TEXT_AREA_ID_RESULT_BODY + active_result_tab;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2260 // Result text area is readonly (selectable/copyable but not editable)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2261 if (GuiTextArea(result_text_area_id, layout->result_body, result_body_array[active_result_tab],
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2262 RESULT_BUFFER_LENGTH, state->result_body_edit_mode, TRUE, TRUE, g_text_area_arena))
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2263 state->result_body_edit_mode = !state->result_body_edit_mode;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2264
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2265 PostDog_Update_URL(state->url_edit_mode);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2266 }
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2267
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2268 // ============================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2269 // MAIN FUNCTION
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2270 // ============================================================================
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2271 int main()
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2272 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2273 // ========================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2274 // INITIALIZATION
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2275 // ========================================================================
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
2276 SetConfigFlags(FLAG_WINDOW_UNDECORATED);
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2277
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2278 // Initialize libuv
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2279 main_loop = uv_default_loop();
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2280 uv_mutex_init(&history_mutex);
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2281
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2282 // Initialize color scheme
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2283 PostDog_InitColorScheme();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2284
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2285 // Initialize window
111
48f260576059 [PostDog] Rewriting it from scratch as it is unreadable for me.
June Park <parkjune1995@gmail.com>
parents: 63
diff changeset
2286 InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "PostDog");
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2287 SetWindowState(FLAG_WINDOW_RESIZABLE);
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2288 SetTargetFPS(60);
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2289
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2290 // Load resources
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2291 Font customFont = LoadFontEx("postdog/Roboto-Regular.ttf", 20, 0, 0);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2292 GuiSetFont(customFont);
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
2293 GuiSetStyle(DEFAULT, TEXT_SIZE, TEXT_SIZE_DEFAULT);
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2294
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2295 Image logo_original = LoadImage("postdog/logo_bigger.png");
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2296 ImageResize(&logo_original, 200, 200);
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
2297 SetWindowIcon(logo_original);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
2298 Texture2D logo_texture = LoadTextureFromImage(logo_original);
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2299 // ToggleBorderlessWindowed();
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
2300 UnloadImage(logo_original);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2301
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2302 // Initialize text area arena
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2303 g_text_area_arena = Dowa_Arena_Create(1024 * 1024 * 4);
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
2304
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2305 // Initialize history
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2306 Dowa_Array_Reserve(history_items, 10);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2307 Dowa_Array_Reserve(new_history_items, 10);
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2308 PostDog_History_Load(&history_items);
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2309
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2310 // Initialize text buffers
118
249881ceff7b [PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
June Park <parkjune1995@gmail.com>
parents: 117
diff changeset
2311 url_input_text = (char *)malloc(sizeof(char) * URL_TEXT_BUFFER_LENGTH);
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2312 snprintf(url_input_text, URL_TEXT_BUFFER_LENGTH, URL_TEXT_DEFAULT);
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
2313
155
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
2314 Dowa_Array_Push(input_body_array, (char *)malloc(sizeof(char) * HEADER_BUFFER_LENGTH));
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
2315 Dowa_Array_Push(input_body_array, (char *)malloc(sizeof(char) * BODY_BUFFER_LENGTH));
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
2316 Dowa_Array_Push(input_body_array, (char *)malloc(sizeof(char) * DEFAULT_TEXT_BUFFER_LENGTH));
3bb45eb67906 [Postdog] Updated variables names and padding sizes. Needs more work.
June Park <parkjune1995@gmail.com>
parents: 153
diff changeset
2317 Dowa_Array_Push(input_body_array, (char *)malloc(sizeof(char) * DEFAULT_TEXT_BUFFER_LENGTH));
112
d6d578b49a19 [PostDog] Got CRUD working.
June Park <parkjune1995@gmail.com>
parents: 111
diff changeset
2318
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2319 snprintf(input_body_array[TAB_HEADER], HEADER_BUFFER_LENGTH, HEADER_TEXT_DEFAULT);
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2320 snprintf(input_body_array[TAB_BODY], BODY_BUFFER_LENGTH, BODY_TEXT_DEFAULT);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2321 snprintf(input_body_array[TAB_GET_PARAMS], DEFAULT_TEXT_BUFFER_LENGTH, GET_PARAM_TEXT_DEFAULT);
172
0face9898d04 [PostDog] Small changes.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
2322 snprintf(input_body_array[TAB_WEBSOCKET], DEFAULT_TEXT_BUFFER_LENGTH, GET_PARAM_TEXT_DEFAULT);
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2323
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2324 // Initialize result buffers (body and headers tabs)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2325 Dowa_Array_Push(result_body_array, (char *)malloc(sizeof(char) * RESULT_BUFFER_LENGTH));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2326 Dowa_Array_Push(result_body_array, (char *)malloc(sizeof(char) * RESULT_BUFFER_LENGTH));
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2327 result_body_array[RESULT_TAB_BODY][0] = '\0';
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2328 result_body_array[RESULT_TAB_HEADERS][0] = '\0';
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2329
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2330 // Initialize UI state
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2331 UIState ui_state = {0};
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2332 float padding = 10.0f;
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2333
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2334 // ========================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2335 // MAIN LOOP
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2336 // ========================================================================
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2337 while (!WindowShouldClose())
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2338 {
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2339 // Process libuv events (non-blocking)
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2340 uv_run(main_loop, UV_RUN_NOWAIT);
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2341
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2342 // Handle keyboard shortcuts
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2343 DefaultBehaviours();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2344
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2345 // ====================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2346 // LAYOUT CALCULATION
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2347 // ====================================================================
111
48f260576059 [PostDog] Rewriting it from scratch as it is unreadable for me.
June Park <parkjune1995@gmail.com>
parents: 63
diff changeset
2348 int screen_width = GetScreenWidth();
48f260576059 [PostDog] Rewriting it from scratch as it is unreadable for me.
June Park <parkjune1995@gmail.com>
parents: 63
diff changeset
2349 int screen_height = GetScreenHeight();
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2350 UILayout layout = CalculateLayout(screen_width, screen_height, padding);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2351
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2352 // ====================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2353 // INPUT HANDLING
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2354 // ====================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2355 Vector2 mouse_pos = GetMousePosition();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2356 float mouse_wheel = GetMouseWheelMove();
115
96db6c3f38d6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 114
diff changeset
2357
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2358 // Reset cursor
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2359 SetMouseCursor(MOUSE_CURSOR_DEFAULT);
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2360
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2361 // History scroll
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2362 if (CheckCollisionPointRec(mouse_pos, layout.history_list) && mouse_wheel != 0)
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2363 {
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2364 ui_state.history_scroll_offset += mouse_wheel * 30;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2365 int32 total = Dowa_Array_Length(new_history_items) + Dowa_Array_Length(history_items);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2366 float content_height = total * 80;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2367 float max_scroll = content_height - layout.history_list.height;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2368 if (ui_state.history_scroll_offset > 0) ui_state.history_scroll_offset = 0;
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2369 if (max_scroll > 0 && ui_state.history_scroll_offset < -max_scroll)
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2370 ui_state.history_scroll_offset = -max_scroll;
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2371 }
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2372
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2373 // Cursor changes for interactive areas
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2374 if (CheckCollisionPointRec(mouse_pos, layout.send_button) ||
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2375 CheckCollisionPointRec(mouse_pos, layout.input_tabs) ||
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2376 CheckCollisionPointRec(mouse_pos, layout.logo_area))
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
2377 SetMouseCursor(MOUSE_CURSOR_POINTING_HAND);
114
e2a73e64e8e6 [Postdog] Got history working.
June Park <parkjune1995@gmail.com>
parents: 112
diff changeset
2378
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2379 // Logo click resets
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2380 if (CheckCollisionPointRec(mouse_pos, layout.logo_area) &&
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2381 IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
2382 PostDog_Params_Reset();
116
7bd795bac997 [Postdog] Added scrollable area to inputs and history files, buttons to delete and view.
June Park <parkjune1995@gmail.com>
parents: 115
diff changeset
2383
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2384 // ====================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2385 // DRAWING
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2386 // ====================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2387 BeginDrawing();
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2388 ClearBackground(g_colors.background);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2389 DrawRectangleSelectiveRounded(layout.content, 12, 8, g_colors.secondary,
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2390 FALSE, TRUE, TRUE, FALSE);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2391 DrawSidebar(&layout, logo_texture, padding);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2392 DrawHistoryList(&layout, mouse_pos, padding, ui_state.history_scroll_offset);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2393 DrawBodyPanels(&layout, &ui_state, padding);
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2394 DrawURLBar(&layout, &ui_state, padding);
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2395 EndDrawing();
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2396 }
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
2397
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2398 // ========================================================================
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2399 // CLEANUP
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2400 // ========================================================================
159
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
2401 GuiTextAreaResetAllStates();
05cf9467a1c3 [Postdog] Updated to use text area that can handle like html text area.
June Park <parkjune1995@gmail.com>
parents: 155
diff changeset
2402 Dowa_Arena_Free(g_text_area_arena);
161
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2403
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2404 uv_mutex_destroy(&history_mutex);
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2405 uv_loop_close(main_loop);
87d8d3eb3491 [PostDog] WIP to make it more mordern looking
June Park <parkjune1995@gmail.com>
parents: 159
diff changeset
2406
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2407 UnloadTexture(logo_texture);
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2408 CloseWindow();
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 161
diff changeset
2409
54
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2410 return 0;
b3e82d22f961 [PostDog] Initial commit BROKEN
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2411 }