From 005d429599088b523e4f62326824c7fb51ba9c63 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 21 Apr 2011 06:09:30 +0300 Subject: Fix draw issue in SDL after vertex precalculation. --- src/graphics.h | 7 +++++++ src/gui/widgets/button.cpp | 4 ++++ src/gui/widgets/progressbar.cpp | 2 +- src/gui/widgets/scrollarea.cpp | 4 ++++ src/gui/widgets/tab.cpp | 3 ++- src/gui/widgets/window.cpp | 13 ++++++++++++- 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/graphics.h b/src/graphics.h index a331c21ba..423279fb0 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -255,6 +255,12 @@ class Graphics : public gcn::SDLGraphics gcn::ClipRectangle &getTopClip() { return mClipStack.top(); } + void setRedraw(bool n) + { mRedraw = n; } + + bool getRedraw() + { return mRedraw; } + protected: int SDL_FakeUpperBlit (SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect); @@ -265,6 +271,7 @@ class Graphics : public gcn::SDLGraphics bool mFullscreen; bool mHWAccel; BlitMode mBlitMode; + bool mRedraw; }; extern Graphics *graphics; diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp index 91d297846..c0f174b2c 100644 --- a/src/gui/widgets/button.cpp +++ b/src/gui/widgets/button.cpp @@ -210,6 +210,10 @@ void Button::draw(gcn::Graphics *graphics) recalc = true; mMode = mode; } + else if (static_cast(graphics)->getRedraw()) + { + recalc = true; + } } if (recalc) diff --git a/src/gui/widgets/progressbar.cpp b/src/gui/widgets/progressbar.cpp index 0916d9976..bbde65207 100644 --- a/src/gui/widgets/progressbar.cpp +++ b/src/gui/widgets/progressbar.cpp @@ -204,7 +204,7 @@ void ProgressBar::render(Graphics *graphics, const gcn::Rectangle &area, gcn::Font *oldFont = graphics->getFont(); gcn::Color oldColor = graphics->getColor(); - if (*redraw) + if (*redraw || graphics->getRedraw()) { *redraw = false; static_cast(graphics)->calcWindow(vert, diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp index 0be492ee6..59e323e94 100644 --- a/src/gui/widgets/scrollarea.cpp +++ b/src/gui/widgets/scrollarea.cpp @@ -350,6 +350,10 @@ void ScrollArea::drawFrame(gcn::Graphics *graphics) mDrawWidth = rect.width; mDrawHeight = rect.height; } + else if (static_cast(graphics)->getRedraw()) + { + recalc = true; + } } if (recalc) diff --git a/src/gui/widgets/tab.cpp b/src/gui/widgets/tab.cpp index 73ffff30e..5e4a147c0 100644 --- a/src/gui/widgets/tab.cpp +++ b/src/gui/widgets/tab.cpp @@ -190,7 +190,8 @@ void Tab::draw(gcn::Graphics *graphics) updateAlpha(); // draw tab - if (mRedraw || mode != mMode) + if (mRedraw || mode != mMode + || static_cast(graphics)->getRedraw()) { mMode = mode; mRedraw = false; diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp index 72530db8f..df8599b95 100644 --- a/src/gui/widgets/window.cpp +++ b/src/gui/widgets/window.cpp @@ -131,10 +131,12 @@ void Window::draw(gcn::Graphics *graphics) return; Graphics *g = static_cast(graphics); + bool update = false; if (mRedraw) { mRedraw = false; + update = true; g->calcWindow(mVertexes, 0, 0, getWidth(), getHeight(), mSkin->getBorder()); } @@ -176,7 +178,16 @@ void Window::draw(gcn::Graphics *graphics) } } - drawChildren(graphics); + if (update) + { + g->setRedraw(update); + drawChildren(graphics); + g->setRedraw(false); + } + else + { + drawChildren(graphics); + } } void Window::setContentSize(int width, int height) -- cgit v1.2.3-70-g09d2