Files
Archimedes/window/glfwWindow.cpp
2024-08-10 21:20:28 -05:00

87 lines
2.4 KiB
C++

#include "glfwWindow.h"
WindowGLFW::WindowGLFW() {
}
WindowGLFW::~WindowGLFW() {
glfwTerminate();
}
void WindowGLFW::init( std::string title, int x, int y) : title(title), x(x), y(y) {
if(!glfwInit()) {
std::cout << "glfwInit failed!\n";
error = true;
return;
}
window = glfwCreateWindow(x, y, title.c_str(), NULL, NULL);
if(!window) {
glfwTerminate();
std::cout << "glfwCreateWindow failed!";
error = true;
return;
}
glfwMakeContextCurrent(window);
}
void WindowGLFW::shutdown() {
~WindowGLFW();
}
void WindowGLFW::getSize() {
SDL_GetWindowSize(window, &x, &y);
}
const Event* WindowGLFW::createEvent() {
switch(event.type) {
case SDL_KEYDOWN:
return new KeyEvent(event.key.keysym.sym, event.key.keysym.scancode,
event.key.keysym.mod, event.key.repeat, true);
case SDL_KEYUP:
return new KeyEvent(event.key.keysym.sym, event.key.keysym.scancode,
event.key.keysym.mod, event.key.repeat, false);
case SDL_TEXTINPUT:
return new KeyTypedEvent(event.text.windowID, event.text.text);
case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP:
switch(event.button.button) {
case SDL_BUTTON_LEFT: return new MouseButtonEvent(0, (event.type == SDL_MOUSEBUTTONDOWN));
case SDL_BUTTON_RIGHT: return new MouseButtonEvent(1, (event.type == SDL_MOUSEBUTTONDOWN));
case SDL_BUTTON_MIDDLE: return new MouseButtonEvent(2, (event.type == SDL_MOUSEBUTTONDOWN));
case SDL_BUTTON_X1: return new MouseButtonEvent(3, (event.type == SDL_MOUSEBUTTONDOWN));
case SDL_BUTTON_X2: return new MouseButtonEvent(4, (event.type == SDL_MOUSEBUTTONDOWN));
}
case SDL_MOUSEMOTION:
return new MouseMovedEvent(event.motion.x, event.motion.y, event.motion.xrel, event.motion.yrel);
case SDL_MOUSEWHEEL:
return new MouseScrolledEvent(event.wheel.x, event.wheel.y);
case SDL_WINDOWEVENT:
return new WindowEvent(event.window.windowID, event.window.event);
}
return nullptr;
}
const Event* WindowGLFW::pollEvents() {
while (SDL_PollEvent(&event)) {
return createEvent();
}
return nullptr;
}