Mercurial
annotate postdog/main.c @ 279:b3b547563ec7
Add Google connector service and agent wiki
Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:22:36 -0700 |
| 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 } |