Hi again. I am trying to make a basic set up with headers to test my new build using the raylib backend. I have app class that holds the backend object (tgui::RAYLIB::gui). All the logic is nearly the same as the working example. I get no errors and everything loads. I can see that the container of the gui has 2 elements, (canvas and menubar) but I can't get them to draw. What am I doing wrong?
main.cpp
AppUI.h
AppUI.cpp
main.cpp
Code Select
//#include <iostream>
//#include "raylib.h"
//#include <filesystem>
//namespace fs = std::filesystem;
//#include <SFML/Graphics.hpp>
#include <iostream>
//#include <UI.h>
//#include <TGUI/TGUI.hpp>
//#include <TGUI/Backend/raylib.hpp>
#include "Game.h"
int main()
{
Game game;
//float ar = (1080.0 / 1920.0) * 1.25;
game.init(900, 600);
game.runFixed();
return 0;
}
game.cppCode Select
#ifndef GAME_H
#define GAME_H
#include <iostream>
//#include <filesystem>
//#include <unordered_map>
//#include <string>
//#include <cassert> // for assert()
//#include "raylib.h"
//#include "raymath.h"
#include <TGUI/TGUI.hpp>
#include <TGUI/Backend/raylib.hpp>
//#include "VecUtil.h"
//#include "MapMan.h"
//#include "AssetMan.h"
//#include "GameObjects.hpp"
#include "AppUI.h"
class Game
{
public:
Game();
~Game();
void init(int,int);
void runFixed();
private:
ui::App m_ui;
};
#endif
Game.cppCode Select
#include "Game.h"
Game::Game()
{
std::cout << "Game Created" << std::endl;
//m_ui = nullptr;
}
Game::~Game(){CloseWindow();}
void Game::init(int screenWidth,int screenHeight)
{
SetTraceLogLevel(LOG_WARNING);
std::cout << "Game Initializing" << std::endl;
InitWindow(screenWidth, screenHeight, "Raylib is the master");
SetTargetFPS(60);
m_ui.init();
tgui::RAYLIB::Gui* ui = m_ui.getUI();
if (ui == nullptr)
std::cout << "UI is null" << std::endl;
}
void Game::runFixed()
{
while (!WindowShouldClose()) // Detect window close button or ESC key
{
auto ui = m_ui.getUI();
ui->handleEvents();
int pressedChar = GetCharPressed();
while (pressedChar)
{
ui->handleCharPressed(pressedChar);
pressedChar = GetCharPressed();
}
int pressedKey = GetKeyPressed();
while (pressedKey)
{
ui->handleKeyPressed(pressedKey);
pressedKey = GetKeyPressed();
}
BeginDrawing();
ClearBackground({40, 60, 40, 255});
DrawCircle(200, 120, 50, Color{100,10,10,255});
m_ui.draw();
EndDrawing();
// ui.mainLoop();
}
}
AppUI.h
Code Select
#ifndef HEADER_APP_UI
#define HEADER_APP_UI
#pragma once
#include <iostream>
#include <unordered_map>
#include <map>
#include <string>
#include <filesystem>
//#include "raylib.h"
//#include "rlgl.h"
#include <TGUI/TGUI.hpp>
#include <TGUI/Backend/raylib.hpp>
//#include "VecUtil.h"
//#include "AssetMan.h"
namespace ui
{
namespace fs = std::filesystem;
class App
{
public:
App();
~App();
void init();
tgui::RAYLIB::Gui* getUI();
void draw();
void update();
private:
tgui::RAYLIB::Gui m_ui;
};
}
#endif // header guard
AppUI.cpp
Code Select
#include "AppUI.h"
ui::App::App(){
}
ui::App::~App()
{
}
void ui::App::init()
{
std::cout << "Initializing App User Interface." << std::endl;
try {
tgui::Theme blackTheme{ "../../themes/Black.txt" };
tgui::CanvasRaylib::Ptr MainCanvas = tgui::CanvasRaylib::create({ "100%", "100%" });
m_ui.add(MainCanvas, "main_canvas");
tgui::MenuBar::Ptr MainMenuBar = tgui::MenuBar::create();
MainMenuBar->setRenderer(blackTheme.getRenderer("MenuBar"));
MainMenuBar->setHeight(22.f);
MainMenuBar->setPosition("1%", "1%");
MainMenuBar->addMenu("File");
MainMenuBar->addMenuItem("New");
MainMenuBar->addMenuItem("Load");
MainMenuBar->addMenuItem("Save");
MainMenuBar->addMenuItem("Exit");
MainMenuBar->addMenu("Window");
MainMenuBar->addMenuItem("Map Object Tree");//Show a tree view of the map in a child window
MainMenuBar->addMenuItem("Object Properties");//Show Properties of an object
MainMenuBar->addMenu("Help");
MainMenuBar->addMenuItem("About");
MainMenuBar->setVisible(true);
m_ui.add(MainMenuBar, "main_menu_bar");
//MainMenuBar->connectMenuItem({ "File", "New" }, &UI::createWizard, this);
}
catch (const tgui::Exception& e)
{
std::cerr << "TGUI Exception: " << e.what() << std::endl;
exit(1);
}
}
tgui::RAYLIB::Gui* ui::App::getUI()
{
return &m_ui;
}
void ui::App::draw()
{
auto MainCanvas = m_ui.get<tgui::CanvasRaylib>("main_canvas");
BeginTextureMode(MainCanvas->getTextureTarget());
m_ui.draw();
EndTextureMode();
}
void ui::App::update()
{
//m_screenSize.x = static_cast<float>(GetScreenWidth());
//m_screenSize.y = static_cast<float>(GetScreenHeight());
}