diff options
Diffstat (limited to 'lib/nes/app/ui/screen-browser.cc')
| -rw-r--r-- | lib/nes/app/ui/screen-browser.cc | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/nes/app/ui/screen-browser.cc b/lib/nes/app/ui/screen-browser.cc new file mode 100644 index 0000000..da2d82d --- /dev/null +++ b/lib/nes/app/ui/screen-browser.cc @@ -0,0 +1,71 @@ +#include "nes/app/ui/screen-browser.hh" +#include "nes/app/graphics/renderer.hh" +#include "nes/app/graphics/color.hh" +#include "nes/app/input/input-device-keyboard.hh" +#include "nes/common/string-builder.hh" + +namespace nes::app +{ + auto screen_browser::selection_impl::render_item( + renderer& renderer, i32 const& item, i32 const x, i32 const y, u32 const width, color const color) const -> void + { + renderer.render_text_format(x, y, color, text_attributes{}.set_max_width(width), "Item {}", item); + } + + auto screen_browser::selection_impl::load_page(int (&items)[5], u32 const page) -> u32 + { + for (auto i = u32{ 0 }; i < 5; ++i) + { + items[i] = static_cast<i32>(page * 5 + i); + } + return 5; + } + + screen_browser::screen_browser(input_device_keyboard& keyboard) + : keyboard_{ keyboard } + { + selection_.set_page_count(2); + } + + auto screen_browser::render(renderer& renderer) -> void + { + renderer.render_fill(color::background_primary); + renderer.render_rect(0, 0, 32, 3, color::background_secondary); + + renderer.render_text(2, 1, "Load Game", color::foreground_primary); + renderer.render_text_format( + 30, 1, color::foreground_secondary, text_attributes{}.set_alignment(text_alignment::right), + "Page {}/{}", selection_.get_current_page() + 1, selection_.get_page_count()); + + selection_.render(renderer); + } + + auto screen_browser::process_events() -> action + { + while (auto const event = keyboard_.poll_event()) + { + if (event == input_event::key_down(key::space)) + { + selection_.go_next(); + } + else if (event == input_event::key_down(key::arrow_up)) + { + selection_.go_up(); + } + else if (event == input_event::key_down(key::arrow_down)) + { + selection_.go_down(); + } + else if (event == input_event::key_down(key::backspace)) + { + return action::go_to_title; + } + else if (event == input_event::key_down(key::enter)) + { + return action::launch_game; + } + } + + return action::none; + } +} // namespace nes::app
\ No newline at end of file |
