2023-06-17 17:00:55 +00:00
|
|
|
/* date = May 5th 2023 10:12 am */
|
|
|
|
|
|
|
|
#ifndef VN_WORKSPACE_H
|
|
|
|
#define VN_WORKSPACE_H
|
|
|
|
|
2023-08-22 03:19:51 +00:00
|
|
|
////////////////////////////////
|
|
|
|
//~ sixten: Workspace Types
|
2023-06-17 17:00:55 +00:00
|
|
|
|
|
|
|
// sixten(TODO): Remove this type entirely.
|
|
|
|
enum toolbar_menu
|
|
|
|
{
|
|
|
|
ToolbarMenu_None = 0,
|
|
|
|
ToolbarMenu_Panel,
|
|
|
|
ToolbarMenu_View,
|
|
|
|
ToolbarMenu_Window,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct workspace_panel
|
|
|
|
{
|
|
|
|
workspace_panel *First;
|
|
|
|
workspace_panel *Last;
|
|
|
|
workspace_panel *Next;
|
|
|
|
workspace_panel *Prev;
|
|
|
|
workspace_panel *Parent;
|
|
|
|
|
|
|
|
struct workspace_view *FirstView;
|
|
|
|
struct workspace_view *LastView;
|
|
|
|
|
|
|
|
struct workspace_view *CurrentView;
|
|
|
|
|
|
|
|
axis2 SplitAxis;
|
|
|
|
r32 PercentOfParent;
|
|
|
|
};
|
|
|
|
|
2023-07-19 15:09:41 +00:00
|
|
|
#define WORKSPACE_COMMAND(name, ...) void name(u64 Argument)
|
2023-06-17 17:00:55 +00:00
|
|
|
typedef WORKSPACE_COMMAND(workspace_command_sig);
|
|
|
|
|
|
|
|
struct workspace_command
|
|
|
|
{
|
|
|
|
workspace_command_sig *Command;
|
|
|
|
u64 Argument;
|
|
|
|
|
|
|
|
workspace_command *Next;
|
|
|
|
workspace_command *Prev;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct workspace_keybind
|
|
|
|
{
|
|
|
|
platform_key Key;
|
|
|
|
platform_modifiers Modifiers;
|
|
|
|
workspace_command_sig *Command;
|
|
|
|
u64 Argument;
|
|
|
|
};
|
|
|
|
|
|
|
|
enum workspace_drag_payload_state
|
|
|
|
{
|
2023-08-22 03:19:51 +00:00
|
|
|
W_DragPayload_Inactive = 0,
|
|
|
|
W_DragPayload_Active,
|
|
|
|
W_DragPayload_Released,
|
2023-06-17 17:00:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct workspace_drag_payload
|
|
|
|
{
|
|
|
|
ui_key Key;
|
|
|
|
workspace_view *View;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct workspace
|
|
|
|
{
|
2023-06-19 17:12:26 +00:00
|
|
|
vn_input *Input;
|
2023-06-17 17:00:55 +00:00
|
|
|
platform_event_list *EventList;
|
|
|
|
|
2023-08-06 10:35:09 +00:00
|
|
|
// sixten: General Purpose Allocation
|
|
|
|
memory_arena *FrameArena;
|
|
|
|
|
2023-06-17 17:00:55 +00:00
|
|
|
// sixten: Command Allocation
|
2023-07-19 15:09:41 +00:00
|
|
|
memory_arena *CommandArena;
|
2023-06-17 17:00:55 +00:00
|
|
|
workspace_command *FirstFreeCommand;
|
|
|
|
workspace_command *LastFreeCommand;
|
|
|
|
|
|
|
|
// sixten: Command List
|
|
|
|
workspace_command *FirstCommand;
|
|
|
|
workspace_command *LastCommand;
|
|
|
|
|
|
|
|
// sixten: Panels
|
2023-07-19 15:09:41 +00:00
|
|
|
memory_arena *PanelArena;
|
2023-06-17 17:00:55 +00:00
|
|
|
workspace_panel *FirstFreePanel;
|
|
|
|
workspace_panel *LastFreePanel;
|
|
|
|
|
|
|
|
workspace_drag_payload_state DragPayloadState;
|
|
|
|
workspace_drag_payload DragPayload;
|
|
|
|
|
|
|
|
toolbar_menu Menu;
|
|
|
|
v2 MenuP;
|
|
|
|
r32 MenuTransition;
|
|
|
|
|
|
|
|
workspace_panel *RootPanel;
|
|
|
|
workspace_panel *CurrentPanel;
|
|
|
|
};
|
|
|
|
|
2023-08-22 03:19:51 +00:00
|
|
|
#include "vn_workspace_editor.h"
|
|
|
|
#include "vn_workspace_text_editor.h"
|
2023-09-05 17:50:49 +00:00
|
|
|
#include "vn_workspace_character_editor.h"
|
2023-08-22 03:19:51 +00:00
|
|
|
#include "vn_workspace_view.h"
|
|
|
|
|
|
|
|
////////////////////////////////
|
|
|
|
//~ sixten: Workspace Functions
|
|
|
|
|
2023-07-19 15:09:41 +00:00
|
|
|
//- sixten: State management
|
2023-08-22 03:19:51 +00:00
|
|
|
static void W_SetState(workspace *Workspace);
|
|
|
|
static workspace *W_GetState(void);
|
|
|
|
static memory_arena *W_FrameArena(void);
|
2023-07-19 15:09:41 +00:00
|
|
|
|
2023-06-17 17:00:55 +00:00
|
|
|
//- sixten: Commands
|
2023-08-22 03:19:51 +00:00
|
|
|
static void W_IssueCommand(workspace_command_sig *Sig, u64 Argument);
|
|
|
|
static void W_ProcessCommands(void);
|
2023-06-17 17:00:55 +00:00
|
|
|
|
|
|
|
//- sixten: Panels
|
2023-08-22 03:19:51 +00:00
|
|
|
static workspace_panel *W_CreateNewPanel(workspace_panel *Parent);
|
|
|
|
static void W_DeletePanel(workspace_panel *Panel);
|
|
|
|
static void W_SplitPanel(workspace_panel *Panel, axis2 Axis);
|
2023-06-17 17:00:55 +00:00
|
|
|
|
|
|
|
//- sixten: Builder code
|
2023-08-22 03:19:51 +00:00
|
|
|
static ui_signal W_BuildToolbarButton(char *Text, toolbar_menu Menu);
|
|
|
|
static ui_signal W_BuildMenuItem(u32 Icon, char *Text, char *Shortcut);
|
|
|
|
static void W_BuildToolbar(r32 dtForFrame);
|
2023-06-17 17:00:55 +00:00
|
|
|
|
|
|
|
//- sixten: Workspace
|
2023-08-22 03:19:51 +00:00
|
|
|
static void W_Init(workspace *Workspace);
|
|
|
|
static void W_Update(workspace *Workspace, vn_render_commands *RenderCommands, vn_input *Input, glyph_atlas *GlyphAtlas);
|
2023-06-17 17:00:55 +00:00
|
|
|
|
|
|
|
#endif //VN_WORKSPACE_H
|