91 lines
2.3 KiB
C++
91 lines
2.3 KiB
C++
/*
|
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
|
*/
|
|
|
|
#include <ctime>
|
|
|
|
#include <ox/logconn/logconn.hpp>
|
|
#include <ox/std/trace.hpp>
|
|
#include <ox/std/uuid.hpp>
|
|
#include <keel/media.hpp>
|
|
#include <turbine/turbine.hpp>
|
|
|
|
#include <studio/context.hpp>
|
|
#include "studioapp.hpp"
|
|
|
|
namespace studio {
|
|
|
|
class StudioUIDrawer: public turbine::gl::Drawer {
|
|
private:
|
|
StudioUI *m_ui = nullptr;
|
|
public:
|
|
explicit StudioUIDrawer(StudioUI *ui) noexcept: m_ui(ui) {
|
|
}
|
|
protected:
|
|
void draw(turbine::Context&) noexcept final {
|
|
m_ui->draw();
|
|
}
|
|
};
|
|
|
|
static int updateHandler(turbine::Context &ctx) noexcept {
|
|
auto sctx = turbine::applicationData<studio::StudioContext>(ctx);
|
|
auto ui = dynamic_cast<StudioUI*>(sctx->ui);
|
|
ui->update();
|
|
return 16;
|
|
}
|
|
|
|
static void keyEventHandler(turbine::Context &ctx, turbine::Key key, bool down) noexcept {
|
|
auto sctx = turbine::applicationData<studio::StudioContext>(ctx);
|
|
auto ui = dynamic_cast<StudioUI*>(sctx->ui);
|
|
ui->handleKeyEvent(key, down);
|
|
}
|
|
|
|
static ox::Error runApp(
|
|
ox::CRStringView appName,
|
|
ox::String projectDataDir,
|
|
ox::UniquePtr<ox::FileSystem> fs) noexcept {
|
|
oxRequireM(ctx, turbine::init(std::move(fs), appName));
|
|
turbine::setWindowTitle(*ctx, ctx->appName);
|
|
turbine::setUpdateHandler(*ctx, updateHandler);
|
|
turbine::setKeyEventHandler(*ctx, keyEventHandler);
|
|
turbine::setConstantRefresh(*ctx, false);
|
|
studio::StudioContext studioCtx;
|
|
turbine::setApplicationData(*ctx, &studioCtx);
|
|
StudioUI ui(ctx.get(), std::move(projectDataDir));
|
|
studioCtx.ui = &ui;
|
|
StudioUIDrawer drawer(&ui);
|
|
turbine::gl::addDrawer(*ctx, &drawer);
|
|
const auto err = turbine::run(*ctx);
|
|
turbine::gl::removeDrawer(*ctx, &drawer);
|
|
return err;
|
|
}
|
|
|
|
int main(
|
|
const char *appName,
|
|
ox::String projectDataDir,
|
|
int,
|
|
const char **) {
|
|
#ifdef DEBUG
|
|
ox::LoggerConn loggerConn;
|
|
const auto loggerErr = loggerConn.initConn(appName);
|
|
if (loggerErr) {
|
|
oxErrf("Could not connect to logger: {}\n", toStr(loggerErr));
|
|
} else {
|
|
ox::trace::setLogger(&loggerConn);
|
|
}
|
|
#endif
|
|
ox::trace::init();
|
|
// run app
|
|
const auto time = std::time(nullptr);
|
|
ox::UUID::seedGenerator({
|
|
static_cast<uint64_t>(time),
|
|
static_cast<uint64_t>(time << 1)
|
|
});
|
|
const auto err = runApp(appName, std::move(projectDataDir), ox::UniquePtr<ox::FileSystem>(nullptr));
|
|
oxAssert(err, "Something went wrong...");
|
|
return static_cast<int>(err);
|
|
}
|
|
|
|
}
|
|
|