mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
fix(select): renamed dropdown to select to better match shadcn + some polish (bg menu color, and rounded hover)
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
Reference in New Issue
Block a user