enable warning flags, fix all warning, default init all vars, bump stb libs used in nanovg

fixes #98
This commit is contained in:
ITotalJustice
2025-01-16 21:01:17 +00:00
parent f66494aeb5
commit 657c160599
36 changed files with 351 additions and 480 deletions

View File

@@ -13,10 +13,10 @@ public:
auto Draw(NVGcontext* vg, Theme* theme) -> void override;
private:
Result m_code;
std::string m_message;
std::string m_module_str;
std::string m_description_str;
Result m_code{};
std::string m_message{};
std::string m_module_str{};
std::string m_description_str{};
};
} // namespace sphaira::ui

View File

@@ -43,8 +43,8 @@ private:
const s64 m_row;
const s64 m_page;
Vec4 m_v;
Vec2 m_pad;
Vec4 m_v{};
Vec2 m_pad{};
Vec4 m_scrollbar{};

View File

@@ -42,26 +42,26 @@ enum class EntryStatus {
};
struct Entry {
std::string category; // todo: lable
std::string binary; // optional, only valid for .nro
std::string updated; // date of update
std::string name;
std::string license; // optional
std::string title; // same as name but with spaces
std::string url; // url of repo (optional?)
std::string description;
std::string author;
std::string changelog; // optional
u64 screens; // number of screenshots
u64 extracted; // extracted size in KiB
std::string version;
u64 filesize; // compressed size in KiB
std::string details;
u64 app_dls;
std::string md5; // md5 of the zip
std::string category{}; // todo: lable
std::string binary{}; // optional, only valid for .nro
std::string updated{}; // date of update
std::string name{};
std::string license{}; // optional
std::string title{}; // same as name but with spaces
std::string url{}; // url of repo (optional?)
std::string description{};
std::string author{};
std::string changelog{}; // optional
u64 screens{}; // number of screenshots
u64 extracted{}; // extracted size in KiB
std::string version{};
u64 filesize{}; // compressed size in KiB
std::string details{};
u64 app_dls{};
std::string md5{}; // md5 of the zip
LazyImage image;
u32 updated_num;
LazyImage image{};
u32 updated_num{};
EntryStatus status{EntryStatus::Get};
};
@@ -99,13 +99,13 @@ private:
Menu& m_menu;
s64 m_index{}; // where i am in the array
std::vector<Option> m_options;
LazyImage m_banner;
std::unique_ptr<List> m_list;
std::vector<Option> m_options{};
LazyImage m_banner{};
std::unique_ptr<List> m_list{};
std::shared_ptr<ScrollableText> m_details;
std::shared_ptr<ScrollableText> m_changelog;
std::shared_ptr<ScrollableText> m_detail_changelog;
std::shared_ptr<ScrollableText> m_details{};
std::shared_ptr<ScrollableText> m_changelog{};
std::shared_ptr<ScrollableText> m_detail_changelog{};
bool m_show_changlog{};
};
@@ -134,34 +134,6 @@ enum OrderType {
OrderType_Ascending,
};
struct FeedbackEntry {
u32 id;
u64 time;
std::string package; // name of package
std::string content; // the feedback message that was sent
std::string reply; // the reply, "" if no reply yet :)
};
struct FeedbackMenu final : MenuBase {
FeedbackMenu(const std::vector<Entry>& package_entries, LazyImage& default_image);
~FeedbackMenu();
void Update(Controller* controller, TouchInfo* touch) override;
void Draw(NVGcontext* vg, Theme* theme) override;
void OnFocusGained() override;
void SetIndex(s64 index);
void ScanHomebrew();
void Sort();
private:
const std::vector<Entry>& m_package_entries;
LazyImage& m_default_image;
std::vector<FeedbackEntry> m_entries;
s64 m_index{}; // where i am in the array
ImageDownloadState m_repo_download_state{ImageDownloadState::None};
};
struct Menu final : MenuBase {
Menu(const std::vector<NroEntry>& nro_entries);
~Menu();
@@ -191,27 +163,27 @@ struct Menu final : MenuBase {
private:
const std::vector<NroEntry>& m_nro_entries;
std::vector<Entry> m_entries;
std::vector<EntryMini> m_entries_index[Filter_MAX];
std::vector<EntryMini> m_entries_index_author;
std::vector<EntryMini> m_entries_index_search;
std::span<EntryMini> m_entries_current;
std::vector<Entry> m_entries{};
std::vector<EntryMini> m_entries_index[Filter_MAX]{};
std::vector<EntryMini> m_entries_index_author{};
std::vector<EntryMini> m_entries_index_search{};
std::span<EntryMini> m_entries_current{};
Filter m_filter{Filter::Filter_All};
SortType m_sort{SortType::SortType_Updated};
OrderType m_order{OrderType::OrderType_Descending};
s64 m_index{}; // where i am in the array
LazyImage m_default_image;
LazyImage m_update;
LazyImage m_get;
LazyImage m_local;
LazyImage m_installed;
LazyImage m_default_image{};
LazyImage m_update{};
LazyImage m_get{};
LazyImage m_local{};
LazyImage m_installed{};
ImageDownloadState m_repo_download_state{ImageDownloadState::None};
std::unique_ptr<List> m_list;
std::unique_ptr<List> m_list{};
std::string m_search_term;
std::string m_author_term;
std::string m_search_term{};
std::string m_author_term{};
s64 m_entry_search_jump_back{};
s64 m_entry_author_jump_back{};
bool m_is_search{};

View File

@@ -16,12 +16,12 @@ struct Menu final : MenuBase {
private:
const fs::FsPath m_path;
fs::FsNativeSd m_fs;
FsFile m_file;
fs::FsNativeSd m_fs{};
FsFile m_file{};
s64 m_file_size{};
s64 m_file_offset{};
std::unique_ptr<ScrollableText> m_scroll_text;
std::unique_ptr<ScrollableText> m_scroll_text{};
s64 m_start{};
s64 m_index{}; // where i am in the array

View File

@@ -86,23 +86,23 @@ struct FileEntry : FsDirectoryEntry {
struct FileAssocEntry {
fs::FsPath path{}; // ini name
std::string name; // ini name
std::vector<std::string> ext; // list of ext
std::vector<std::string> database; // list of systems
std::string name{}; // ini name
std::vector<std::string> ext{}; // list of ext
std::vector<std::string> database{}; // list of systems
};
struct LastFile {
fs::FsPath name;
s64 index;
float offset;
s64 entries_count;
fs::FsPath name{};
s64 index{};
float offset{};
s64 entries_count{};
};
struct FsDirCollection {
fs::FsPath path;
fs::FsPath parent_name;
std::vector<FsDirectoryEntry> files;
std::vector<FsDirectoryEntry> dirs;
fs::FsPath path{};
fs::FsPath parent_name{};
std::vector<FsDirectoryEntry> files{};
std::vector<FsDirectoryEntry> dirs{};
};
using FsDirCollections = std::vector<FsDirCollection>;
@@ -231,32 +231,32 @@ private:
static constexpr inline const char* INI_SECTION = "filebrowser";
const std::vector<NroEntry>& m_nro_entries;
std::unique_ptr<fs::FsNative> m_fs;
FsType m_fs_type;
fs::FsPath m_path;
std::vector<FileEntry> m_entries;
std::vector<u32> m_entries_index; // files not including hidden
std::vector<u32> m_entries_index_hidden; // includes hidden files
std::vector<u32> m_entries_index_search; // files found via search
std::span<u32> m_entries_current;
std::unique_ptr<fs::FsNative> m_fs{};
FsType m_fs_type{};
fs::FsPath m_path{};
std::vector<FileEntry> m_entries{};
std::vector<u32> m_entries_index{}; // files not including hidden
std::vector<u32> m_entries_index_hidden{}; // includes hidden files
std::vector<u32> m_entries_index_search{}; // files found via search
std::span<u32> m_entries_current{};
std::unique_ptr<List> m_list;
std::optional<fs::FsPath> m_daybreak_path;
std::unique_ptr<List> m_list{};
std::optional<fs::FsPath> m_daybreak_path{};
// search options
// show files [X]
// show folders [X]
// recursive (slow) [ ]
std::vector<FileAssocEntry> m_assoc_entries;
std::vector<FileEntry> m_selected_files;
std::vector<FileAssocEntry> m_assoc_entries{};
std::vector<FileEntry> m_selected_files{};
// this keeps track of the highlighted file before opening a folder
// if the user presses B to go back to the previous dir
// this vector is popped, then, that entry is checked if it still exists
// if it does, the index becomes that file.
std::vector<LastFile> m_previous_highlighted_file;
fs::FsPath m_selected_path;
std::vector<LastFile> m_previous_highlighted_file{};
fs::FsPath m_selected_path{};
s64 m_index{};
s64 m_selected_count{};
SelectedType m_selected_type{SelectedType::None};

View File

@@ -10,35 +10,35 @@
namespace sphaira::ui::menu::gh {
struct AssetEntry {
std::string name;
std::string path;
std::string pre_install_message;
std::string post_install_message;
std::string name{};
std::string path{};
std::string pre_install_message{};
std::string post_install_message{};
};
struct Entry {
fs::FsPath json_path;
std::string url;
std::string owner;
std::string repo;
std::string tag;
std::string pre_install_message;
std::string post_install_message;
std::vector<AssetEntry> assets;
fs::FsPath json_path{};
std::string url{};
std::string owner{};
std::string repo{};
std::string tag{};
std::string pre_install_message{};
std::string post_install_message{};
std::vector<AssetEntry> assets{};
};
struct GhApiAsset {
std::string name;
std::string content_type;
u64 size;
u64 download_count;
std::string browser_download_url;
std::string name{};
std::string content_type{};
u64 size{};
u64 download_count{};
std::string browser_download_url{};
};
struct GhApiEntry {
std::string tag_name;
std::string name;
std::vector<GhApiAsset> assets;
std::string tag_name{};
std::string name{};
std::vector<GhApiAsset> assets{};
};
struct Menu final : MenuBase {
@@ -66,9 +66,9 @@ private:
void UpdateSubheading();
private:
std::vector<Entry> m_entries;
std::vector<Entry> m_entries{};
s64 m_index{};
std::unique_ptr<List> m_list;
std::unique_ptr<List> m_list{};
};
} // namespace sphaira::ui::menu::gh

View File

@@ -50,9 +50,9 @@ struct Menu final : MenuBase {
private:
static constexpr inline const char* INI_SECTION = "homebrew";
std::vector<NroEntry> m_entries;
std::vector<NroEntry> m_entries{};
s64 m_index{}; // where i am in the array
std::unique_ptr<List> m_list;
std::unique_ptr<List> m_list{};
option::OptionLong m_sort{INI_SECTION, "sort", SortType::SortType_AlphabeticalStar};
option::OptionLong m_order{INI_SECTION, "order", OrderType::OrderType_Descending};

View File

@@ -25,9 +25,9 @@ private:
void UpdateVars();
private:
std::string m_title;
std::string m_title_sub_heading;
std::string m_sub_heading;
std::string m_title{};
std::string m_title_sub_heading{};
std::string m_sub_heading{};
struct tm m_tm{};
TimeStamp m_poll_timestamp{};

View File

@@ -42,79 +42,50 @@ enum class PageLoadState {
Error,
};
// all commented out entries are those that we don't query for.
// this saves time not only processing the json, but also the download
// of said json.
// by reducing the fields to only what we need, the size is 4-5x smaller.
struct Creator {
std::string id;
std::string display_name;
std::string id{};
std::string display_name{};
};
struct Details {
std::string name;
// std::string description;
std::string name{};
};
struct Preview {
// std::string original;
std::string thumb;
LazyImage lazy_image;
std::string thumb{};
LazyImage lazy_image{};
};
struct DownloadPack {
std::string filename;
std::string url;
std::string mimetype;
std::string filename{};
std::string url{};
std::string mimetype{};
};
using DownloadTheme = DownloadPack;
struct ThemeEntry {
std::string id;
// Creator creator;
// Details details;
// std::string last_updated;
// u64 dl_count;
// u64 like_count;
// std::vector<std::string> categories;
// std::string target;
Preview preview;
std::string id{};
Preview preview{};
};
// struct Pack {
// std::string id;
// Creator creator;
// Details details;
// std::string last_updated;
// std::vector<std::string> categories;
// u64 dl_count;
// u64 like_count;
// std::vector<ThemeEntry> themes;
// };
struct PackListEntry {
std::string id;
Creator creator;
Details details;
// std::string last_updated;
// std::vector<std::string> categories;
// u64 dl_count;
// u64 like_count;
std::vector<ThemeEntry> themes;
std::string id{};
Creator creator{};
Details details{};
std::vector<ThemeEntry> themes{};
};
struct Pagination {
u64 page;
u64 limit;
u64 page_count;
u64 item_count;
u64 page{};
u64 limit{};
u64 page_count{};
u64 item_count{};
};
struct PackList {
std::vector<PackListEntry> packList;
Pagination pagination;
std::vector<PackListEntry> packList{};
Pagination pagination{};
};
struct Config {
@@ -123,10 +94,10 @@ struct Config {
u32 sort_index{};
u32 order_index{};
// search query, if empty, its not used
std::string query;
std::string query{};
// this is actually an array of creator ids, but we don't support that feature
// if empty, its not used
std::string creator;
std::string creator{};
// defaults
u32 page{1};
u32 limit{18};
@@ -152,7 +123,7 @@ struct Config {
struct Menu; // fwd
struct PageEntry {
std::vector<PackListEntry> m_packList;
std::vector<PackListEntry> m_packList{};
Pagination m_pagination{};
PageLoadState m_ready{PageLoadState::None};
};
@@ -172,9 +143,6 @@ struct Menu final : MenuBase {
}
}
// void SetSearch(const std::string& term);
// void SetAuthor();
void InvalidateAllPages();
void PackListDownload();
void OnPackListDownload();
@@ -183,14 +151,14 @@ private:
static constexpr inline const char* INI_SECTION = "themezer";
static constexpr inline u32 MAX_ON_PAGE = 16; // same as website
std::vector<PageEntry> m_pages;
std::vector<PageEntry> m_pages{};
s64 m_page_index{};
s64 m_page_index_max{1};
std::string m_search{};
s64 m_index{}; // where i am in the array
std::unique_ptr<List> m_list;
std::unique_ptr<List> m_list{};
// options
option::OptionLong m_sort{INI_SECTION, "sort", 0};

View File

@@ -22,9 +22,9 @@ private:
void Draw(NVGcontext* vg, Theme* theme) override;
private:
std::string m_text;
std::string m_text{};
std::size_t m_count{180}; // count down to zero
Side m_side;
Side m_side{};
bool m_bounds_measured{};
};
@@ -47,8 +47,8 @@ private:
void Draw(NVGcontext* vg, Theme* theme, Entries& entries);
private:
Entries m_entries_left;
Entries m_entries_right;
Entries m_entries_left{};
Entries m_entries_right{};
Mutex m_mutex{};
};

View File

@@ -18,7 +18,7 @@ public:
private:
private:
std::string m_text;
std::string m_text{};
Vec2 m_text_pos{};
bool m_selected{false};
};
@@ -48,13 +48,13 @@ private:
void SetIndex(s64 index);
private:
std::string m_message;
Callback m_callback;
std::string m_message{};
Callback m_callback{};
Vec4 m_spacer_line{};
s64 m_index{};
std::vector<OptionBoxEntry> m_entries;
std::vector<OptionBoxEntry> m_entries{};
};
} // namespace sphaira::ui

View File

@@ -32,12 +32,12 @@ private:
static constexpr float m_text_xoffset{15.f};
static constexpr float m_line_width{1220.f};
std::string m_title;
Items m_items;
Callback m_callback;
s64 m_index; // index in list array
std::string m_title{};
Items m_items{};
Callback m_callback{};
s64 m_index{}; // index in list array
std::unique_ptr<List> m_list;
std::unique_ptr<List> m_list{};
float m_yoff{};
float m_line_top{};

View File

@@ -42,9 +42,9 @@ struct ProgressBox final : Widget {
public:
struct ThreadData {
ProgressBox* pbox;
ProgressBoxCallback callback;
bool result;
ProgressBox* pbox{};
ProgressBoxCallback callback{};
bool result{};
};
private:

View File

@@ -14,15 +14,15 @@ struct ScrollableText final : Widget {
// float m_y_off = m_y_off_base;
// static constexpr float m_clip_y = 250.0F;
static constexpr inline float m_step = 30;
const float m_font_size;
const float m_y_off_base;
float m_y_off;
const float m_clip_y;
const float m_end_w;
static constexpr float m_step = 30;
int m_index = 0;
const float m_font_size;
float m_bounds[4];
float m_y_off{};
int m_index{};
float m_bounds[4]{};
};
} // namespace sphaira::ui

View File

@@ -323,37 +323,36 @@ inline ActionType operator|(ActionType a, ActionType b) {
}
struct Action final {
using CallbackEmpty = std::function<void()>;
using CallbackWithBool = std::function<void(bool)>;
using Callback = std::variant<
std::function<void()>,
std::function<void(bool)>
CallbackEmpty,
CallbackWithBool
>;
Action(Callback cb) : m_type{ActionType::DOWN}, m_hint{""}, m_callback{cb}, m_hidden{true} {}
Action(std::string hint, Callback cb) : m_type{ActionType::DOWN}, m_hint{hint}, m_callback{cb} {}
Action(u8 type, Callback cb) : m_type{type}, m_hint{""}, m_callback{cb}, m_hidden{true} {}
Action(u8 type, std::string hint, Callback cb) : m_type{type}, m_hint{hint}, m_callback{cb} {}
Action(Callback cb) : Action{ActionType::DOWN, "", cb} {}
Action(std::string hint, Callback cb) : Action{ActionType::DOWN, hint, cb} {}
Action(u8 type, Callback cb) : Action{type, "", cb} {}
Action(u8 type, std::string hint, Callback cb) : m_type{type}, m_callback{cb}, m_hint{hint} {}
auto IsHidden() const noexcept { return m_hidden; }
auto IsHidden() const noexcept { return m_hint.empty(); }
auto Invoke(bool down) const {
// todo: make this a visit
switch (m_callback.index()) {
case 0:
std::get<0>(m_callback)();
break;
case 1:
std::get<1>(m_callback)(down);
break;
}
// std::visit([down, this](auto& cb){
// cb(down);
// }), m_callback;
std::visit([down](auto&& arg){
using T = std::decay_t<decltype(arg)>;
if constexpr(std::is_same_v<T, CallbackEmpty>) {
arg();
} else if constexpr(std::is_same_v<T, CallbackWithBool>) {
arg(down);
} else {
static_assert(false, "non-exhaustive visitor!");
}
}, m_callback);
}
u8 m_type;
std::string m_hint; // todo: make optional
Callback m_callback;
bool m_hidden{false}; // replace this optional text
u8 m_type{};
Callback m_callback{};
std::string m_hint{};
};
struct Controller {

View File

@@ -78,7 +78,7 @@ struct Widget : public Object {
auto GetUiButtons() const -> uiButtons;
Actions m_actions;
Actions m_actions{};
Vec2 m_button_pos{1220, 675};
bool m_focus{false};
bool m_pop{false};