From 025cb5849344a33c942acf609e8298b30878fe94 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Mon, 27 Apr 2026 01:15:19 -0600 Subject: [PATCH] Forgor to commit --- extern/aurora | 2 +- src/dusk/ui/control_surface.cpp | 53 +++++++++++++++++++++++++++++++++ src/dusk/ui/control_surface.hpp | 29 ++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/dusk/ui/control_surface.cpp create mode 100644 src/dusk/ui/control_surface.hpp diff --git a/extern/aurora b/extern/aurora index fa03533986..a2d024e006 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit fa0353398661b5794322fb84ac67bb1bc7a5c468 +Subproject commit a2d024e0061e013208afb68e04cab7d2d71f6953 diff --git a/src/dusk/ui/control_surface.cpp b/src/dusk/ui/control_surface.cpp new file mode 100644 index 0000000000..9b65b4bca9 --- /dev/null +++ b/src/dusk/ui/control_surface.cpp @@ -0,0 +1,53 @@ +#include "control_surface.hpp" + +#include + +namespace dusk::ui { + +ControlSurfaceStyle control_surface_style(ControlSurfaceTone tone) { + switch (tone) { + case ControlSurfaceTone::Primary: + return { + .accent = theme::Primary, + .inactiveBorderOpacity = 112, + .inactiveBackgroundOpacity = 28, + .activeBorderOpacity = 255, + .activeBackgroundOpacity = 116, + }; + case ControlSurfaceTone::Secondary: + return { + .accent = theme::Secondary, + .inactiveBorderOpacity = 112, + .inactiveBackgroundOpacity = 28, + .activeBorderOpacity = 255, + .activeBackgroundOpacity = 116, + }; + case ControlSurfaceTone::Quiet: + default: + return { + .accent = theme::Elevated, + .inactiveBorderOpacity = 86, + .inactiveBackgroundOpacity = 0, + .activeBorderOpacity = 150, + .activeBackgroundOpacity = 68, + }; + } +} + +void apply_control_surface_style(Rml::Element* element, const ControlSurfaceStyle& style, + bool active) { + if (element == nullptr) { + return; + } + + element->SetProperty("border-color", + active ? theme::rgba(style.accent, style.activeBorderOpacity) : + theme::rgba(theme::ElevatedBorder, + style.inactiveBorderOpacity)); + element->SetProperty("background-color", + theme::rgba(style.accent, + active ? style.activeBackgroundOpacity : + style.inactiveBackgroundOpacity)); +} + +} // namespace dusk::ui diff --git a/src/dusk/ui/control_surface.hpp b/src/dusk/ui/control_surface.hpp new file mode 100644 index 0000000000..534e4bf665 --- /dev/null +++ b/src/dusk/ui/control_surface.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include "theme.hpp" + +namespace Rml { +class Element; +} + +namespace dusk::ui { + +enum class ControlSurfaceTone { + Primary, + Secondary, + Quiet, +}; + +struct ControlSurfaceStyle { + theme::Color accent = theme::Primary; + int inactiveBorderOpacity = 86; + int inactiveBackgroundOpacity = 0; + int activeBorderOpacity = 150; + int activeBackgroundOpacity = 68; +}; + +ControlSurfaceStyle control_surface_style(ControlSurfaceTone tone); +void apply_control_surface_style(Rml::Element* element, const ControlSurfaceStyle& style, + bool active); + +} // namespace dusk::ui