From 1a28393dabf4f4696bf433ddde52e7a25253c955 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Thu, 16 Oct 2008 16:34:15 +0000 Subject: various user interface related updates --- src/client/video.cc | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) (limited to 'src/client/video.cc') diff --git a/src/client/video.cc b/src/client/video.cc index 7338d70..d8ba316 100644 --- a/src/client/video.cc +++ b/src/client/video.cc @@ -28,6 +28,9 @@ namespace video { float fullscreen = 0; +int bpp = 0; +int flags = 0; + int width = 0; int height = 0; @@ -57,9 +60,6 @@ bool init() r_fullscreen = core::Cvar::get("r_fullscreen", "0", core::Cvar::Archive); r_fullscreen->set_info("[bool] enable or disable fullscreen video"); - int bpp = 0; - int flags = 0; - if( SDL_InitSubSystem(SDL_INIT_VIDEO) < 0 ) { con_error << "SDL_InitSubSystem() failed: " << SDL_GetError() << std::endl; return false; @@ -103,7 +103,7 @@ bool init() if (r_fullscreen->value()) { flags = SDL_OPENGL | SDL_FULLSCREEN; } else { - flags = SDL_OPENGL; + flags = SDL_OPENGL | SDL_RESIZABLE; } if(!SDL_SetVideoMode(width, height, bpp, flags )) { @@ -147,17 +147,42 @@ bool init() // resize user interface ui::root()->set_size((float) width, (float) height); ui::root()->event_resize(); + + // to grab or not to grab + if (client()->console()->visible()) { + SDL_WM_GrabInput(SDL_GRAB_OFF); + SDL_ShowCursor(SDL_ENABLE); + } else { + SDL_WM_GrabInput(SDL_GRAB_ON); + SDL_ShowCursor(SDL_DISABLE); + } // initialize renderer - render::Camera::resize(width, height); render::init(); - render::Camera::resize(width, height); // yes twice, bug + render::resize(width, height); view::init(); return true; } +void resize(float w, float h) +{ + if (fullscreen) + return; + + if (h < 64) h = 64; + if (w < 64) w = 64; + + if (SDL_SetVideoMode(w, h, bpp, flags )) { + render::resize(w, h); + ui::root()->set_size(w, h); + ui::root()->event_resize(); + } else { + con_warn << "Could not resize window!" << std::endl; + } +} + void restart() { shutdown(); @@ -168,14 +193,14 @@ void restart() input::reset(); } -void frame(float seconds) +void frame(float elapsed) { // detect fullscreen/windowed mode switch if (fullscreen != r_fullscreen->value()) restart(); // render a client frame - view::frame(seconds); + view::frame(elapsed); SDL_GL_SwapBuffers(); } -- cgit v1.2.3