diff options
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/console.cc | 46 | ||||
-rw-r--r-- | src/client/console.h | 2 | ||||
-rw-r--r-- | src/client/video.cc | 10 |
3 files changed, 40 insertions, 18 deletions
diff --git a/src/client/console.cc b/src/client/console.cc index 42ef78a..83d69de 100644 --- a/src/client/console.cc +++ b/src/client/console.cc @@ -50,6 +50,9 @@ std::deque<std::string> text; // console visibility bool console_visible; +size_t console_scroll = 0; +size_t input_pos = 0; + //--- engine functions -------------------------------------------- extern "C" void func_con_toggle(std::stringstream &args) @@ -108,23 +111,29 @@ void draw() gl::end(); // draw the console text + if (console_scroll > text.size()) + console_scroll = text.size(); + gl::enable(GL_TEXTURE_2D); std::deque<std::string>::reverse_iterator rit = text.rbegin(); - float y = video::height*con_height-2*CHARHEIGHT-8; + float bottom = video::height*con_height-2*CHARHEIGHT-8; + float y = bottom+console_scroll*CHARHEIGHT; while (y > 0 && rit < text.rend()) { - std::string line(*rit); + if (y <= bottom) { + std::string line(*rit); - if (line[0] == '?') - gl::color(0.7f,0.7f,0.7f, 1.0f); - else if (line[0] == '*') - gl::color(1.0f,1.0f,0.0f, 1.0f); - else if (line[0] == '!') - gl::color(1.0f,0.0f,0.0f, 1.0f); - else - gl::color(1.0f,1.0f,1.0f, 1.0f); - line.erase(0,2); - - draw_text(CHARWIDTH, y, line); + if (line[0] == '?') + gl::color(0.7f,0.7f,0.7f, 1.0f); + else if (line[0] == '*') + gl::color(1.0f,1.0f,0.0f, 1.0f); + else if (line[0] == '!') + gl::color(1.0f,0.0f,0.0f, 1.0f); + else + gl::color(1.0f,1.0f,1.0f, 1.0f); + line.erase(0,2); + + draw_text(CHARWIDTH, y, line); + } y -= CHARHEIGHT; ++rit; } @@ -159,6 +168,9 @@ void toggle() { console_visible = !console_visible; setkeyboardmode(console_visible); + console_scroll = 0; + input.clear(); + input_pos = 0; } void keypressed(const SDL_keysym &keysym) @@ -175,6 +187,14 @@ void keypressed(const SDL_keysym &keysym) input.erase(input.size()-1, 1); } break; + case SDLK_PAGEUP: + console_scroll +=5; + if (console_scroll > text.size()) console_scroll = text.size(); + break; + case SDLK_PAGEDOWN: + if (console_scroll > 5) console_scroll -=5; + else console_scroll = 0; + break; default: break; } diff --git a/src/client/console.h b/src/client/console.h index 3ea064e..e558438 100644 --- a/src/client/console.h +++ b/src/client/console.h @@ -14,7 +14,7 @@ #include <sstream> #include <deque> -#define MAXCONLINES 2048 +const size_t MAXCONLINES=2048; namespace client { diff --git a/src/client/video.cc b/src/client/video.cc index f7ae792..19555ec 100644 --- a/src/client/video.cc +++ b/src/client/video.cc @@ -84,7 +84,8 @@ bool init() SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 2); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); - flags = SDL_OPENGL | SDL_FULLSCREEN; + if (r_fullscreen->value()) flags = SDL_OPENGL | SDL_FULLSCREEN; + else flags = SDL_OPENGL; if(!SDL_SetVideoMode(width, height, bpp, flags )) { con_warn << "Failed to set video mode " << width << "x" << height << "x" << bpp << "bpp" << std::endl; @@ -101,14 +102,15 @@ bool init() con_print << " video mode " << width << "x" << height << "x" << bpp << "bpp" << std::endl; aspect = (float) width / (float) height; - + (*r_width) = width; + (*r_height) = height; render::init(); + video::reset(); + view::init(); - video::reset(); - return true; } |