Fix sizing bugs and add sizing to themes

This commit is contained in:
Zachary Hall 2023-07-18 18:44:19 -07:00
parent f0a5e078c3
commit 86833b6b6f
2 changed files with 57 additions and 7 deletions

View file

@ -339,7 +339,7 @@ int main(int, char**)
} }
ImGui::SameLine(); ImGui::SameLine();
const int NEXT_SLIDER_COUNT = 1; const int NEXT_SLIDER_COUNT = 1;
ImGui::SetNextItemWidth(-(ImGui::GetFontSize() * (1 + (8 * NEXT_SLIDER_COUNT))) - (ImGui::GetStyle().ItemSpacing.x * (NEXT_SLIDER_COUNT + 1)) - (ImGui::GetStyle().WindowPadding.x)); ImGui::SetNextItemWidth(-(ImGui::GetFontSize() * (1 + (8 * NEXT_SLIDER_COUNT))) - ((ImGui::GetStyle().ItemSpacing.x + ImGui::GetStyle().FramePadding.x) * (NEXT_SLIDER_COUNT + 1)));
uint8_t components = TimeToComponentCount(playback->GetLength()); uint8_t components = TimeToComponentCount(playback->GetLength());
string time_str = TimeToString(position, components); string time_str = TimeToString(position, components);
if (ImGui::SliderFloat("##Seek", &position, 0.0f, playback->GetLength(), time_str.c_str(), ImGuiSliderFlags_NoRoundToFormat)) if (ImGui::SliderFloat("##Seek", &position, 0.0f, playback->GetLength(), time_str.c_str(), ImGuiSliderFlags_NoRoundToFormat))
@ -353,7 +353,9 @@ int main(int, char**)
if (ImGui::SliderFloat("##Volume", &playback->volume, 0.0, 100.0, ICON_FK_VOLUME_UP ": %.0f%%")) { if (ImGui::SliderFloat("##Volume", &playback->volume, 0.0, 100.0, ICON_FK_VOLUME_UP ": %.0f%%")) {
playback->Update(); playback->Update();
} }
ImGui::PushItemWidth((ImGui::GetWindowWidth() / 3) - (ImGui::GetStyle().ItemSpacing.x) - (ImGui::GetStyle().WindowPadding.x / 3)); const float items = 3.0f;
const float between_items = items - 1.0f;
ImGui::PushItemWidth((ImGui::GetWindowWidth() / items) - (ImGui::GetStyle().ItemSpacing.x / (items / between_items)) - ((ImGui::GetStyle().WindowPadding.x / items) * 2.0f));
if (ImGui::SliderFloat("##Speed", &playback->speed, 0.25, 4.0, "Speed: %.2fx", ImGuiSliderFlags_Logarithmic)) { if (ImGui::SliderFloat("##Speed", &playback->speed, 0.25, 4.0, "Speed: %.2fx", ImGuiSliderFlags_Logarithmic)) {
playback->Update(); playback->Update();
} }
@ -394,12 +396,12 @@ int main(int, char**)
ImGui::SetNextItemWidth(ImGui::GetWindowWidth() - ImGui::GetCursorPosX() - ImGui::GetStyle().WindowPadding.x); ImGui::SetNextItemWidth(ImGui::GetWindowWidth() - ImGui::GetCursorPosX() - ImGui::GetStyle().WindowPadding.x);
ImGui::InputText("##FilterInput", filter, 1024); ImGui::InputText("##FilterInput", filter, 1024);
ImGui::Text("Select a theme..."); ImGui::Text("Select a theme...");
ImVec2 ChildSize = ImVec2(ImGui::GetWindowWidth() - (ImGui::GetStyle().WindowPadding.x * 2.0f), -ImGui::GetTextLineHeightWithSpacing() - ImGui::GetStyle().WindowPadding.y); ImVec2 ChildSize = ImVec2(ImGui::GetWindowWidth() - (ImGui::GetStyle().WindowPadding.x * 2.0f), -ImGui::GetFrameHeightWithSpacing());
if (ImGui::BeginChildFrame(ImGui::GetID("##ThemesContainer"), ChildSize)) { if (ImGui::BeginChildFrame(ImGui::GetID("##ThemesContainer"), ChildSize)) {
ImVec2 TableSize = ImVec2(ImGui::GetWindowWidth() - (ImGui::GetStyle().WindowPadding.x), -ImGui::GetTextLineHeightWithSpacing() - ImGui::GetStyle().WindowPadding.y); ImVec2 TableSize = ImVec2(0, 0);
if (ImGui::BeginTable("##Themes", 2, 0, TableSize)) { if (ImGui::BeginTable("##Themes", 2, ImGuiTableFlags_SizingFixedFit|ImGuiTableFlags_NoSavedSettings|ImGuiTableFlags_ScrollY, TableSize)) {
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthStretch); ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthStretch);
ImGui::TableSetupColumn("Remove", ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("Remove", 0);
for (auto themePath : Theme::availableThemes) { for (auto themePath : Theme::availableThemes) {
if (themePath.stem().string().starts_with(filter)) { if (themePath.stem().string().starts_with(filter)) {
ImGui::TableNextRow(); ImGui::TableNextRow();
@ -427,7 +429,7 @@ int main(int, char**)
} }
} }
ImGui::EndChildFrame(); ImGui::EndChildFrame();
ImGui::SetNextItemWidth(ImGui::GetWindowWidth() - (ImGui::GetStyle().FramePadding.x * 4)); ImGui::SetNextItemWidth(ImGui::GetWindowWidth() - (ImGui::GetStyle().WindowPadding.x * 2));
if (ImGui::SliderFloat("##AccentColor", &accent_color, 0.0, 360.0, "UI hue: %.0f°", ImGuiSliderFlags_NoRoundToFormat)) { if (ImGui::SliderFloat("##AccentColor", &accent_color, 0.0, 360.0, "UI hue: %.0f°", ImGuiSliderFlags_NoRoundToFormat)) {
theme->Apply(accent_color); theme->Apply(accent_color);
} }

View file

@ -127,6 +127,17 @@ bool Theme::ShowEditor(bool* open, Theme* &theme, ImGuiID dockid, int window_wid
{ {
if (ImGui::BeginTabItem("Sizes")) if (ImGui::BeginTabItem("Sizes"))
{ {
ImGui::SeparatorText("Sizing");
ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f");
ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f");
ImGui::SliderFloat2("CellPadding", (float*)&style.CellPadding, 0.0f, 20.0f, "%.0f");
ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f");
ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f");
//ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f");
//ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f");
ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f");
ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f");
ImGui::SliderFloat2("SeparatorTextPadding", (float*)&style.SeparatorTextPadding, 0.0f, 40.0f, "%.0f");
ImGui::SeparatorText("Borders"); ImGui::SeparatorText("Borders");
ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f"); ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f");
@ -134,6 +145,7 @@ bool Theme::ShowEditor(bool* open, Theme* &theme, ImGuiID dockid, int window_wid
ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f"); ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f");
ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f"); ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f");
ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f"); ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f");
ImGui::SliderFloat("SeparatorTextBorderSize", &style.SeparatorTextBorderSize, 0.0f, 10.0f, "%.0f");
ImGui::SeparatorText("Rounding"); ImGui::SeparatorText("Rounding");
ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f"); ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f");
@ -329,6 +341,22 @@ void Theme::Save(string path) {
rounding["Tab"] = style.TabRounding; rounding["Tab"] = style.TabRounding;
config["rounding"] = rounding; config["rounding"] = rounding;
} }
{
Json::Value sizing;
sizing["FrameX"] = style.FramePadding.x;
sizing["FrameY"] = style.FramePadding.y;
sizing["WindowX"] = style.WindowPadding.x;
sizing["WindowY"] = style.WindowPadding.y;
sizing["CellX"] = style.CellPadding.x;
sizing["CellY"] = style.CellPadding.y;
sizing["SeparatorTextX"] = style.SeparatorTextPadding.x;
sizing["SeparatorTextY"] = style.SeparatorTextPadding.y;
sizing["ItemSpacingX"] = style.ItemSpacing.x;
sizing["ItemSpacingY"] = style.ItemSpacing.y;
sizing["Scrollbar"] = style.ScrollbarSize;
sizing["Grab"] = style.GrabMinSize;
config["sizing"] = sizing;
}
{ {
Json::Value borders; Json::Value borders;
borders["Frame"] = style.FrameBorderSize; borders["Frame"] = style.FrameBorderSize;
@ -336,6 +364,8 @@ void Theme::Save(string path) {
borders["Child"] = style.ChildBorderSize; borders["Child"] = style.ChildBorderSize;
borders["Popup"] = style.PopupBorderSize; borders["Popup"] = style.PopupBorderSize;
borders["Tab"] = style.TabBorderSize; borders["Tab"] = style.TabBorderSize;
borders["Tab"] = style.TabBorderSize;
borders["SeparatorText"] = style.SeparatorTextBorderSize;
config["borders"] = borders; config["borders"] = borders;
} }
{ {
@ -415,6 +445,21 @@ Theme::Theme(string path) : Theme() {
style.GrabRounding = rounding["Grab"].asFloat(); style.GrabRounding = rounding["Grab"].asFloat();
style.TabRounding = rounding["Tab"].asFloat(); style.TabRounding = rounding["Tab"].asFloat();
} }
if (config.isMember("sizing")) {
Json::Value sizing = config["sizing"];
style.FramePadding.x = sizing["FrameX"].asFloat();
style.FramePadding.y = sizing["FrameY"].asFloat();
style.WindowPadding.x = sizing["WindowX"].asFloat();
style.WindowPadding.y = sizing["WindowY"].asFloat();
style.CellPadding.x = sizing["CellX"].asFloat();
style.CellPadding.y = sizing["CellY"].asFloat();
style.SeparatorTextPadding.x = sizing["SeparatorTextX"].asFloat();
style.SeparatorTextPadding.y = sizing["SeparatorTextY"].asFloat();
style.ItemSpacing.x = sizing["ItemSpacingX"].asFloat();
style.ItemSpacing.y = sizing["ItemSpacingY"].asFloat();
style.ScrollbarSize = sizing["Scrollbar"].asFloat();
style.GrabMinSize = sizing["Grab"].asFloat();
}
if (config.isMember("borders")) { if (config.isMember("borders")) {
Json::Value borders = config["borders"]; Json::Value borders = config["borders"];
style.FrameBorderSize = borders["Frame"].asFloat(); style.FrameBorderSize = borders["Frame"].asFloat();
@ -422,6 +467,9 @@ Theme::Theme(string path) : Theme() {
style.ChildBorderSize = borders["Child"].asFloat(); style.ChildBorderSize = borders["Child"].asFloat();
style.PopupBorderSize = borders["Popup"].asFloat(); style.PopupBorderSize = borders["Popup"].asFloat();
style.TabBorderSize = borders["Tab"].asFloat(); style.TabBorderSize = borders["Tab"].asFloat();
if (borders.isMember("SeparatorText")) {
style.SeparatorTextBorderSize = borders["SeparatorText"].asFloat();
}
} }
if (config.isMember("colors")) { if (config.isMember("colors")) {
Json::Value colors = config["colors"]; Json::Value colors = config["colors"];