X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=vrfileman;a=blobdiff_plain;f=src%2Fmain.cc;h=d236a3bbad46d5594c94c33e15777aa841d3fc15;hp=69b7efa5f644de700ac1dd5f9cd70d5c74f0dca3;hb=ce3b278026764fbc085973674be0a899ab5a27bc;hpb=20f18dc9afa4e7a9efb6253edce231f664d14215 diff --git a/src/main.cc b/src/main.cc index 69b7efa..d236a3b 100644 --- a/src/main.cc +++ b/src/main.cc @@ -8,8 +8,11 @@ static void process_event(SDL_Event *ev); static SDL_Window *win; static SDL_GLContext ctx; static bool redraw_pending = true; +static bool fullscreen, mouse_grabbed; static bool quit; +static int scale_factor = 1; + static SDL_Window *create_window(int width, int height) { SDL_Window *win; @@ -36,7 +39,7 @@ int main(int argc, char **argv) if(!(win = create_window(def_opt.width, def_opt.height))) { // try again without the SRGB capability SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 0); - if(!(win = create_window(win_width, win_height))) { + if(!(win = create_window(def_opt.width, def_opt.height))) { fprintf(stderr, "failed to create window\n"); return 1; } @@ -94,6 +97,36 @@ void app_resize(int x, int y) void app_fullscreen(bool fs) { SDL_SetWindowFullscreen(win, fs ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); + fullscreen = fs; +} + +void app_toggle_fullscreen() +{ + app_fullscreen(!fullscreen); +} + +bool app_is_fullscreen() +{ + return fullscreen; +} + +void app_grab_mouse(bool grab) +{ + /*SDL_SetWindowGrab(win, grab ? SDL_TRUE : SDL_FALSE); + SDL_ShowCursor(grab ? 1 : 0); + */ + SDL_SetRelativeMouseMode(grab ? SDL_TRUE : SDL_FALSE); + mouse_grabbed = grab; +} + +void app_toggle_grab_mouse() +{ + app_grab_mouse(!mouse_grabbed); +} + +bool app_is_mouse_grabbed() +{ + return mouse_grabbed; } void app_quit() @@ -131,18 +164,22 @@ static void process_event(SDL_Event *ev) case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: app_mouse_button(ev->button.button - SDL_BUTTON_LEFT, ev->button.state == SDL_PRESSED, - ev->button.x, ev->button.y); + ev->button.x * scale_factor, ev->button.y * scale_factor); break; case SDL_MOUSEMOTION: - app_mouse_motion(ev->motion.x, ev->motion.y); + if(mouse_grabbed) { + app_mouse_delta(ev->motion.xrel, ev->motion.yrel); + } else { + app_mouse_motion(ev->motion.x * scale_factor, ev->motion.y * scale_factor); + } break; case SDL_WINDOWEVENT: if(ev->window.event == SDL_WINDOWEVENT_RESIZED) { - win_width = ev->window.data1; - win_height = ev->window.data2; + SDL_GL_GetDrawableSize(win, &win_width, &win_height); win_aspect = (float)win_width / (float)win_height; + scale_factor = win_width / ev->window.data1; app_reshape(win_width, win_height); } break;