Squashed 'deps/nostalgia/' changes from 430cae16..5e90f8d4
5e90f8d4 [studio] Move task runner to draw call fd4619bc [studio,turbine] Fix Turbine sleep logic, tweak Studio default sleep values 128ddb2c [turbine/gba] Fix ticksMs function signature f34704d8 [nostalgia/core/studio] Fix AddSubsheetCommand::undo to undo ID idx change fb5d3545 [nostalgia/core/studio] Cleanup 2180f7bf [nostalgia/core] Fix validateSubSheetIdx dcad4440 [keel] Make GBA AssetRef changeable git-subtree-dir: deps/nostalgia git-subtree-split: 5e90f8d45434fa36b6e113357cf05a6cf53bfae5
This commit is contained in:
@@ -302,7 +302,7 @@ class AssetManager {
|
||||
template<typename T>
|
||||
class AssetRef {
|
||||
private:
|
||||
T const*const m_obj = nullptr;
|
||||
T const* m_obj = nullptr;
|
||||
|
||||
public:
|
||||
constexpr AssetRef() noexcept = default;
|
||||
|
@@ -28,12 +28,6 @@ class StudioUIDrawer: public turbine::gl::Drawer {
|
||||
}
|
||||
};
|
||||
|
||||
static int updateHandler(turbine::Context &ctx) noexcept {
|
||||
auto sctx = turbine::applicationData<studio::StudioContext>(ctx);
|
||||
sctx->ui.update();
|
||||
return 16;
|
||||
}
|
||||
|
||||
static void keyEventHandler(turbine::Context &ctx, turbine::Key key, bool down) noexcept {
|
||||
auto sctx = turbine::applicationData<studio::StudioContext>(ctx);
|
||||
sctx->ui.handleKeyEvent(key, down);
|
||||
@@ -45,9 +39,8 @@ static ox::Error runApp(
|
||||
ox::UPtr<ox::FileSystem> &&fs) noexcept {
|
||||
oxRequireM(ctx, turbine::init(std::move(fs), appName));
|
||||
turbine::setWindowTitle(*ctx, keelCtx(*ctx).appName);
|
||||
turbine::setUpdateHandler(*ctx, updateHandler);
|
||||
turbine::setKeyEventHandler(*ctx, keyEventHandler);
|
||||
turbine::setConstantRefresh(*ctx, false);
|
||||
turbine::setRefreshWithin(*ctx, 0);
|
||||
StudioUI ui(*ctx, projectDataDir);
|
||||
StudioUIDrawer drawer(ui);
|
||||
turbine::gl::addDrawer(*ctx, &drawer);
|
||||
@@ -68,7 +61,7 @@ static ox::Error run(
|
||||
static_cast<uint64_t>(time << 1)
|
||||
});
|
||||
// run app
|
||||
auto const err = runApp(appName, projectDataDir, ox::UPtr<ox::FileSystem>(nullptr));
|
||||
auto const err = runApp(appName, projectDataDir, ox::UPtr<ox::FileSystem>{});
|
||||
oxAssert(err, "Something went wrong...");
|
||||
return err;
|
||||
}
|
||||
|
@@ -78,10 +78,6 @@ StudioUI::StudioUI(turbine::Context &ctx, ox::StringView projectDataDir) noexcep
|
||||
}
|
||||
}
|
||||
|
||||
void StudioUI::update() noexcept {
|
||||
m_taskRunner.update(m_ctx);
|
||||
}
|
||||
|
||||
void StudioUI::handleKeyEvent(turbine::Key key, bool down) noexcept {
|
||||
for (auto p : m_popups) {
|
||||
if (p->isOpen()) {
|
||||
@@ -124,6 +120,7 @@ void StudioUI::draw() noexcept {
|
||||
}
|
||||
ImGui::End();
|
||||
handleKeyInput();
|
||||
m_taskRunner.update(m_ctx);
|
||||
}
|
||||
|
||||
void StudioUI::drawMenu() noexcept {
|
||||
@@ -212,7 +209,6 @@ void StudioUI::drawTabs() noexcept {
|
||||
}
|
||||
if (m_activeEditorOnLastDraw != e.get()) [[unlikely]] {
|
||||
m_activeEditor->onActivated();
|
||||
turbine::setConstantRefresh(m_ctx, m_activeEditor->requiresConstantRefresh());
|
||||
}
|
||||
e->draw(m_sctx);
|
||||
m_activeEditorOnLastDraw = e.get();
|
||||
|
@@ -50,8 +50,6 @@ class StudioUI: public ox::SignalHandler {
|
||||
public:
|
||||
explicit StudioUI(turbine::Context &ctx, ox::StringView projectDataDir) noexcept;
|
||||
|
||||
void update() noexcept;
|
||||
|
||||
void handleKeyEvent(turbine::Key, bool down) noexcept;
|
||||
|
||||
[[nodiscard]]
|
||||
|
@@ -43,6 +43,12 @@ ox::Bounds getWindowBounds(Context &ctx) noexcept;
|
||||
|
||||
ox::Error setWindowBounds(Context &ctx, ox::Bounds const&bnds) noexcept;
|
||||
|
||||
void setConstantRefresh(Context &ctx, bool r) noexcept;
|
||||
/**
|
||||
* Tells Turbine to refresh the screen within the specified period of time.
|
||||
* If the requested value is greater than the current value, the call has no effect.
|
||||
* @param ctx - Context
|
||||
* @param ms - milliseconds
|
||||
*/
|
||||
void setRefreshWithin(Context &ctx, int ms) noexcept;
|
||||
|
||||
}
|
||||
|
@@ -71,7 +71,7 @@ ox::Result<ContextUPtr> init(
|
||||
void shutdown(Context&) noexcept {
|
||||
}
|
||||
|
||||
uint64_t ticksMs(Context&) noexcept {
|
||||
uint64_t ticksMs(Context const&) noexcept {
|
||||
return g_timerMs;
|
||||
}
|
||||
|
||||
|
@@ -22,8 +22,7 @@ class Context {
|
||||
int uninterruptedRefreshes = 3;
|
||||
ox::UPtr<BaseClipboardObject> clipboard;
|
||||
struct GLFWwindow *window = nullptr;
|
||||
// sets screen refresh to constant instead of only on event
|
||||
bool constantRefresh = true;
|
||||
int refreshWithinMs = 0;
|
||||
ox::Vector<gl::Drawer*, 5> drawers;
|
||||
int64_t startTime = 0;
|
||||
uint64_t wakeupTime = 0;
|
||||
|
@@ -260,8 +260,8 @@ ox::Error setWindowBounds(Context &ctx, ox::Bounds const&bnds) noexcept {
|
||||
return {};
|
||||
}
|
||||
|
||||
void setConstantRefresh(Context &ctx, bool r) noexcept {
|
||||
ctx.constantRefresh = r;
|
||||
void setRefreshWithin(Context &ctx, int ms) noexcept {
|
||||
ctx.refreshWithinMs = ox::min(ms, ctx.refreshWithinMs);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -69,6 +69,7 @@ static void tickFps(Context &ctx, uint64_t nowMs) noexcept {
|
||||
ox::Error run(Context &ctx) noexcept {
|
||||
int sleepTime = 0;
|
||||
while (!glfwWindowShouldClose(ctx.window)) {
|
||||
ctx.refreshWithinMs = 10 * 1000; // refresh within 10 seconds
|
||||
glfwPollEvents();
|
||||
auto const ticks = ticksMs(ctx);
|
||||
if (ctx.wakeupTime <= ticks) {
|
||||
@@ -79,15 +80,16 @@ ox::Error run(Context &ctx) noexcept {
|
||||
ctx.wakeupTime = ~uint64_t(0);
|
||||
}
|
||||
} else {
|
||||
sleepTime = 10;
|
||||
sleepTime = static_cast<int>(ctx.wakeupTime - ticks);
|
||||
}
|
||||
tickFps(ctx, ticks);
|
||||
draw(ctx);
|
||||
if (!ctx.constantRefresh) {
|
||||
auto const realSleepTime = ox::min(ctx.refreshWithinMs, sleepTime);
|
||||
if (realSleepTime) {
|
||||
if (ctx.uninterruptedRefreshes) {
|
||||
--ctx.uninterruptedRefreshes;
|
||||
} else {
|
||||
glfwWaitEventsTimeout(sleepTime);
|
||||
glfwWaitEventsTimeout(static_cast<double>(realSleepTime) / 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user