From 708371a3d1fb88c44c51129c798805a7b3806d46 Mon Sep 17 00:00:00 2001 From: Asuro Date: Sun, 2 Apr 2023 16:29:35 +0200 Subject: [PATCH] ui stuff + clear notifications --- AsuroTool/AsuroTool.cpp | 8 ++++- AsuroTool/Settings.cpp | 2 +- ImguiBase/ImguiBase.cpp | 69 ++++++++++++++++++++++++++++++----------- ImguiBase/ImguiBase.h | 6 ++-- 4 files changed, 63 insertions(+), 22 deletions(-) diff --git a/AsuroTool/AsuroTool.cpp b/AsuroTool/AsuroTool.cpp index 968136c..d5a1aae 100644 --- a/AsuroTool/AsuroTool.cpp +++ b/AsuroTool/AsuroTool.cpp @@ -378,6 +378,7 @@ ImVec2 timerWindow(DrawData& drawData, ApplicationData& appData) // Draw window if (ImGui::Begin(title.c_str(), 0, ImGuiWindowFlags_NoResize)) { + dropShadowWindowTitle(); if (windowHeaderButton(ICON_SETTINGS_FILL)) { ImGui::OpenPopup(SETTINGS_POPUP_NAME); @@ -426,6 +427,7 @@ ImVec2 timerWindow(DrawData& drawData, ApplicationData& appData) else { timerData.isTimerActive = false; + WinToast::instance()->clear(); } } @@ -541,6 +543,7 @@ ImVec2 checklistWindow(ApplicationData& appData, const char* title) { if (ImGui::Begin(title, 0, ImGuiWindowFlags_NoResize)) { + dropShadowWindowTitle(); if (windowHeaderButton(ICON_SETTINGS_FILL)) { ImGui::OpenPopup(SETTINGS_POPUP_NAME); @@ -731,6 +734,7 @@ ImVec2 baseStationWindow(ApplicationData& appData) { if (ImGui::Begin(std::format("{} Base Stations", ICON_ALARM_WARNING_FILL).c_str(), 0, ImGuiWindowFlags_NoResize)) { + dropShadowWindowTitle(); if (windowHeaderButton(ICON_SETTINGS_FILL)) { ImGui::OpenPopup(SETTINGS_POPUP_NAME); @@ -780,6 +784,7 @@ ImVec2 audioDeviceWindow(ApplicationData& appData, std::vector& dev { if (ImGui::Begin(title, 0, ImGuiWindowFlags_NoResize)) { + dropShadowWindowTitle(); if (windowHeaderButton(ICON_SETTINGS_FILL)) { ImGui::OpenPopup(SETTINGS_POPUP_NAME); @@ -791,7 +796,8 @@ ImVec2 audioDeviceWindow(ApplicationData& appData, std::vector& dev ImGui::TableSetupColumn("Volume", ImGuiTableColumnFlags_WidthStretch, 1.); ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, getButtonWidth(ICON_MUSIC_2_FILL)); ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, getButtonWidth(ICON_PHONE_FILL)); - ImGui::TableHeadersRow(); + + dropShadowTableHeadersRow(); for (auto& dev : deviceList) { diff --git a/AsuroTool/Settings.cpp b/AsuroTool/Settings.cpp index 26cc65f..f7a2b84 100644 --- a/AsuroTool/Settings.cpp +++ b/AsuroTool/Settings.cpp @@ -179,7 +179,7 @@ void setAutostart(bool newValue) void loadUiStyle() { ImGuiStyle& style = ImGui::GetStyle(); - style.WindowPadding = { 6.f, 12.f }; + style.WindowPadding = { 10.f, 14.f }; style.WindowBorderSize = 0.f; style.FramePadding = { 8.f, 4.f }; diff --git a/ImguiBase/ImguiBase.cpp b/ImguiBase/ImguiBase.cpp index c5b2f1f..28aa228 100644 --- a/ImguiBase/ImguiBase.cpp +++ b/ImguiBase/ImguiBase.cpp @@ -575,31 +575,62 @@ ImVec2 getWindowSize(GLFWwindow* window) void dropShadow() { - dropShadow(DEFAULT_DROP_SHADOW_SIZE, ImGui::GetStyle().Colors[DEFAULT_DROP_SHADOW_COLOR_ID]); + dropShadow(DEFAULT_DROP_SHADOW_SIZE, DEFAULT_DROP_SHADOW_SIZE, ImGui::GetStyle().Colors[DEFAULT_DROP_SHADOW_COLOR_ID]); } -void dropShadow(const float shadowSize, const ImColor& color) +void dropShadow(const float shadowSizeX, const float shadowSizeY, const ImColor& color) { ImVec2 lastMin = ImGui::GetItemRectMin(); ImVec2 lastMax = ImGui::GetItemRectMax(); - renderDropShadow(shadowSize, lastMin, lastMax, color); + renderDropShadow(shadowSizeX, shadowSizeY, lastMin, lastMax, color); } -void renderDropShadow(const float shadowSize, const ImVec2& min, const ImVec2& max, const ImColor& color) +void renderDropShadow(const float shadowSizeX, const float shadowSizeY, const ImVec2& min, const ImVec2& max, const ImColor& color) { ImDrawList* windowDrawList = ImGui::GetWindowDrawList(); - windowDrawList->AddQuadFilled( - { min.x, max.y }, - { max.x, max.y }, - { max.x + shadowSize, max.y + shadowSize }, - { min.x + shadowSize, max.y + shadowSize }, - color); - windowDrawList->AddQuadFilled( - { max.x, min.y }, - { max.x + shadowSize, min.y + shadowSize }, - { max.x + shadowSize, max.y + shadowSize }, - { max.x, max.y }, - color); + if (shadowSizeY > 0.f) + { + windowDrawList->AddQuadFilled( + { min.x, max.y }, + { max.x, max.y }, + { max.x + shadowSizeX, max.y + shadowSizeY }, + { min.x + shadowSizeX, max.y + shadowSizeY }, + color); + } + + if (shadowSizeX > 0.f) + { + windowDrawList->AddQuadFilled( + { max.x, min.y }, + { max.x + shadowSizeX, min.y + shadowSizeY }, + { max.x + shadowSizeX, max.y + shadowSizeY }, + { max.x, max.y }, + color); + } +} + +void dropShadowTableHeadersRow() +{ + ImGui::TableNextRow(); + + ImVec2 startPos = {}; + + for (int i = 0; i < ImGui::TableGetColumnCount(); i++) + { + ImGui::TableSetColumnIndex(i); + ImGui::TableHeader(ImGui::TableGetColumnName()); + if (i == 0) startPos = ImGui::GetItemRectMin(); + } + + renderDropShadow(DEFAULT_DROP_SHADOW_SIZE, DEFAULT_DROP_SHADOW_SIZE, startPos, ImGui::GetItemRectMax(), ImGui::GetStyle().Colors[DEFAULT_DROP_SHADOW_COLOR_ID]); +} + +void dropShadowWindowTitle() +{ + ImRect tempRect = ImGui::GetCurrentWindow()->ClipRect; + ImGui::PopClipRect(); + dropShadow(0., 4., { .2f, .2f, .2f, .5f }); + ImGui::PushClipRect(tempRect.Min, tempRect.Max, false); } bool dropButton(const char* label, const ImVec2& size, float shadowSize, bool smallButton) @@ -630,7 +661,9 @@ bool dropButton(const char* label, const ImVec2& size, float shadowSize, bool sm ImGui::RenderFrame(rectMin, rectMax, col, true, style.FrameRounding); ImGui::RenderTextClipped(rectMin, rectMax, label, NULL, &labelSize, style.ButtonTextAlign); - renderDropShadow(held ? 1.f : shadowSize, rectMin, rectMax, ImGui::GetStyle().Colors[DEFAULT_DROP_SHADOW_COLOR_ID]); + + float realShadowSize = held ? 1.f : shadowSize; + renderDropShadow(realShadowSize, realShadowSize, rectMin, rectMax, ImGui::GetStyle().Colors[DEFAULT_DROP_SHADOW_COLOR_ID]); style.FramePadding = backupPadding; return result; @@ -645,7 +678,7 @@ bool checkboxWithDropShadow(const char* label, bool* v, const float shadowSize) style.ItemInnerSpacing.x = oldSpacingX; ImVec2 lastMin = ImGui::GetItemRectMin(); - renderDropShadow(shadowSize, lastMin, lastMin + ImVec2{ ImGui::GetFrameHeight(), ImGui::GetFrameHeight() }, ImGui::GetStyle().Colors[DEFAULT_DROP_SHADOW_COLOR_ID]); + renderDropShadow(shadowSize, shadowSize, lastMin, lastMin + ImVec2{ ImGui::GetFrameHeight(), ImGui::GetFrameHeight() }, ImGui::GetStyle().Colors[DEFAULT_DROP_SHADOW_COLOR_ID]); return result; } diff --git a/ImguiBase/ImguiBase.h b/ImguiBase/ImguiBase.h index bce5492..0f119c5 100644 --- a/ImguiBase/ImguiBase.h +++ b/ImguiBase/ImguiBase.h @@ -62,9 +62,11 @@ constexpr float DEFAULT_DROP_SHADOW_SIZE = 3.f; constexpr ImGuiCol DEFAULT_DROP_SHADOW_COLOR_ID = ImGuiCol_TabUnfocused; void dropShadow(); -void dropShadow(const float shadowSize, const ImColor& color); -void renderDropShadow(const float shadowSize, const ImVec2& min, const ImVec2& max, const ImColor& color); +void dropShadow(const float shadowSizeX, const float shadowSizeY, const ImColor& color); +void renderDropShadow(const float shadowSizeX, const float shadowSizeY, const ImVec2& min, const ImVec2& max, const ImColor& color); +void dropShadowTableHeadersRow(); +void dropShadowWindowTitle(); bool dropButton(const char* label, const ImVec2& size = ImVec2(0, 0), float shadowSize = DEFAULT_DROP_SHADOW_SIZE, bool smallButton = false); bool checkboxWithDropShadow(const char* label, bool* v, const float shadowSize = DEFAULT_DROP_SHADOW_SIZE);