summaryrefslogtreecommitdiff
path: root/src/PowderToySDL.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-06-25 15:10:40 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-06-25 15:10:40 (GMT)
commitdacb774ae01102f756e92449ef395fb938a2acf0 (patch)
tree5072718aaa46cc5e3d6e454c38c953684cb3e076 /src/PowderToySDL.cpp
parentab8f382acc863d8d71ddb75b3161629cf5dd8d64 (diff)
downloadpowder-dacb774ae01102f756e92449ef395fb938a2acf0.zip
powder-dacb774ae01102f756e92449ef395fb938a2acf0.tar.gz
Resizable window when using OpenGL interface
Diffstat (limited to 'src/PowderToySDL.cpp')
-rw-r--r--src/PowderToySDL.cpp38
1 files changed, 31 insertions, 7 deletions
diff --git a/src/PowderToySDL.cpp b/src/PowderToySDL.cpp
index 079986a..afc385d 100644
--- a/src/PowderToySDL.cpp
+++ b/src/PowderToySDL.cpp
@@ -113,7 +113,7 @@ SDL_Surface * SDLOpen()
#ifndef OGLI
surface = SDL_SetVideoMode(XRES + BARSIZE, YRES + MENUSIZE, 32, SDL_SWSURFACE);
#else
- surface = SDL_SetVideoMode(XRES + BARSIZE, YRES + MENUSIZE, 32, SDL_OPENGL);
+ surface = SDL_SetVideoMode((XRES + BARSIZE), (YRES + MENUSIZE), 32, SDL_OPENGL | SDL_RESIZABLE);
#endif
#if defined(OGLI)
@@ -132,11 +132,14 @@ int main(int argc, char * argv[])
{
int elapsedTime = 0, currentTime = 0, lastTime = 0, currentFrame = 0;
unsigned int lastTick = 0;
- float fps = 0, delta = 1.0f;
+ float fps = 0, delta = 1.0f, inputScale = 1.0f;
+ float currentWidth = XRES+BARSIZE, currentHeight = YRES+MENUSIZE;
sdl_scrn = SDLOpen();
#ifdef OGLI
SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
+ //glScaled(2.0f, 2.0f, 1.0f);
+
#endif
ui::Engine::Ref().g = new Graphics();
@@ -168,26 +171,47 @@ int main(int argc, char * argv[])
engine->onKeyRelease(event.key.keysym.sym, event.key.keysym.unicode, event.key.keysym.mod&KEY_MOD_SHIFT, event.key.keysym.mod&KEY_MOD_CONTROL, event.key.keysym.mod&KEY_MOD_ALT);
break;
case SDL_MOUSEMOTION:
- engine->onMouseMove(event.motion.x, event.motion.y);
+ engine->onMouseMove(event.motion.x*inputScale, event.motion.y*inputScale);
break;
case SDL_MOUSEBUTTONDOWN:
if(event.button.button == SDL_BUTTON_WHEELUP)
{
- engine->onMouseWheel(event.motion.x, event.motion.y, 1);
+ engine->onMouseWheel(event.motion.x*inputScale, event.motion.y*inputScale, 1);
}
else if (event.button.button == SDL_BUTTON_WHEELDOWN)
{
- engine->onMouseWheel(event.motion.x, event.motion.y, -1);
+ engine->onMouseWheel(event.motion.x*inputScale, event.motion.y*inputScale, -1);
}
else
{
- engine->onMouseClick(event.motion.x, event.motion.y, event.button.button);
+ engine->onMouseClick(event.motion.x*inputScale, event.motion.y*inputScale, event.button.button);
}
break;
case SDL_MOUSEBUTTONUP:
if(event.button.button != SDL_BUTTON_WHEELUP && event.button.button != SDL_BUTTON_WHEELDOWN)
- engine->onMouseUnclick(event.motion.x, event.motion.y, event.button.button);
+ engine->onMouseUnclick(event.motion.x*inputScale, event.motion.y*inputScale, event.button.button);
break;
+#ifdef OGLI
+ case SDL_VIDEORESIZE:
+ float ratio = float(XRES+BARSIZE) / float(YRES+MENUSIZE);
+ float width = event.resize.w;
+ float height = width/ratio;
+
+ sdl_scrn = SDL_SetVideoMode(event.resize.w, height, 32, SDL_OPENGL | SDL_RESIZABLE);
+
+ glViewport(0, 0, width, height);
+ engine->g->Reset();
+ //glScaled(width/currentWidth, height/currentHeight, 1.0f);
+
+ currentWidth = width;
+ currentHeight = height;
+ inputScale = float(XRES+BARSIZE)/currentWidth;
+ if(sdl_scrn == NULL)
+ {
+ std::cerr << "Oh bugger" << std::endl;
+ }
+ break;
+#endif
}
event.type = 0; //Clear last event
}