From 8ce36c6eedc60a103078dae6a84df2f42900be90 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Tue, 29 Apr 2014 15:03:51 +0400 Subject: [PATCH] SDL support: UI image is drawn ok --- src/dlangui/platforms/sdl/sdlapp.d | 52 ++++++++++++++++-------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/src/dlangui/platforms/sdl/sdlapp.d b/src/dlangui/platforms/sdl/sdlapp.d index e4b1b587..f15d4677 100644 --- a/src/dlangui/platforms/sdl/sdlapp.d +++ b/src/dlangui/platforms/sdl/sdlapp.d @@ -91,11 +91,6 @@ version(USE_SDL) { SDL_SetWindowTitle(_win, _caption.toStringz); } - void handleResize(int w, int h) { - _dx = w; - _dy = h; - } - SDL_Texture * _texture; int _txw; int _txh; @@ -114,44 +109,48 @@ version(USE_SDL) { _txh = _dy; } } + private void draw(ColorDrawBuf buf) { updateBufferSize(); SDL_Rect rect; - rect.x = 0; - rect.y = 0; - rect.w = _dx; - rect.h = _dy; - uint * pixels = buf.scanLine(0); + rect.w = buf.width; + rect.h = buf.height; SDL_UpdateTexture(_texture, &rect, - cast(const void*)pixels, - _dx * uint.sizeof); + cast(const void*)buf.scanLine(0), + buf.width * uint.sizeof); SDL_RenderCopy(_renderer, _texture, &rect, &rect); } void redraw() { - - // Select the color for drawing. It is set to red here. - SDL_SetRenderDrawColor(_renderer, 255, 0, 0, 255); - - // Clear the entire screen to our selected color. - SDL_RenderClear(_renderer); - + // check if size has been changed + int w, h; + SDL_GetWindowSize(_win, + &w, + &h); + onResize(w, h); + if (_enableOpengl) { version(USE_OPENGL) { } } else { + // Select the color for drawing. It is set to red here. + //SDL_SetRenderDrawColor(_renderer, 255, 0, 0, 255); + // Clear the entire screen to our selected color. + //SDL_RenderClear(_renderer); + if (!_drawbuf) _drawbuf = new ColorDrawBuf(_dx, _dy); _drawbuf.resize(_dx, _dy); _drawbuf.fill(_backgroundColor); onDraw(_drawbuf); draw(_drawbuf); + + // Up until now everything was drawn behind the scenes. + // This will show the new, red contents of the window. + SDL_RenderPresent(_renderer); } - // Up until now everything was drawn behind the scenes. - // This will show the new, red contents of the window. - SDL_RenderPresent(_renderer); } ColorDrawBuf _drawbuf; @@ -228,8 +227,8 @@ version(USE_SDL) { bool connect() { try { - DerelictGL3.load(); - _enableOpengl = true; + //DerelictGL3.load(); + _enableOpengl = false; } catch (Exception e) { Log.e("Cannot load opengl library", e); } @@ -285,7 +284,12 @@ version(USE_SDL) { 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_SIZE_CHANGED: + Log.d("SDL_WINDOWEVENT_SIZE_CHANGED win=", event.window.windowID, " pos=", event.window.data1, ",", event.window.data2); + w.onResize(event.window.data1, event.window.data2); break; case SDL_WINDOWEVENT_CLOSE: Log.d("SDL_WINDOWEVENT_CLOSE win=", event.window.windowID);