redesign, broadcast server crash fix
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
#include <pu/Plutonium>
|
||||
#include <Theme.hpp>
|
||||
|
||||
namespace ui {
|
||||
|
||||
class Card {
|
||||
public:
|
||||
pu::ui::elm::Rectangle::Ref bg;
|
||||
|
||||
Card(pu::ui::Layout* parent, int x, int y, int w, int h,
|
||||
pu::ui::Color color = theme::color::BgSurface,
|
||||
int rad = theme::radius::lg) {
|
||||
bg = pu::ui::elm::Rectangle::New(x, y, w, h, color, rad);
|
||||
parent->Add(bg);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
#pragma once
|
||||
#include <pu/Plutonium>
|
||||
#include <Theme.hpp>
|
||||
#include <ui/UiContext.hpp>
|
||||
#include <account.hpp>
|
||||
|
||||
namespace ui {
|
||||
|
||||
class HeaderBar {
|
||||
private:
|
||||
pu::ui::elm::Rectangle::Ref bg;
|
||||
pu::ui::elm::Rectangle::Ref divider;
|
||||
pu::ui::elm::TextBlock::Ref appName;
|
||||
pu::ui::elm::TextBlock::Ref subtitle;
|
||||
pu::ui::elm::Rectangle::Ref chipBg;
|
||||
pu::ui::elm::Image::Ref avatar;
|
||||
pu::ui::elm::TextBlock::Ref userName;
|
||||
|
||||
public:
|
||||
HeaderBar(pu::ui::Layout* parent, const std::string& sub = "Save Transfer") {
|
||||
using namespace theme;
|
||||
|
||||
bg = pu::ui::elm::Rectangle::New(
|
||||
0, 0, layout::ScreenW, layout::HeaderH, color::BgSurface);
|
||||
divider = pu::ui::elm::Rectangle::New(
|
||||
0, layout::HeaderH - 1, layout::ScreenW, 1, color::Divider);
|
||||
|
||||
appName = pu::ui::elm::TextBlock::New(space::lg, 8, "NXST");
|
||||
appName->SetFont(type::font(type::Title));
|
||||
appName->SetColor(color::TextPrimary);
|
||||
|
||||
subtitle = pu::ui::elm::TextBlock::New(space::lg, 46, sub);
|
||||
subtitle->SetFont(type::font(type::Caption));
|
||||
subtitle->SetColor(color::TextMuted);
|
||||
|
||||
const int chipW = 280;
|
||||
const int chipX = layout::ScreenW - chipW - space::lg;
|
||||
chipBg = pu::ui::elm::Rectangle::New(
|
||||
chipX, 16, chipW, 40,
|
||||
color::BgSurface2, radius::pill);
|
||||
chipBg->SetVisible(false);
|
||||
|
||||
avatar = pu::ui::elm::Image::New(chipX + 4, 20, "");
|
||||
avatar->SetWidth(32);
|
||||
avatar->SetHeight(32);
|
||||
avatar->SetVisible(false);
|
||||
|
||||
userName = pu::ui::elm::TextBlock::New(chipX + 44, 24, "");
|
||||
userName->SetFont(type::font(type::Body));
|
||||
userName->SetColor(color::TextPrimary);
|
||||
userName->SetVisible(false);
|
||||
|
||||
parent->Add(bg);
|
||||
parent->Add(divider);
|
||||
parent->Add(appName);
|
||||
parent->Add(subtitle);
|
||||
parent->Add(chipBg);
|
||||
parent->Add(avatar);
|
||||
parent->Add(userName);
|
||||
}
|
||||
|
||||
void SetUser(const std::optional<AccountUid>& uid, const std::string& name) {
|
||||
const bool show = uid.has_value();
|
||||
chipBg->SetVisible(show);
|
||||
userName->SetVisible(show);
|
||||
if (show) {
|
||||
userName->SetText(name);
|
||||
std::string path = Account::iconPath(*uid);
|
||||
if (!path.empty()) {
|
||||
avatar->SetImage(path);
|
||||
avatar->SetWidth(32);
|
||||
avatar->SetHeight(32);
|
||||
avatar->SetVisible(avatar->IsImageValid());
|
||||
} else {
|
||||
avatar->SetVisible(false);
|
||||
}
|
||||
} else {
|
||||
avatar->SetVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
void SetSubtitle(const std::string& text) {
|
||||
subtitle->SetText(text);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
#pragma once
|
||||
#include <pu/Plutonium>
|
||||
#include <Theme.hpp>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace ui {
|
||||
|
||||
struct Hint {
|
||||
std::string glyph;
|
||||
std::string label;
|
||||
};
|
||||
|
||||
class HintBar {
|
||||
private:
|
||||
pu::ui::Layout* parent;
|
||||
pu::ui::elm::Rectangle::Ref bg;
|
||||
pu::ui::elm::Rectangle::Ref divider;
|
||||
std::vector<pu::ui::elm::TextBlock::Ref> labels;
|
||||
|
||||
public:
|
||||
HintBar(pu::ui::Layout* p) : parent(p) {
|
||||
using namespace theme;
|
||||
bg = pu::ui::elm::Rectangle::New(
|
||||
0, layout::ScreenH - layout::HintH,
|
||||
layout::ScreenW, layout::HintH, color::BgSurface);
|
||||
divider = pu::ui::elm::Rectangle::New(
|
||||
0, layout::ScreenH - layout::HintH,
|
||||
layout::ScreenW, 1, color::Divider);
|
||||
parent->Add(bg);
|
||||
parent->Add(divider);
|
||||
}
|
||||
|
||||
void SetHints(const std::vector<Hint>& hints) {
|
||||
using namespace theme;
|
||||
for (auto& l : labels) l->SetVisible(false);
|
||||
labels.clear();
|
||||
|
||||
int x = layout::ScreenW - space::lg;
|
||||
int y = layout::ScreenH - layout::HintH + 18;
|
||||
for (auto it = hints.rbegin(); it != hints.rend(); ++it) {
|
||||
std::string text = it->glyph + " " + it->label;
|
||||
auto tb = pu::ui::elm::TextBlock::New(0, y, text);
|
||||
tb->SetFont(type::font(type::Label));
|
||||
tb->SetColor(color::TextSecondary);
|
||||
int w = tb->GetWidth();
|
||||
x -= w;
|
||||
tb->SetX(x);
|
||||
x -= space::xl;
|
||||
parent->Add(tb);
|
||||
labels.push_back(tb);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <optional>
|
||||
#include <switch.h>
|
||||
#include <account.hpp>
|
||||
|
||||
namespace ui {
|
||||
struct UiContext {
|
||||
std::optional<AccountUid> selectedUser;
|
||||
std::string selectedUserName;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user