vn/code/vn_debug_info.cpp

108 lines
3.2 KiB
C++

////////////////////////////////
//~ sixten: Debug Info Functions
per_thread debug_info *ThreadLocal_DebugInfo = 0;
//- sixten: manage state
static debug_info *DI_DebugInfoAlloc(void)
{
arena *Arena = ArenaAlloc(Kilobytes(1), true);
debug_info *Result = PushStruct(Arena, debug_info);
Result->Arena = Arena;
return(Result);
}
static void DI_BeginFrame(debug_info *DebugInfo)
{
ThreadLocal_DebugInfo = DebugInfo;
DebugInfo->FrameTemp = BeginTemp(DebugInfo->Arena);
}
static void DI_EndFrame()
{
}
//- sixten: user interface
static void DI_Info(string Message)
{
debug_info *DebugInfo = ThreadLocal_DebugInfo;
debug_info_node *Node = PushStruct(DebugInfo->Arena, debug_info_node);
Node->Message = PushString(DebugInfo->Arena, Message);
DLLInsertLast(DebugInfo->First, DebugInfo->Last, Node);
}
static void DI_InfoF(char *Format, ...)
{
debug_info *DebugInfo = ThreadLocal_DebugInfo;
va_list Arguments;
va_start(Arguments, Format);
temp Scratch = GetScratch();
string Message = PushFormatVariadic(DebugInfo->Arena, Format, Arguments);
DI_Info(Message);
ReleaseScratch(Scratch);
va_end(Arguments);
}
static void DI_BuildInfo(void)
{
debug_info *DebugInfo = ThreadLocal_DebugInfo;
AC_AnimateValueDirect(DebugInfo->Open, 0.3f, &DebugInfo->OpenT);
if(!DLLIsEmpty(DebugInfo->First))
{
UI_Tooltip
{
UI_SetNextBackgroundColor(SetAlpha(Theme_BackgroundColor, 0.5f));
UI_SetNextSize(UI_Em(15, 1), UI_ChildrenSum(1, 1));
UI_SetNextCornerRadius(4.0f);
UI_SetNextHoverCursor(PlatformCursor_ArrowAll);
ui_box *Box = UI_MakeBox(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawBorder|UI_BoxFlag_Clickable|
UI_BoxFlag_HotAnimation|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY|UI_BoxFlag_Clip,
StrLit("DI Container"));
UI_Parent(Box)
{
UI_Size(UI_Percent(1, 1), UI_ChildrenSum(1, 1)) UI_Row() UI_Width(UI_TextContent(15, 1)) UI_Height(UI_TextContent(15, 1))
{
UI_Font(Font_Bold) UI_LabelF("Debug Info");
UI_Spacer(UI_Percent(1, 0));
UI_Font(Font_Icons)
{
ui_box *ExpandBox = UI_MakeBoxF(UI_BoxFlag_DrawText|UI_BoxFlag_Clickable|UI_BoxFlag_HotAnimation, "%U", DebugInfo->Open?FontIcon_DownDir:FontIcon_RightDir);
ui_signal ExpandBoxSignal = UI_SignalFromBox(ExpandBox);
if(ExpandBoxSignal.Pressed)
{
DebugInfo->Open = !DebugInfo->Open;
}
}
}
UI_Height(UI_ChildrenSum(DebugInfo->OpenT, 1)) UI_Column()
{
UI_Width(UI_TextContent(15, 1)) UI_Height(UI_TextContent(15, 1))
for(debug_info_node *Node = DebugInfo->First; Node != 0; Node = Node->Next)
{
ui_box *MessageBox = UI_MakeBoxF(UI_BoxFlag_DrawText, "%p", Node);
UI_EquipBoxText(MessageBox, Node->Message);
}
}
}
ui_signal Signal = UI_SignalFromBox(Box);
if(Signal.Dragging)
{
if(Signal.Pressed)
{
UI_StoreDragV2(DebugInfo->RelativeP);
}
v2 StartP = UI_GetDragV2();
v2 EndP = StartP + Signal.DragDelta;
DebugInfo->RelativeP = EndP;
}
Box->FixedP = DebugInfo->RelativeP;
}
}
// sixten: after building we assume that the data should be released
EndTemp(DebugInfo->FrameTemp);
DebugInfo->First = DebugInfo->Last = 0;
}