From 4fe67b36e3bbe6ea5505ed7233c245be9374f0ce Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Sun, 2 Feb 2025 20:59:36 +0100 Subject: refactor selection --- lib/nes/app/ui/screen-browser.cc | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 lib/nes/app/ui/screen-browser.cc (limited to 'lib/nes/app/ui/screen-browser.cc') 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(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 -- cgit v1.3.1