fix(select): renamed dropdown to select to better match shadcn + some polish (bg menu color, and rounded hover)

This commit is contained in:
Lemmy
2026-04-04 19:34:35 -04:00
parent 4c248145e6
commit 2c98ae8123
6 changed files with 33 additions and 33 deletions
+1 -1
View File
@@ -222,7 +222,7 @@ add_executable(noctalia
src/ui/controls/Box.cpp
src/ui/controls/Button.cpp
src/ui/controls/Chip.cpp
src/ui/controls/Dropdown.cpp
src/ui/controls/Select.cpp
src/ui/controls/Icon.cpp
src/ui/controls/Label.cpp
src/ui/controls/Slider.cpp
+1 -1
View File
@@ -205,7 +205,7 @@ gdbus call --session --dest dev.noctalia.Debug --object-path /dev/noctalia/Debug
- [ ] Scroll view
- [ ] List view
- [ ] Text input
- [ ] Dropdown
- [ ] Select
- [ ] Checkbox
- [ ] Radio button
- [ ] Tab bar
+10 -10
View File
@@ -3,7 +3,7 @@
#include "render/scene/InputArea.h"
#include "ui/controls/Box.h"
#include "ui/controls/Button.h"
#include "ui/controls/Dropdown.h"
#include "ui/controls/Select.h"
#include "ui/controls/Label.h"
#include "ui/controls/Slider.h"
#include "ui/controls/Toggle.h"
@@ -69,16 +69,16 @@ void TestPanelContent::create(Renderer& renderer) {
container->addChild(std::move(row));
}
auto dropdown = std::make_unique<Dropdown>();
dropdown->setSize(220.0f, 0.0f);
dropdown->setOptions({"Balanced", "Performance", "Power Saver"});
dropdown->setSelectedIndex(0);
m_dropdown = dropdown.get();
auto select = std::make_unique<Select>();
select->setSize(220.0f, 0.0f);
select->setOptions({"Balanced", "Performance", "Power Saver"});
select->setSelectedIndex(0);
m_select = select.get();
{
auto row = makeRow();
row->setZIndex(10);
row->addChild(makeRowLabel("Dropdown", kRowLabelWidth));
row->addChild(std::move(dropdown));
row->addChild(makeRowLabel("Select", kRowLabelWidth));
row->addChild(std::move(select));
container->addChild(std::move(row));
}
@@ -150,8 +150,8 @@ void TestPanelContent::layout(Renderer& renderer, float /*width*/, float /*heigh
m_button->layout(renderer);
m_button->updateInputArea();
}
if (m_dropdown != nullptr) {
m_dropdown->layout(renderer);
if (m_select != nullptr) {
m_select->layout(renderer);
}
if (m_iconButton != nullptr) {
m_iconButton->layout(renderer);
+2 -2
View File
@@ -4,7 +4,7 @@
class Box;
class Button;
class Dropdown;
class Select;
class Label;
class Slider;
class Toggle;
@@ -23,7 +23,7 @@ private:
Label* m_headerLabel = nullptr;
Label* m_sliderValueLabel = nullptr;
Button* m_button = nullptr;
Dropdown* m_dropdown = nullptr;
Select* m_select = nullptr;
Button* m_iconButton = nullptr;
Slider* m_slider = nullptr;
Toggle* m_toggle = nullptr;
@@ -1,4 +1,4 @@
#include "ui/controls/Dropdown.h"
#include "ui/controls/Select.h"
#include "render/programs/RoundedRectProgram.h"
#include "render/scene/InputArea.h"
@@ -25,7 +25,7 @@ constexpr float kIconSize = 14.0f;
} // namespace
Dropdown::Dropdown() {
Select::Select() {
auto triggerBackground = std::make_unique<RectNode>();
m_triggerBackground = static_cast<RectNode*>(addChild(std::move(triggerBackground)));
@@ -65,7 +65,7 @@ Dropdown::Dropdown() {
applyVisualState();
}
void Dropdown::setOptions(std::vector<std::string> options) {
void Select::setOptions(std::vector<std::string> options) {
m_options = std::move(options);
if (m_options.empty()) {
m_selectedIndex = npos;
@@ -80,7 +80,7 @@ void Dropdown::setOptions(std::vector<std::string> options) {
markDirty();
}
void Dropdown::setSelectedIndex(std::size_t index) {
void Select::setSelectedIndex(std::size_t index) {
if (index >= m_options.size()) {
return;
}
@@ -96,7 +96,7 @@ void Dropdown::setSelectedIndex(std::size_t index) {
}
}
void Dropdown::setEnabled(bool enabled) {
void Select::setEnabled(bool enabled) {
if (m_enabled == enabled) {
return;
}
@@ -109,25 +109,25 @@ void Dropdown::setEnabled(bool enabled) {
markDirty();
}
void Dropdown::setPlaceholder(std::string_view placeholder) {
void Select::setPlaceholder(std::string_view placeholder) {
m_placeholder = std::string(placeholder);
syncTriggerText();
applyVisualState();
markDirty();
}
void Dropdown::setOnSelectionChanged(std::function<void(std::size_t, std::string_view)> callback) {
void Select::setOnSelectionChanged(std::function<void(std::size_t, std::string_view)> callback) {
m_onSelectionChanged = std::move(callback);
}
std::string_view Dropdown::selectedText() const noexcept {
std::string_view Select::selectedText() const noexcept {
if (m_selectedIndex >= m_options.size()) {
return {};
}
return m_options[m_selectedIndex];
}
void Dropdown::layout(Renderer& renderer) {
void Select::layout(Renderer& renderer) {
if (m_triggerBackground == nullptr || m_triggerLabel == nullptr || m_triggerIcon == nullptr || m_triggerArea == nullptr ||
m_menuBackground == nullptr) {
return;
@@ -191,7 +191,7 @@ void Dropdown::layout(Renderer& renderer) {
applyVisualState();
}
void Dropdown::clearOptionViews() {
void Select::clearOptionViews() {
for (auto& option : m_optionViews) {
if (option.area != nullptr) {
(void)removeChild(option.area);
@@ -206,7 +206,7 @@ void Dropdown::clearOptionViews() {
m_optionViews.clear();
}
void Dropdown::rebuildOptionViews() {
void Select::rebuildOptionViews() {
clearOptionViews();
for (std::size_t i = 0; i < m_options.size(); ++i) {
@@ -251,7 +251,7 @@ void Dropdown::rebuildOptionViews() {
}
}
void Dropdown::applyVisualState() {
void Select::applyVisualState() {
if (m_triggerLabel == nullptr || m_triggerIcon == nullptr || m_triggerBackground == nullptr || m_menuBackground == nullptr) {
return;
}
@@ -288,7 +288,7 @@ void Dropdown::applyVisualState() {
const bool showMenu = m_open && !m_optionViews.empty();
m_menuBackground->setVisible(showMenu);
m_menuBackground->setStyle(RoundedRectStyle{
.fill = palette.surface,
.fill = palette.surfaceVariant,
.border = palette.outline,
.fillMode = FillMode::Solid,
.radius = Style::radiusMd,
@@ -317,21 +317,21 @@ void Dropdown::applyVisualState() {
.fill = bg,
.border = bg,
.fillMode = FillMode::Solid,
.radius = 0.0f,
.radius = Style::radiusSm,
.softness = 1.0f,
.borderWidth = 0.0f,
});
}
}
void Dropdown::syncTriggerText() {
void Select::syncTriggerText() {
if (m_triggerLabel == nullptr) {
return;
}
m_triggerLabel->setText(selectedText().empty() ? m_placeholder : std::string(selectedText()));
}
void Dropdown::toggleOpen() {
void Select::toggleOpen() {
if (!m_enabled || m_options.empty()) {
return;
}
@@ -343,7 +343,7 @@ void Dropdown::toggleOpen() {
markDirty();
}
void Dropdown::closeMenu() {
void Select::closeMenu() {
if (!m_open) {
return;
}
@@ -14,9 +14,9 @@ class Label;
class RectNode;
class Renderer;
class Dropdown : public Box {
class Select : public Box {
public:
Dropdown();
Select();
void setOptions(std::vector<std::string> options);
void setSelectedIndex(std::size_t index);