compressed some ui drawing code.

This commit is contained in:
Peter Slattery 2020-06-21 21:59:42 -07:00
parent a0072cd57b
commit dc25b268f7
7 changed files with 83 additions and 56 deletions

View File

@ -139,7 +139,7 @@ INITIALIZE_APPLICATION(InitializeApplication)
AddCodepointToFont(Font, Codepoint, 0, 0, CodepointW, CodepointH, CodepointX, CodepointY);
}
State->Interface.Font = Font;
State->Interface_.Style.Font = Font;
Font->BitmapTextureHandle = Context.PlatformGetGPUTextureHandle(Font->BitmapMemory,
Font->BitmapWidth, Font->BitmapHeight);
@ -150,23 +150,21 @@ INITIALIZE_APPLICATION(InitializeApplication)
}
}
State->Interface.FontSize = FontSize;
State->Interface.PanelBGColors[0] = v4{.3f, .3f, .3f, 1};
State->Interface.PanelBGColors[1] = v4{.4f, .4f, .4f, 1};
State->Interface.PanelBGColors[2] = v4{.5f, .5f, .5f, 1};
State->Interface.PanelBGColors[3] = v4{.6f, .6f, .6f, 1};
State->Interface.ButtonColor_Inactive = BlackV4;
State->Interface.ButtonColor_Active = v4{.1f, .1f, .1f, 1};
State->Interface.ButtonColor_Selected = v4{.1f, .1f, .3f, 1};
State->Interface.TextColor = WhiteV4;
State->Interface.ListBGColors[0] = v4{ .16f, .16f, .16f, 1.f };
State->Interface.ListBGColors[1] = v4{ .18f, .18f, .18f, 1.f };
State->Interface.ListBGHover = v4{ .22f, .22f, .22f, 1.f };
State->Interface.ListBGSelected = v4{.44f, .44f, .44f, 1.f };
State->Interface.Margin = v2{5, 5};
State->Interface.RowHeight = State->Interface.Font->PixelHeight + 2 * State->Interface.Margin.y;
State->Interface_.Style = State->Interface;
State->Interface_.Style.FontSize = FontSize;
State->Interface_.Style.PanelBGColors[0] = v4{.3f, .3f, .3f, 1};
State->Interface_.Style.PanelBGColors[1] = v4{.4f, .4f, .4f, 1};
State->Interface_.Style.PanelBGColors[2] = v4{.5f, .5f, .5f, 1};
State->Interface_.Style.PanelBGColors[3] = v4{.6f, .6f, .6f, 1};
State->Interface_.Style.ButtonColor_Inactive = BlackV4;
State->Interface_.Style.ButtonColor_Active = v4{.1f, .1f, .1f, 1};
State->Interface_.Style.ButtonColor_Selected = v4{.1f, .1f, .3f, 1};
State->Interface_.Style.TextColor = WhiteV4;
State->Interface_.Style.ListBGColors[0] = v4{ .16f, .16f, .16f, 1.f };
State->Interface_.Style.ListBGColors[1] = v4{ .18f, .18f, .18f, 1.f };
State->Interface_.Style.ListBGHover = v4{ .22f, .22f, .22f, 1.f };
State->Interface_.Style.ListBGSelected = v4{.44f, .44f, .44f, 1.f };
State->Interface_.Style.Margin = v2{5, 5};
State->Interface_.Style.RowHeight = ui_GetTextLineHeight(State->Interface_);
State->SACN = InitializeSACN(Context);
State->NetworkProtocolHeaderSize = STREAM_HEADER_SIZE;

View File

@ -72,7 +72,6 @@ struct app_state
text_entry ActiveTextEntry;
ui_interface Interface_;
interface_config Interface;
animation_system AnimationSystem;
gs_list_handle SelectedAnimationBlockHandle;

View File

@ -339,10 +339,18 @@ ui_LayoutRemaining(ui_layout Layout)
}
return Result;
}
//
// Drawing Functions
//
static r32
ui_GetTextLineHeight(ui_interface Interface)
{
r32 Result = Interface.Style.Font->PixelHeight + (2 * Interface.Style.Margin.y);
return Result;
}
static void
ui_FillRect(ui_interface* Interface, rect Bounds, v4 Color)
{
@ -430,6 +438,37 @@ ui_Button(ui_interface* Interface, string Text, rect Bounds)
return ui_Button(Interface, Text, Bounds, BGColor, HoverColor, SelectedColor);
}
struct list_item_colors
{
v4 Hover;
v4 Selected;
v4 BGColor;
};
inline v4
ui_GetListItemBGColor(interface_config Style, u32 ElementIndex)
{
v4 Result = Style.ListBGColors[ElementIndex % LIST_BG_COLORS_COUNT];
return Result;
}
static list_item_colors
ui_GetListItemColors(ui_interface* Interface, u32 ListItemIndex)
{
list_item_colors Result = {};
Result.Hover = Interface->Style.ListBGHover;
Result.Selected = Interface->Style.ListBGSelected;
Result.BGColor = ui_GetListItemBGColor(Interface->Style, ListItemIndex);
return Result;
}
static b32
ui_ListButton(ui_interface* Interface, string Text, rect Bounds, u32 ListItemIndex)
{
list_item_colors Colors = ui_GetListItemColors(Interface, ListItemIndex);
return ui_Button(Interface, Text, Bounds, Colors.Hover, Colors.Selected, Colors.BGColor);
}
static b32
ui_LayoutButton(ui_interface* Interface, ui_layout* Layout, string Text, v4 BGColor, v4 HoverColor, v4 SelectColor)
{
@ -450,11 +489,11 @@ ui_LayoutButton(ui_interface* Interface, ui_layout* Layout, string Text)
return ui_LayoutButton(Interface, Layout, Text, BGColor, HoverColor, SelectedColor);
}
inline v4
ui_GetListItemBGColor(interface_config Style, u32 ElementIndex)
static b32
ui_LayoutListButton(ui_interface* Interface, ui_layout* Layout, string Text, u32 ListItemIndex)
{
v4 Result = Style.ListBGColors[ElementIndex % LIST_BG_COLORS_COUNT];
return Result;
list_item_colors Colors = ui_GetListItemColors(Interface, ListItemIndex);
return ui_LayoutButton(Interface, Layout, Text, Colors.Hover, Colors.Selected, Colors.BGColor);
}
static b32

View File

@ -317,7 +317,7 @@ DrawFrameBar (animation_system* AnimationSystem, render_command_buffer* RenderBu
r32 FramePercent = FrameToPercentRange(Frame, VisibleFrames);
r32 FrameX = GSLerp(BarBounds.Min.x, BarBounds.Max.x, FramePercent);
v2 FrameTextPos = v2{FrameX, BarBounds.Min.y + 2};
DrawString(RenderBuffer, TempString, State->Interface.Font, FrameTextPos, WhiteV4);
DrawString(RenderBuffer, TempString, State->Interface_.Style.Font, FrameTextPos, WhiteV4);
}
// Time Slider
@ -335,7 +335,7 @@ DrawFrameBar (animation_system* AnimationSystem, render_command_buffer* RenderBu
PushRenderQuad2D(RenderBuffer, HeadMin, HeadMax, TimeSliderColor);
PrintF(&TempString, "%d", AnimationSystem->CurrentFrame);
DrawString(RenderBuffer, TempString, State->Interface.Font, HeadMin + v2{6, 4}, WhiteV4);
DrawString(RenderBuffer, TempString, State->Interface_.Style.Font, HeadMin + v2{6, 4}, WhiteV4);
}
}
@ -418,7 +418,7 @@ DrawLayerMenu(animation_system* AnimationSystem, rect PanelDim, render_command_b
{
PushRenderBoundingBox2D(RenderBuffer, gs_RectExpand(LayerBounds), 1, WhiteV4);
}
DrawString(RenderBuffer, Layer->Name, State->Interface.Font, LayerTextPos, WhiteV4);
DrawString(RenderBuffer, Layer->Name, State->Interface_.Style.Font, LayerTextPos, WhiteV4);
}
}

View File

@ -30,42 +30,40 @@ internal void
HierarchyView_Render(panel Panel, rect PanelBounds, render_command_buffer* RenderBuffer, app_state* State, context Context, mouse_state Mouse)
{
ui_layout Layout = ui_CreateLayout(State->Interface_, PanelBounds);
v4 ListItemHover = State->Interface_.Style.ListBGHover;
v4 ListItemSelected = State->Interface_.Style.ListBGSelected;
string TempString = PushString(&State->Transient, 256);
u32 LineCount = (u32)(gs_Height(PanelBounds) / Layout.RowHeight) + 1;
u32 LinesDrawn = 0;
u32 AssembliesToDraw = GSMin(LineCount, State->Assemblies.Count);
rect* LineBounds = PushArray(&State->Transient, rect, LineCount);
// Fill in alternating color rows for the backgrounds
for (u32 Line = 0; Line < LineCount; Line++)
{
LineBounds[Line] = ui_ReserveElementBounds(&Layout);
v4 ListItemBGColor = ui_GetListItemBGColor(State->Interface_.Style, Line);
ui_FillRect(&State->Interface_, LineBounds[Line], ListItemBGColor);
}
for (u32 AssemblyIndex = 0; AssemblyIndex < AssembliesToDraw; AssemblyIndex++)
{
rect Bounds = ui_ReserveElementBounds(&Layout);
v4 ListItemBGColor = ui_GetListItemBGColor(State->Interface_.Style, AssemblyIndex);
ui_FillRect(&State->Interface_, Bounds, ListItemBGColor);
assembly Assembly = State->Assemblies.Values[AssemblyIndex];
PrintF(&TempString, "%S", Assembly.Name);
ui_layout ItemLayout = ui_CreateLayout(State->Interface_, Bounds);
ui_layout ItemLayout = ui_CreateLayout(State->Interface_, LineBounds[AssemblyIndex]);
ui_StartRow(&ItemLayout, 2);
{
ui_LayoutDrawString(&State->Interface_, &ItemLayout, TempString, State->Interface_.Style.TextColor);
if (ui_LayoutButton(&State->Interface_, &ItemLayout, MakeStringLiteral("X"), ListItemBGColor, ListItemHover, ListItemSelected))
if (ui_LayoutListButton(&State->Interface_, &ItemLayout, MakeStringLiteral("X"), AssemblyIndex))
{
UnloadAssembly(AssemblyIndex, State, Context);
}
}
ui_EndRow(&ItemLayout);
LinesDrawn += 1;
}
if (LinesDrawn < LineCount)
if (AssembliesToDraw < LineCount)
{
v4 ListItemBGColor = ui_GetListItemBGColor(State->Interface_.Style, LinesDrawn++);
PrintF(&TempString, "+ Add Assembly");
if (ui_LayoutButton(&State->Interface_, &Layout, TempString, ListItemBGColor, ListItemHover, ListItemSelected))
if (ui_ListButton(&State->Interface_, TempString, LineBounds[AssembliesToDraw], AssembliesToDraw))
{
string FilePath = PushString(&State->Transient, 256);
b32 Success = GetFilePath(Context, &FilePath, "Foldhaus Files\0*.fold\0\0");
@ -74,13 +72,6 @@ HierarchyView_Render(panel Panel, rect PanelBounds, render_command_buffer* Rende
LoadAssembly(&State->Assemblies, &State->LedSystem, &State->Transient, Context, FilePath, State->GlobalLog);
}
}
for (; LinesDrawn < LineCount; LinesDrawn++)
{
rect Bounds = ui_ReserveElementBounds(&Layout);
ListItemBGColor = ui_GetListItemBGColor(State->Interface_.Style, LinesDrawn);
ui_FillRect(&State->Interface_, Bounds, ListItemBGColor);
}
}
}

View File

@ -436,7 +436,7 @@ NodeGraph_Render(panel Panel, rect PanelBounds, render_command_buffer* RenderBuf
r32 NodeWidth = 150;
r32 LayerDistance = 100;
r32 LineHeight = (State->Interface.Font->PixelHeight + (2 * State->Interface.Margin.y));
r32 LineHeight = ui_GetTextLineHeight(State->Interface_);
if (GraphState->LayoutIsDirty)
{
@ -477,7 +477,7 @@ NodeGraph_Render(panel Panel, rect PanelBounds, render_command_buffer* RenderBuf
{
visual_node VisualNode = GraphState->Layout.VisualNodes[i];
gs_list_handle NodeHandle = State->NodeWorkspace.SortedNodeHandles[i];
DrawNode(VisualNode.Position + GraphState->ViewOffset, VisualNode.Spec, NodeHandle, NodeWidth, LineHeight, State->Interface, RenderBuffer, Mouse, &State->Transient);
DrawNode(VisualNode.Position + GraphState->ViewOffset, VisualNode.Spec, NodeHandle, NodeWidth, LineHeight, State->Interface_.Style, RenderBuffer, Mouse, &State->Transient);
}
for (u32 p = 0; p < GraphState->Layout.VisualPortsCount; p++)
@ -514,17 +514,17 @@ NodeGraph_Render(panel Panel, rect PanelBounds, render_command_buffer* RenderBuf
List.ListBounds = NodeSelectionWindowBounds;
List.ListElementDimensions = v2{
gs_Width(NodeSelectionWindowBounds),
(r32)(State->Interface.Font->PixelHeight + 8),
ui_GetTextLineHeight(State->Interface_)
};
List.ElementLabelIndent = v2{10, 4};
string TitleString = MakeStringLiteral("Available Nodes");
DrawListElement(TitleString, &List, Mouse, RenderBuffer, State->Interface);
DrawListElement(TitleString, &List, Mouse, RenderBuffer, State->Interface_.Style);
for (u32 i = 0; i < NodeType_Count; i++)
{
node_specification_ Spec = NodeSpecifications[i];
rect ElementBounds = DrawListElement(Spec.Identifier, &List, Mouse, RenderBuffer, State->Interface);
rect ElementBounds = DrawListElement(Spec.Identifier, &List, Mouse, RenderBuffer, State->Interface_.Style);
if (MouseButtonTransitionedDown(Mouse.LeftButtonState)
&& gs_PointIsInRect(Mouse.DownPos, ElementBounds))