[nostalgia/core/glfw] Fix keyboard support for ImGui
This commit is contained in:
parent
87c03c0d98
commit
0d76129a0e
@ -15,24 +15,6 @@ namespace nostalgia::core {
|
||||
|
||||
void draw(Context *ctx) noexcept;
|
||||
|
||||
static void handleKeyPress(Context *ctx, int key) {
|
||||
switch (key) {
|
||||
case GLFW_KEY_ESCAPE:
|
||||
case GLFW_KEY_Q:
|
||||
shutdown(ctx);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void handleGlfwKeyEvent(GLFWwindow *window, int key, int, int action, int) {
|
||||
const auto ctx = static_cast<Context*>(glfwGetWindowUserPointer(window));
|
||||
if (action == GLFW_PRESS) {
|
||||
handleKeyPress(ctx, key);
|
||||
}
|
||||
}
|
||||
|
||||
ox::Result<ox::UniquePtr<Context>> init(ox::UniquePtr<ox::FileSystem> fs, const char *appName) noexcept {
|
||||
auto ctx = ox::make_unique<Context>();
|
||||
ctx->rom = std::move(fs);
|
||||
@ -43,7 +25,6 @@ ox::Result<ox::UniquePtr<Context>> init(ox::UniquePtr<ox::FileSystem> fs, const
|
||||
id->startTime = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
|
||||
glfwInit();
|
||||
oxReturnError(initGfx(ctx.get()));
|
||||
glfwSetKeyCallback(id->window, handleGlfwKeyEvent);
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ namespace nostalgia::core {
|
||||
|
||||
constexpr auto Scale = 5;
|
||||
|
||||
static void handleGlfwError(int err, const char *desc) {
|
||||
static void handleGlfwError(int err, const char *desc) noexcept {
|
||||
oxErrf("GLFW error ({}): {}\n", err, desc);
|
||||
}
|
||||
|
||||
@ -23,6 +23,24 @@ void ImGui_Impl_NewFrame() noexcept {
|
||||
ImGui_ImplGlfw_NewFrame();
|
||||
}
|
||||
|
||||
static void handleKeyPress(Context *ctx, int key) noexcept {
|
||||
switch (key) {
|
||||
case GLFW_KEY_ESCAPE:
|
||||
case GLFW_KEY_Q:
|
||||
shutdown(ctx);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void handleGlfwKeyEvent(GLFWwindow *window, int key, int, int action, int) noexcept {
|
||||
const auto ctx = static_cast<Context *>(glfwGetWindowUserPointer(window));
|
||||
if (action == GLFW_PRESS) {
|
||||
handleKeyPress(ctx, key);
|
||||
}
|
||||
}
|
||||
|
||||
ox::Error initGfx(Context *ctx) noexcept {
|
||||
auto id = ctx->windowerData<GlfwImplData>();
|
||||
glfwSetErrorCallback(handleGlfwError);
|
||||
@ -37,6 +55,7 @@ ox::Error initGfx(Context *ctx) noexcept {
|
||||
if (id->window == nullptr) {
|
||||
return OxError(1, "Could not open GLFW window");
|
||||
}
|
||||
glfwSetKeyCallback(id->window, handleGlfwKeyEvent);
|
||||
glfwSetWindowUserPointer(id->window, ctx);
|
||||
glfwMakeContextCurrent(id->window);
|
||||
if constexpr(config::ImGuiEnabled) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user