Mercurial
annotate postdog/main.c @ 203:92a57bd716c1
removed unused file
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sun, 15 Feb 2026 09:13:09 -0800 |
| parents | 0face9898d04 |
| children |
| 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 | 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 | 41 // #define URL_TEXT_DEFAULT "https://httpbin.org/get" |
| 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 | 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 | 1554 perror("Failed to create thread"); |
| 1555 memset(&thread_id, 0, sizeof(thread_id)); | |
| 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 | 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 | 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 | 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 | 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 | 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 } |