SDL support, continue

This commit is contained in:
Vadim Lopatin 2014-04-29 11:44:48 +04:00
parent 5375d03ebe
commit 5332854a4f
1 changed files with 93 additions and 19 deletions

View File

@ -68,7 +68,9 @@ version(USE_SDL) {
} }
@property uint windowId() { @property uint windowId() {
return 1; // TODO; if (_win)
return SDL_GetWindowID(_win);
return 0;
} }
void draw(ColorDrawBuf buf) { void draw(ColorDrawBuf buf) {
@ -198,46 +200,118 @@ version(USE_SDL) {
return true; return true;
} }
SDLWindow getWindow(uint w) {
if (w in _windowMap) SDLWindow getWindow(uint id) {
return _windowMap[w]; if (id in _windowMap)
return _windowMap[id];
return null; return null;
} }
override Window createWindow(string windowCaption, Window parent) { override Window createWindow(string windowCaption, Window parent) {
SDLWindow res = new SDLWindow(windowCaption, parent); SDLWindow res = new SDLWindow(windowCaption, parent);
_windowMap[res.windowId] = res; _windowMap[res.windowId] = res;
return res; return res;
} }
void redrawWindows() { //void redrawWindows() {
foreach(w; _windowMap) // foreach(w; _windowMap)
w.redraw(); // w.redraw();
} //}
override int enterMessageLoop() { override int enterMessageLoop() {
Log.i("entering message loop"); Log.i("entering message loop");
SDL_Event event; SDL_Event event;
bool quit = false; bool quit = false;
while(true) { while(true) {
redrawWindows(); //redrawWindows();
//if (SDL_PollEvent(&event)) { //if (SDL_PollEvent(&event)) {
if (SDL_WaitEvent(&event)) { if (SDL_WaitEvent(&event)) {
//Log.d("Event.type = ", event.type); //Log.d("Event.type = ", event.type);
if (event.type == SDL_QUIT) { if (event.type == SDL_QUIT) {
Log.i("event.type == SDL_QUIT"); Log.i("event.type == SDL_QUIT");
break; break;
} else if (event.type == SDL_WINDOWEVENT) { }
switch (event.window.event) {
case SDL_WINDOWEVENT_RESIZED: switch (event.type) {
Log.d("SDL_WINDOWEVENT_RESIZED win=", event.window.windowID, " pos=", event.window.data1, case SDL_WINDOWEVENT:
",", event.window.data2); {
break; // WINDOW EVENTS
case SDL_WINDOWEVENT_CLOSE: uint windowID = event.window.windowID;
Log.d("SDL_WINDOWEVENT_CLOSE win=", event.window.windowID); SDLWindow w = getWindow(windowID);
break; if (!w) {
default: Log.w("SDL_WINDOWEVENT ", event.window.event, " received with unknown id ", windowID);
break; break;
}
// found window
switch (event.window.event) {
case SDL_WINDOWEVENT_RESIZED:
Log.d("SDL_WINDOWEVENT_RESIZED win=", event.window.windowID, " pos=", event.window.data1,
",", event.window.data2);
break;
case SDL_WINDOWEVENT_CLOSE:
Log.d("SDL_WINDOWEVENT_CLOSE win=", event.window.windowID);
break;
case SDL_WINDOWEVENT_SHOWN:
Log.d("SDL_WINDOWEVENT_SHOWN");
break;
case SDL_WINDOWEVENT_HIDDEN:
Log.d("SDL_WINDOWEVENT_HIDDEN");
break;
case SDL_WINDOWEVENT_EXPOSED:
Log.d("SDL_WINDOWEVENT_EXPOSED");
w.redraw();
break;
case SDL_WINDOWEVENT_MOVED:
Log.d("SDL_WINDOWEVENT_MOVED");
break;
case SDL_WINDOWEVENT_MINIMIZED:
Log.d("SDL_WINDOWEVENT_MINIMIZED");
break;
case SDL_WINDOWEVENT_MAXIMIZED:
Log.d("SDL_WINDOWEVENT_MAXIMIZED");
break;
case SDL_WINDOWEVENT_RESTORED:
Log.d("SDL_WINDOWEVENT_MAXIMIZED");
break;
case SDL_WINDOWEVENT_ENTER:
Log.d("SDL_WINDOWEVENT_MAXIMIZED");
break;
case SDL_WINDOWEVENT_LEAVE:
Log.d("SDL_WINDOWEVENT_MAXIMIZED");
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
Log.d("SDL_WINDOWEVENT_MAXIMIZED");
break;
case SDL_WINDOWEVENT_FOCUS_LOST:
Log.d("SDL_WINDOWEVENT_MAXIMIZED");
break;
default:
break;
}
} }
break;
case SDL_KEYDOWN:
break;
case SDL_KEYUP:
break;
case SDL_TEXTEDITING:
break;
case SDL_TEXTINPUT:
break;
case SDL_MOUSEMOTION:
break;
case SDL_MOUSEBUTTONDOWN:
break;
case SDL_MOUSEBUTTONUP:
break;
case SDL_MOUSEWHEEL:
break;
default:
// not supported event
break;
} }
} }
} }