xemu_perf_tests
A collection of tests for the Xbox nv2a graphics processor
 
Loading...
Searching...
No Matches
menu_item.h
1#ifndef XEMU_PERF_TESTS_MENU_ITEM_H
2#define XEMU_PERF_TESTS_MENU_ITEM_H
3
4#include <chrono>
5#include <cstdint>
6#include <functional>
7#include <memory>
8#include <string>
9#include <vector>
10
11class TestSuite;
12
13struct MenuItem {
14 public:
15 MenuItem(std::string name, uint32_t width, uint32_t height) : width(width), height(height), name(std::move(name)) {}
16 virtual ~MenuItem() = default;
17
18 static void SetBackgroundColor(uint32_t background_color);
19
20 // Whether or not this menu item becomes the active drawable when activated.
21 [[nodiscard]] virtual bool IsEnterable() const { return !submenu.empty(); }
22
23 virtual void Draw();
24
25 // Invoked when this MenuItem becomes the active drawable.
26 virtual void OnEnter();
27
28 // Invoked when the user activates this MenuItem.
29 virtual void Activate();
30
31 virtual void ActivateCurrentSuite();
32
33 virtual bool Deactivate();
34
35 virtual void CursorUp(bool is_repeat);
36 virtual void CursorDown(bool is_repeat);
37 virtual void CursorLeft(bool is_repeat);
38 virtual void CursorRight(bool is_repeat);
39
40 void CursorUpAndActivate();
41 void CursorDownAndActivate();
42
43 protected:
44 void PrepareDraw(uint32_t background_color) const;
45 static void Swap();
46
47 public:
48 uint32_t width;
49 uint32_t height;
50 std::string name;
51
52 static uint32_t menu_background_color_;
53
54 uint32_t cursor_position{0};
55 std::vector<std::shared_ptr<MenuItem>> submenu{};
56 std::shared_ptr<MenuItem> active_submenu{};
57 MenuItem* parent{nullptr};
58};
59
60struct MenuItemCallable : public MenuItem {
61 MenuItemCallable(std::function<void()> on_activate, std::string name, uint32_t width, uint32_t height);
62
63 void Draw() override;
64
65 void Activate() override;
66 void ActivateCurrentSuite() override {}
67 std::function<void()> on_activate;
68};
69
70struct MenuItemTest : public MenuItem {
71 MenuItemTest(std::shared_ptr<TestSuite> suite, std::string name, uint32_t width, uint32_t height);
72
73 [[nodiscard]] bool IsEnterable() const override { return true; }
74
75 void Draw() override;
76 void OnEnter() override;
77 void Activate() override { OnEnter(); }
78 bool Deactivate() override;
79 void ActivateCurrentSuite() override {}
80 void CursorUp(bool is_repeat) override;
81 void CursorDown(bool is_repeat) override;
82 void CursorLeft(bool is_repeat) override {}
83 void CursorRight(bool is_repeat) override {}
84
85 std::shared_ptr<TestSuite> suite;
86 bool has_run_once_{false};
87};
88
89struct MenuItemSuite : public MenuItem {
90 explicit MenuItemSuite(const std::shared_ptr<TestSuite>& suite, uint32_t width, uint32_t height);
91
92 void ActivateCurrentSuite() override;
93 std::shared_ptr<TestSuite> suite;
94};
95
96struct MenuItemRoot : public MenuItem {
97 explicit MenuItemRoot(const std::vector<std::shared_ptr<TestSuite>>& suites, std::function<void()> on_run_all,
98 std::function<void()> on_exit, uint32_t width, uint32_t height, bool disable_autorun,
99 bool autorun_immediately);
100
101 void Draw() override;
102 void Activate() override;
103 void ActivateCurrentSuite() override;
104 bool Deactivate() override;
105 void CursorUp(bool is_repeat) override;
106 void CursorDown(bool is_repeat) override;
107 void CursorLeft(bool is_repeat) override;
108 void CursorRight(bool is_repeat) override;
109
110 std::function<void()> on_run_all;
111 std::function<void()> on_exit;
112 std::chrono::steady_clock::time_point start_time;
113 bool timer_valid{false};
114 bool timer_cancelled{false};
115
116 private:
117 bool disable_autorun_;
118 bool autorun_immediately_;
119};
120
121struct MenuItemOptions : public MenuItem {
122 MenuItemOptions(const std::vector<std::shared_ptr<TestSuite>>& suites, std::function<void()> on_exit, uint32_t width,
123 uint32_t height);
124
125 void Draw() override;
126 void Activate() override;
127 void ActivateCurrentSuite() override;
128 bool Deactivate() override;
129 void CursorUp(bool is_repeat) override;
130 void CursorDown(bool is_repeat) override;
131 void CursorLeft(bool is_repeat) override;
132 void CursorRight(bool is_repeat) override;
133
134 std::function<void()> on_exit;
135 std::chrono::steady_clock::time_point start_time;
136 bool timer_valid{false};
137 bool timer_cancelled{false};
138};
139
140#endif // XEMU_PERF_TESTS_MENU_ITEM_H
Definition test_suite.h:16
Definition menu_item.h:60
Definition menu_item.h:121
Definition menu_item.h:96
Definition menu_item.h:89
Definition menu_item.h:70
Definition menu_item.h:13