aboutsummaryrefslogtreecommitdiff
path: root/View.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'View.cpp')
-rw-r--r--View.cpp46
1 files changed, 23 insertions, 23 deletions
diff --git a/View.cpp b/View.cpp
index c53ad8f..998356f 100644
--- a/View.cpp
+++ b/View.cpp
@@ -31,8 +31,14 @@ void View::work() {
continue;
}
if (e.type == SDL_EVENT_KEY_DOWN) {
- this->ev_keydown(e.key);
- continue;
+ if (e.key.repeat) continue;
+ this->controller.ev_keydown(static_cast<KeyboardCode>(e.key.scancode));
+ }
+ if (e.type == SDL_EVENT_MOUSE_BUTTON_DOWN) {
+ this->controller.ev_mousedown(static_cast<MouseCode>(e.button.button));
+ }
+ if (e.type == SDL_EVENT_MOUSE_MOTION) {
+ this->controller.ev_mousemove(e.motion.x, e.motion.y);
}
}
@@ -44,11 +50,6 @@ void View::work() {
this->window_deinit();
}
-void View::ev_keydown(SDL_KeyboardEvent ev) {
- if (ev.repeat) return;
- this->controller.keypress(static_cast<Scancode>(ev.scancode));
-}
-
void View::window_init() {
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS);
this->window = SDL_CreateWindow(
@@ -102,22 +103,21 @@ void View::draw_rect(Rectangle r, Color c) {
}
typedef struct {
- bool open;
- vector<string> out;
-} dialog_file_tmp_data;
-vector<string> View::dialog_file() {
- dialog_file_tmp_data data = {
- .open = true,
- .out = {},
- };
- SDL_DialogFileCallback callback = [](void * userdata, const char * const * files, int) -> void {
- dialog_file_tmp_data * data = static_cast<dialog_file_tmp_data*>(userdata);
+ void (* callback)(std::vector<std::string> files, void* data);
+ void * data;
+} tmp_data;
+void View::dialog_file(void(*callback)(std::vector<std::string> files, void* data), void* data) {
+ tmp_data * temp = new tmp_data({
+ .callback = callback,
+ .data = data,
+ });
+ SDL_ShowOpenFileDialog([](void * userdata, const char * const * files, int) -> void {
+ tmp_data * temp = static_cast<tmp_data*>(userdata);
+ vector<string> out = {};
for (; *files != NULL; files++)
- data->out.push_back(std::string(*files));
- data->open = false;
- };
- SDL_ShowOpenFileDialog(callback, &data, this->window, NULL, 0, NULL, true);
- while (data.open);
- return data.out;
+ out.push_back(string(*files));
+ (*temp->callback)(out, temp->data);
+ delete temp;
+ }, temp, this->window, NULL, 0, NULL, true);
}