diff --git a/main.c b/main.c index 26bc415c52df537c6dfd3cc24644abd7fbc51339..c9092e0cef7913b255053c7ba4bc200433717852 100644 --- a/main.c +++ b/main.c @@ -221,7 +221,16 @@ glClearColor(0.4, 0.4, 1.0, 0.0); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); - glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); + + int w = game.width; + int h = game.height; + if (h == 0) h = 1; + float aspect = (float)w / (float)h; + if (w >= h) { + glOrtho(0.5 - 0.5 * aspect, 0.5 + 0.5 * aspect, 0.0, 1.0, -1.0, 1.0); + } else { + glOrtho(0.0, 1.0, 0.5 - 0.5 / aspect, 0.5 + 0.5 / aspect, -1.0, 1.0); + } } void handle_mouse_event(int button, int state, int x, int y) { @@ -264,10 +273,18 @@ } } void handle_reshape(int w, int h) { + if (h == 0) h = 1; glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); - glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); + + float aspect = (float)w / (float)h; + if (w >= h) { + glOrtho(0.5 - 0.5 * aspect, 0.5 + 0.5 * aspect, 0.0, 1.0, -1.0, 1.0); + } else { + glOrtho(0.0, 1.0, 0.5 - 0.5 / aspect, 0.5 + 0.5 / aspect, -1.0, 1.0); + } + glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }