feat(theme): flat light-theme buttons (match the portfolio modal)
Per the request for a flatter look like the Manage-portfolio modal's plain buttons, render TactileButton FLAT on light themes: DrawButtonGlassOverlay now early-returns in light themes with just a subtle defining edge (--rim-light), skipping the white glass sheen (--glass-fill) and the tactile 3D depth (bright top edge + the hardcoded bottom shadow that couldn't be removed via TOML). ImGui::Button still draws the fill/hover/active (the darkened ImGuiCol_Button overlays), so the button reads as a flat, defined element. Dark themes keep the raised glass/tactile look. Re-adds the IsLightTheme() luminance helper (early in the header so the overlay can use it). Applies to all TactileButtons app-wide in light themes, not just Settings. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -35,6 +35,15 @@ inline ImU32 ScaleAlpha(ImU32 col, float scale) {
|
|||||||
return (col & ~IM_COL32_A_MASK) | (static_cast<ImU32>(a) << IM_COL32_A_SHIFT);
|
return (col & ~IM_COL32_A_MASK) | (static_cast<ImU32>(a) << IM_COL32_A_SHIFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// True when the active theme is light (app background luminance is high).
|
||||||
|
inline bool IsLightTheme() {
|
||||||
|
ImU32 bg = Background();
|
||||||
|
float r = ((bg >> IM_COL32_R_SHIFT) & 0xFF) / 255.0f;
|
||||||
|
float g = ((bg >> IM_COL32_G_SHIFT) & 0xFF) / 255.0f;
|
||||||
|
float b = ((bg >> IM_COL32_B_SHIFT) & 0xFF) / 255.0f;
|
||||||
|
return (0.299f * r + 0.587f * g + 0.114f * b) > 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
// Animated "loading" ellipsis: "", ".", "..", "..." cycling on a ~3Hz phase.
|
// Animated "loading" ellipsis: "", ".", "..", "..." cycling on a ~3Hz phase.
|
||||||
inline const char* LoadingDots() {
|
inline const char* LoadingDots() {
|
||||||
int n = ((int)(ImGui::GetTime() * 3.0f)) % 4;
|
int n = ((int)(ImGui::GetTime() * 3.0f)) % 4;
|
||||||
@@ -227,6 +236,14 @@ inline void DrawButtonGlassOverlay(ImDrawList* dl, const ImVec2& bMin,
|
|||||||
const ImVec2& bMax, float rounding,
|
const ImVec2& bMax, float rounding,
|
||||||
bool active, bool hovered)
|
bool active, bool hovered)
|
||||||
{
|
{
|
||||||
|
// Light themes: flat buttons (like the Manage-portfolio modal's plain buttons). Skip the glass
|
||||||
|
// sheen + tactile 3D — ImGui::Button already draws the fill/hover/active — and add just a subtle
|
||||||
|
// defining edge, which reads cleaner on light surfaces than the raised glass look.
|
||||||
|
if (IsLightTheme()) {
|
||||||
|
ImU32 rim = schema::UI().resolveColor("var(--rim-light)", IM_COL32(0, 0, 0, 50));
|
||||||
|
dl->AddRect(bMin, bMax, active ? ScaleAlpha(rim, 0.6f) : rim, rounding, 0, 1.0f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Frosted glass highlight — subtle fill on top
|
// Frosted glass highlight — subtle fill on top
|
||||||
if (!active) {
|
if (!active) {
|
||||||
ImU32 col = hovered
|
ImU32 col = hovered
|
||||||
|
|||||||
Reference in New Issue
Block a user