Files
ObsidianDragon/src/ui/material/colors.h
DanS 3aee55b49c ObsidianDragon - DragonX ImGui Wallet
Full-node GUI wallet for DragonX cryptocurrency.
Built with Dear ImGui, SDL3, and OpenGL3/DX11.

Features:
- Send/receive shielded and transparent transactions
- Autoshield with merged transaction display
- Built-in CPU mining (xmrig)
- Peer management and network monitoring
- Wallet encryption with PIN lock
- QR code generation for receive addresses
- Transaction history with pagination
- Console for direct RPC commands
- Cross-platform (Linux, Windows)
2026-02-27 00:26:01 -06:00

202 lines
7.2 KiB
C++

// DragonX Wallet - ImGui Edition
// Copyright 2024-2026 The Hush Developers
// Released under the GPLv3
// ============================================================================
// Material Design Color Tokens
// ============================================================================
//
// This header provides convenient access to Material Design color tokens.
// Use these instead of hardcoded colors to maintain theme consistency.
//
// Usage:
// #include "ui/material/colors.h"
//
// // Get surface colors at different elevations
// ImU32 cardBg = dragonx::ui::material::Surface(4); // 4dp elevation
//
// // Get state colors
// ImU32 hovered = dragonx::ui::material::Primary() | dragonx::ui::material::StateHover();
//
// // Use in ImGui
// ImGui::PushStyleColor(ImGuiCol_ChildBg, ImGui::ColorConvertU32ToFloat4(cardBg));
#pragma once
#include "color_theme.h"
#include "../schema/ui_schema.h"
namespace dragonx {
namespace ui {
namespace material {
// ============================================================================
// Color Token Accessors (Inline for performance)
// ============================================================================
// Primary colors
inline ImU32 Primary() { return GetCurrentColorTheme().primary; }
inline ImU32 PrimaryVariant() { return GetCurrentColorTheme().primaryVariant; }
inline ImU32 PrimaryLight() { return GetCurrentColorTheme().primaryLight; }
// Secondary colors
inline ImU32 Secondary() { return GetCurrentColorTheme().secondary; }
inline ImU32 SecondaryVariant() { return GetCurrentColorTheme().secondaryVariant; }
inline ImU32 SecondaryLight() { return GetCurrentColorTheme().secondaryLight; }
// Surface colors (semi-transparent when OS backdrop is active)
inline ImU32 Background() {
ImU32 bg = GetCurrentColorTheme().background;
if (!IsBackdropActive()) return bg;
float alpha = dragonx::ui::schema::UI().drawElement("backdrop", "background-inline-alpha").size;
if (alpha < 0) alpha = 0.30f;
return WithAlphaF(bg, alpha);
}
inline ImU32 Surface() {
ImU32 s = GetCurrentColorTheme().surface;
if (!IsBackdropActive()) return s;
float alpha = dragonx::ui::schema::UI().drawElement("backdrop", "surface-inline-alpha").size;
if (alpha < 0) alpha = 0.55f;
return WithAlphaF(s, alpha);
}
inline ImU32 SurfaceVariant() { return GetCurrentColorTheme().surfaceVariant; }
// Elevated surfaces - use for cards, dialogs, menus
inline ImU32 Surface(int dp) {
ImU32 s = GetElevatedSurface(GetCurrentColorTheme(), dp);
if (!IsBackdropActive()) return s;
float alpha = dragonx::ui::schema::UI().drawElement("backdrop", "surface-inline-alpha").size;
if (alpha < 0) alpha = 0.55f;
return WithAlphaF(s, alpha);
}
inline ImU32 SurfaceAt(Elevation level) { return GetElevatedSurface(GetCurrentColorTheme(), level); }
// "On" colors (text on various backgrounds)
inline ImU32 OnPrimary() { return GetCurrentColorTheme().onPrimary; }
inline ImU32 OnSecondary() { return GetCurrentColorTheme().onSecondary; }
inline ImU32 OnBackground() { return GetCurrentColorTheme().onBackground; }
inline ImU32 OnSurface() { return GetCurrentColorTheme().onSurface; }
inline ImU32 OnSurfaceMedium() { return GetCurrentColorTheme().onSurfaceMedium; }
inline ImU32 OnSurfaceDisabled() { return GetCurrentColorTheme().onSurfaceDisabled; }
// Semantic colors
inline ImU32 Error() { return GetCurrentColorTheme().error; }
inline ImU32 OnError() { return GetCurrentColorTheme().onError; }
inline ImU32 Success() { return GetCurrentColorTheme().success; }
inline ImU32 OnSuccess() { return GetCurrentColorTheme().onSuccess; }
inline ImU32 Warning() { return GetCurrentColorTheme().warning; }
inline ImU32 OnWarning() { return GetCurrentColorTheme().onWarning; }
// State overlay colors (use with BlendOverlay)
inline ImU32 StateHover() { return GetCurrentColorTheme().stateHover; }
inline ImU32 StateFocus() { return GetCurrentColorTheme().stateFocus; }
inline ImU32 StatePressed() { return GetCurrentColorTheme().statePressed; }
inline ImU32 StateSelected() { return GetCurrentColorTheme().stateSelected; }
inline ImU32 StateDragged() { return GetCurrentColorTheme().stateDragged; }
// UI structure
inline ImU32 Divider() { return GetCurrentColorTheme().divider; }
inline ImU32 Outline() { return GetCurrentColorTheme().outline; }
inline ImU32 Scrim() { return GetCurrentColorTheme().scrim; }
// ============================================================================
// ImVec4 Variants (for direct use with ImGui style colors)
// ============================================================================
inline ImVec4 PrimaryVec4() { return ImGui::ColorConvertU32ToFloat4(Primary()); }
inline ImVec4 SecondaryVec4() { return ImGui::ColorConvertU32ToFloat4(Secondary()); }
inline ImVec4 SurfaceVec4() { return ImGui::ColorConvertU32ToFloat4(Surface()); }
inline ImVec4 SurfaceVec4(int dp) { return ImGui::ColorConvertU32ToFloat4(Surface(dp)); }
inline ImVec4 OnSurfaceVec4() { return ImGui::ColorConvertU32ToFloat4(OnSurface()); }
inline ImVec4 ErrorVec4() { return ImGui::ColorConvertU32ToFloat4(Error()); }
inline ImVec4 SuccessVec4() { return ImGui::ColorConvertU32ToFloat4(Success()); }
inline ImVec4 WarningVec4() { return ImGui::ColorConvertU32ToFloat4(Warning()); }
// ============================================================================
// Convenience Functions for Common Patterns
// ============================================================================
/**
* @brief Get color with applied state overlay
*
* @param base Base color
* @param state State overlay (StateHover, StateFocus, etc.)
* @return Color with state applied
*
* Usage:
* ImU32 hoveredButton = WithState(Primary(), StateHover());
*/
inline ImU32 WithState(ImU32 base, ImU32 state)
{
return BlendOverlay(base, state, 1.0f);
}
/**
* @brief Get button color for current state
*
* @param isHovered Button is hovered
* @param isActive Button is pressed
* @return Appropriate button color
*/
inline ImU32 ButtonColor(bool isHovered, bool isActive)
{
if (isActive) return WithState(Primary(), StatePressed());
if (isHovered) return WithState(Primary(), StateHover());
return Primary();
}
/**
* @brief Get surface color for card at specified elevation
*
* @param elevation Elevation in dp (0-24)
* @return Surface color with elevation overlay
*/
inline ImU32 CardSurface(int elevation = 2)
{
return Surface(elevation);
}
/**
* @brief Get surface color for dialog/modal
*
* @return Surface color at 24dp elevation
*/
inline ImU32 DialogSurface()
{
return SurfaceAt(Elevation::Dp24);
}
/**
* @brief Get surface color for menu/popup
*
* @return Surface color at 8dp elevation
*/
inline ImU32 MenuSurface()
{
return SurfaceAt(Elevation::Dp8);
}
/**
* @brief Get surface color for app bar/toolbar
*
* @return Surface color at 4dp elevation
*/
inline ImU32 AppBarSurface()
{
return SurfaceAt(Elevation::Dp4);
}
/**
* @brief Get surface color for nav drawer
*
* @return Surface color at 16dp elevation
*/
inline ImU32 NavDrawerSurface()
{
return SurfaceAt(Elevation::Dp16);
}
} // namespace material
} // namespace ui
} // namespace dragonx