From 1beb5709dc62e0d6b38a795ca5db34882a2d1df8 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Fri, 1 May 2026 00:57:32 -0400 Subject: [PATCH] Control window now shows the current and next slide content. --- sample/about-bezos.md | 3 ++- src/control_ui.cpp | 53 ++++++++++++++++--------------------------- src/control_ui.hpp | 8 +------ src/slides_ui.cpp | 7 ++++-- src/slides_ui.hpp | 3 ++- 5 files changed, 30 insertions(+), 44 deletions(-) diff --git a/sample/about-bezos.md b/sample/about-bezos.md index 1a12115..320a7ca 100644 --- a/sample/about-bezos.md +++ b/sample/about-bezos.md @@ -69,7 +69,7 @@ Bare content like this * You don't even need text --- { - "shader": "flame", + "shader": "lightning", "bg_color": [100, 30, 40, 255] } # Shaders @@ -79,6 +79,7 @@ Bare content like this { "bg_color": [10, 10, 25, 255], "font_color": [255, 146, 0, 255], + "title_color": [255, 255, 0, 255], "font_size": 80, "title_size": 120, "font_padding": 20 diff --git a/src/control_ui.cpp b/src/control_ui.cpp index 4f08622..21f96b5 100644 --- a/src/control_ui.cpp +++ b/src/control_ui.cpp @@ -12,7 +12,6 @@ #include "constants.hpp" #include "control_ui.hpp" - ControlUI::ControlUI(sf::RenderWindow& presenter, sf::RenderWindow& controller) : $presenter(presenter), $controller(controller), @@ -20,48 +19,39 @@ ControlUI::ControlUI(sf::RenderWindow& presenter, sf::RenderWindow& controller) { $gui.position(0, 0, CONTROL_WIDTH, CONTROL_HEIGHT); $gui.layout( - "[status|=%(100,100)current]" - "[docs|=%(100,100)next]" + "[status|*%(200,100)current|_]" + "[docs|*%(200,100)preview|_]" ); } -void ControlUI::config_views(guecs::Entity current, guecs::Entity next) { - // BUG jank ass bullshit, fix this in lel-guecs - auto& cur_cell = $gui.cell_for(current); - $cur_view = std::make_shared($presenter.getSize()); - $cur_sprite = std::make_shared($cur_view->getTexture()); - $cur_sprite->setPosition({float(cur_cell.x), float(cur_cell.y)}); - $cur_sprite->setScale({0.3f, 0.3f}); - - auto& next_cell = $gui.cell_for(next); - $next_view = std::make_shared($presenter.getSize()); - $next_sprite = std::make_shared($next_view->getTexture()); - $next_sprite->setPosition({float(next_cell.x), float(next_cell.y)}); - $next_sprite->setScale({0.3f, 0.3f}); -} - void ControlUI::init() { auto status_id = $gui.entity("status"); $gui.set(status_id, {L""}); auto docs_id = $gui.entity("docs"); $gui.set(docs_id, {L"F: fullscreen\nA: win left\nD: win right\nQ: quit"}); - $gui.init(); auto current = $gui.entity("current"); - auto next = $gui.entity("next"); + $gui.set(current, {}); + $gui.set(current, {.content=L"CURRENT", .size=40}); + + auto preview = $gui.entity("preview"); + $gui.set(preview, {.color=guecs::THEME.DARK_DARK}); + $gui.set(preview, { + .content=L"PREVIEW", + .size=40, + .color={180, 180, 180, 255} + }); - config_views(current, next); + $gui.init(); // warning! must come after init so the thing is there $status = $gui.get_if(status_id); dbc::check($status != nullptr, "failed to setup the status text"); } -inline void render_slide(sf::RenderTexture& view, Slide& slide) { - view.clear(); - slide.render(view); - view.display(); +void ControlUI::render_slide(const std::string& name, Slide& slide) { + $gui.show_text(name, slide.preview); } void ControlUI::render(sf::RenderWindow& window, SlideDeck& deck) { @@ -70,19 +60,16 @@ void ControlUI::render(sf::RenderWindow& window, SlideDeck& deck) { auto pos = $presenter.getPosition(); auto size = $presenter.getSize(); - $status->update(fmt::format(L"pos={},{}\nsize={},{}", - pos.x, pos.y, size.x, size.y)); + $status->update(fmt::format(L"Slide: {}\nOf: {}", + deck.current + 1, deck.slides.size())); window.clear(); $gui.render(window); - render_slide(*$cur_view, deck.current_slide()); - window.draw(*$cur_sprite); + render_slide("current", deck.current_slide()); - /* - render_slide(*$next_view, deck.preview_slide()); - window.draw(*$next_sprite); - */ + size_t preview = std::min(deck.slides.size() - 1, deck.current + 1); + render_slide("preview", deck.slide_at(preview)); } void ControlUI::handle_events(std::shared_ptr slides, const sf::Event& event) { diff --git a/src/control_ui.hpp b/src/control_ui.hpp index 1f23267..99878a0 100644 --- a/src/control_ui.hpp +++ b/src/control_ui.hpp @@ -12,15 +12,9 @@ struct ControlUI { sf::RenderWindow& $controller; sf::Vector2u $window_size; - std::shared_ptr $cur_view = nullptr; - std::shared_ptr $cur_sprite = nullptr; - - std::shared_ptr $next_view = nullptr; - std::shared_ptr $next_sprite = nullptr; - ControlUI(sf::RenderWindow& presenter, sf::RenderWindow& controller); void init(); void render(sf::RenderWindow& window, SlideDeck& deck); void handle_events(std::shared_ptr slides, const sf::Event& event); - void config_views(guecs::Entity current, guecs::Entity next); + void render_slide(const std::string& name, Slide& slide); }; diff --git a/src/slides_ui.cpp b/src/slides_ui.cpp index a8fd29c..3562641 100644 --- a/src/slides_ui.cpp +++ b/src/slides_ui.cpp @@ -18,6 +18,8 @@ Slide::Slide(const string& title, const string& content, json& config, json& dec $content(guecs::to_wstring(content)), $config(config) { + preview = std::format(L"# {}\n\n{}", $title, $content); + // first config the text with any font stuff from the deck config_text($title_font, deck_config, "title"); config_text($content_font, deck_config, "font"); @@ -90,8 +92,9 @@ Slide& SlideDeck::current_slide() { return slides.at(current); } -Slide& SlideDeck::preview_slide() { - return slides.at(current + 1); +Slide& SlideDeck::slide_at(size_t index) { + dbc::check(index < slides.size(), "attempt to go past end of slides"); + return slides.at(index); } void SlideDeck::next_slide() { diff --git a/src/slides_ui.hpp b/src/slides_ui.hpp index 712ee4d..ba3127f 100644 --- a/src/slides_ui.hpp +++ b/src/slides_ui.hpp @@ -7,6 +7,7 @@ #include "constants.hpp" struct Slide { + std::wstring preview{L"NO PREVIEW"}; guecs::UI $gui; std::wstring $title; std::wstring $content; @@ -36,7 +37,7 @@ struct SlideDeck { bool at_end(); Slide& current_slide(); - Slide& preview_slide(); + Slide& slide_at(size_t index); void next_slide(); void prev_slide(); void set_slide(size_t index);