Control window now shows the current and next slide content.

master
Zed A. Shaw 4 weeks ago
parent 459ff06eee
commit 1beb5709dc
  1. 3
      sample/about-bezos.md
  2. 53
      src/control_ui.cpp
  3. 8
      src/control_ui.hpp
  4. 7
      src/slides_ui.cpp
  5. 3
      src/slides_ui.hpp

@ -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

@ -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<sf::RenderTexture>($presenter.getSize());
$cur_sprite = std::make_shared<sf::Sprite>($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<sf::RenderTexture>($presenter.getSize());
$next_sprite = std::make_shared<sf::Sprite>($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<guecs::Text>(status_id, {L""});
auto docs_id = $gui.entity("docs");
$gui.set<guecs::Text>(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<guecs::Rectangle>(current, {});
$gui.set<guecs::Text>(current, {.content=L"CURRENT", .size=40});
auto preview = $gui.entity("preview");
$gui.set<guecs::Rectangle>(preview, {.color=guecs::THEME.DARK_DARK});
$gui.set<guecs::Text>(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<guecs::Text>(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<SlidesUI> slides, const sf::Event& event) {

@ -12,15 +12,9 @@ struct ControlUI {
sf::RenderWindow& $controller;
sf::Vector2u $window_size;
std::shared_ptr<sf::RenderTexture> $cur_view = nullptr;
std::shared_ptr<sf::Sprite> $cur_sprite = nullptr;
std::shared_ptr<sf::RenderTexture> $next_view = nullptr;
std::shared_ptr<sf::Sprite> $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<SlidesUI> slides, const sf::Event& event);
void config_views(guecs::Entity current, guecs::Entity next);
void render_slide(const std::string& name, Slide& slide);
};

@ -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() {

@ -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);

Loading…
Cancel
Save