vn/code/vn_workspace_text_editor.h

120 lines
2.8 KiB
C
Raw Permalink Normal View History

2023-07-19 15:09:41 +00:00
/* date = July 11th 2023 0:34 pm */
#ifndef VN_WORKSPACE_TEXT_EDITOR_H
#define VN_WORKSPACE_TEXT_EDITOR_H
////////////////////////////////
//~ sixten: Mutable String Types
struct mutable_string
{
2023-12-26 08:11:41 +00:00
arena *Arena;
string String;
2023-07-19 15:09:41 +00:00
};
2023-07-24 13:50:57 +00:00
////////////////////////////////
//~ sixten: History & Undo Types
struct history_entry
2023-07-19 15:09:41 +00:00
{
2023-12-26 08:11:41 +00:00
range1_s64 Range;
string ReplaceString;
2023-07-24 13:50:57 +00:00
};
struct history_node
{
2023-12-26 08:11:41 +00:00
history_node *Next;
history_node *Prev;
history_entry Forward;
history_entry Backward;
2023-07-19 15:09:41 +00:00
};
struct history_list
{
2023-12-26 08:11:41 +00:00
history_node *At;
history_node Sentinel;
2023-07-19 15:09:41 +00:00
};
////////////////////////////////
//~ sixten: Workspace Text Editor Types
struct workspace_text_data
{
2023-12-26 08:11:41 +00:00
token_array Tokens;
range1_s64_array Lines;
s64 MaxLineCount;
2023-07-19 15:09:41 +00:00
};
struct workspace_view_text_editor
{
2023-12-26 08:11:41 +00:00
// sixten: processed text
arena *ProcessingArena;
token_array Tokens;
range1_s64_array Lines;
s64 MaxLineCount;
2024-01-20 11:18:57 +00:00
compiled_scene2 Compiled;
2023-12-26 08:11:41 +00:00
// sixten: text being edited
string FileName;
string FilePath;
mutable_string Text;
// sixten: text editing
text_edit_state EditState;
text_point LastTextPoint;
// sixten: text rendering
r32 FontSize;
// sixten: history
arena *HistoryArena;
history_list History;
history_node *SavePoint;
// sixten: ui building & rendering
2024-01-20 11:18:57 +00:00
v2_r32 Offset;
v2_r32 AnimatedOffset;
2023-07-19 15:09:41 +00:00
};
////////////////////////////////
//~ sixten: Mutable String Functions
static mutable_string MutableStringAllocate(u64 Size);
static void MutableStringRelease(mutable_string *String);
static void MutableStringReplaceRange(mutable_string *String, string ReplaceString, range1_s64 Range);
2024-01-20 11:18:57 +00:00
2023-07-24 13:50:57 +00:00
////////////////////////////////
//~ sixten: History & Undo Functions
static history_entry HistoryEntry(arena *Arena, string ReplaceString, range1_s64 Range);
static void AppendToHistory(arena *Arena, history_list *List, history_entry Forward, history_entry Backward);
2023-07-24 13:50:57 +00:00
2024-01-20 11:18:57 +00:00
2023-07-19 15:09:41 +00:00
////////////////////////////////
2023-08-22 03:19:51 +00:00
//~ sixten: Workspace Text Editing Functions
2023-07-19 15:09:41 +00:00
static workspace_text_data W_TextDataFromString(arena *Arena, string Text);
2023-08-22 03:19:51 +00:00
static void W_TextEditorApplyChanges(workspace_view_text_editor *Editor);
static void W_SaveTextEditorToFile(workspace_view_text_editor *Editor);
2024-01-20 11:18:57 +00:00
static b32 W_ProcessTextEditorEvent(workspace_view_text_editor *Editor, platform_event *Event);
static b32 W_ProcessDigitalKeyEvent(workspace_view_text_editor *Editor, platform_event_type Type, u32 Data);
2023-08-22 03:19:51 +00:00
////////////////////////////////
2024-01-20 11:18:57 +00:00
//~ sixten: Workspace Text Editor Draw Callbacks
2023-08-22 03:19:51 +00:00
static UI_CUSTOM_DRAW_CALLBACK(W_TextEditorDrawCallback);
2024-01-20 11:18:57 +00:00
static UI_CUSTOM_DRAW_CALLBACK(W_TextEditorLinesBarDrawCallback);
////////////////////////////////
//~ sixten: Workspace Text Editor Builder Functions
2023-08-22 03:19:51 +00:00
static void W_BuildTextEditorInfoBar(workspace_view_text_editor *Editor);
2024-01-20 11:18:57 +00:00
static void W_BuildTextEditorErrorList(workspace_view_text_editor *Editor);
2023-08-22 03:19:51 +00:00
static void W_BuildTextEditor(workspace_view *View);
2023-07-19 15:09:41 +00:00
2024-01-20 11:18:57 +00:00
2023-07-19 15:09:41 +00:00
#endif //VN_WORKSPACE_TEXT_EDITOR_H