[nostalgia/core/glfw] Fix keyboard support for ImGui
This commit is contained in:
		| @@ -15,24 +15,6 @@ namespace nostalgia::core { | |||||||
|  |  | ||||||
| void draw(Context *ctx) noexcept; | 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 { | ox::Result<ox::UniquePtr<Context>> init(ox::UniquePtr<ox::FileSystem> fs, const char *appName) noexcept { | ||||||
| 	auto ctx = ox::make_unique<Context>(); | 	auto ctx = ox::make_unique<Context>(); | ||||||
| 	ctx->rom = std::move(fs); | 	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(); | 	id->startTime = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count(); | ||||||
| 	glfwInit(); | 	glfwInit(); | ||||||
| 	oxReturnError(initGfx(ctx.get())); | 	oxReturnError(initGfx(ctx.get())); | ||||||
| 	glfwSetKeyCallback(id->window, handleGlfwKeyEvent); |  | ||||||
| 	return ctx; | 	return ctx; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ namespace nostalgia::core { | |||||||
|  |  | ||||||
| constexpr auto Scale = 5; | 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); |     oxErrf("GLFW error ({}): {}\n", err, desc); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -23,6 +23,24 @@ void ImGui_Impl_NewFrame() noexcept { | |||||||
| 	ImGui_ImplGlfw_NewFrame(); | 	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 { | ox::Error initGfx(Context *ctx) noexcept { | ||||||
| 	auto id = ctx->windowerData<GlfwImplData>(); | 	auto id = ctx->windowerData<GlfwImplData>(); | ||||||
| 	glfwSetErrorCallback(handleGlfwError); | 	glfwSetErrorCallback(handleGlfwError); | ||||||
| @@ -37,6 +55,7 @@ ox::Error initGfx(Context *ctx) noexcept { | |||||||
| 	if (id->window == nullptr) { | 	if (id->window == nullptr) { | ||||||
| 		return OxError(1, "Could not open GLFW window"); | 		return OxError(1, "Could not open GLFW window"); | ||||||
| 	} | 	} | ||||||
|  | 	glfwSetKeyCallback(id->window, handleGlfwKeyEvent); | ||||||
| 	glfwSetWindowUserPointer(id->window, ctx); | 	glfwSetWindowUserPointer(id->window, ctx); | ||||||
| 	glfwMakeContextCurrent(id->window); | 	glfwMakeContextCurrent(id->window); | ||||||
| 	if constexpr(config::ImGuiEnabled) { | 	if constexpr(config::ImGuiEnabled) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user