From 2b681b167c1d307f550a8dc7b56a94d13886827e Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 25 May 2015 22:07:05 +0300 Subject: Add method safeDrawFrame for safe OpenGL renderer. --- src/gui/widgets/basiccontainer.cpp | 2 +- src/gui/widgets/dropdown.cpp | 11 +++++++++++ src/gui/widgets/dropdown.h | 2 ++ src/gui/widgets/playerbox.cpp | 17 +++++++++++++++++ src/gui/widgets/playerbox.h | 2 ++ src/gui/widgets/scrollarea.cpp | 38 +++++++++++++++++++++++--------------- src/gui/widgets/scrollarea.h | 2 ++ src/gui/widgets/textfield.cpp | 12 ++++++++++++ src/gui/widgets/textfield.h | 2 ++ src/gui/widgets/widget.h | 3 +++ 10 files changed, 75 insertions(+), 16 deletions(-) (limited to 'src/gui/widgets') diff --git a/src/gui/widgets/basiccontainer.cpp b/src/gui/widgets/basiccontainer.cpp index cd1dac0a2..96dfffef7 100644 --- a/src/gui/widgets/basiccontainer.cpp +++ b/src/gui/widgets/basiccontainer.cpp @@ -357,7 +357,7 @@ void BasicContainer::safeDrawChildren(Graphics* graphics) rec.height += frame2; graphics->pushClipArea(rec); BLOCK_START("BasicContainer::drawChildren 1") - widget->drawFrame(graphics); + widget->safeDrawFrame(graphics); BLOCK_END("BasicContainer::drawChildren 1") graphics->popClipArea(); } diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp index ddd409c3a..a16381c2a 100644 --- a/src/gui/widgets/dropdown.cpp +++ b/src/gui/widgets/dropdown.cpp @@ -305,6 +305,17 @@ void DropDown::drawFrame(Graphics *graphics) BLOCK_END("DropDown::drawFrame") } +void DropDown::safeDrawFrame(Graphics *graphics) +{ + BLOCK_START("DropDown::drawFrame") + const int bs2 = getFrameSize(); + const Rect &rect = mDimension; + graphics->drawImageRect(0, 0, + rect.width + bs2, rect.height + bs2, + skinRect); + BLOCK_END("DropDown::drawFrame") +} + void DropDown::drawButton(Graphics *graphics) { const int height = mDroppedDown ? mFoldedUpHeight : mDimension.height; diff --git a/src/gui/widgets/dropdown.h b/src/gui/widgets/dropdown.h index 5f12cca31..aea2752d0 100644 --- a/src/gui/widgets/dropdown.h +++ b/src/gui/widgets/dropdown.h @@ -85,6 +85,8 @@ class DropDown final : public ActionListener, void drawFrame(Graphics *graphics) override final; + void safeDrawFrame(Graphics *graphics) override final; + // Inherited from KeyListener void keyPressed(KeyEvent& event) override final; diff --git a/src/gui/widgets/playerbox.cpp b/src/gui/widgets/playerbox.cpp index 09ebe610d..e69d3e35b 100644 --- a/src/gui/widgets/playerbox.cpp +++ b/src/gui/widgets/playerbox.cpp @@ -160,6 +160,23 @@ void PlayerBox::drawFrame(Graphics *graphics) BLOCK_END("PlayerBox::drawFrame") } +void PlayerBox::safeDrawFrame(Graphics *graphics) +{ + BLOCK_START("PlayerBox::drawFrame") + if (mDrawBackground) + { + const int bs = mFrameSize * 2; + const int w = mDimension.width + bs; + const int h = mDimension.height + bs; + + if (!mSelected) + graphics->drawImageRect(0, 0, w, h, mBackground); + else + graphics->drawImageRect(0, 0, w, h, mSelectedBackground); + } + BLOCK_END("PlayerBox::drawFrame") +} + void PlayerBox::mouseReleased(MouseEvent& event) { if (event.getButton() == MouseButton::LEFT) diff --git a/src/gui/widgets/playerbox.h b/src/gui/widgets/playerbox.h index f428fcbfa..b331b7a1b 100644 --- a/src/gui/widgets/playerbox.h +++ b/src/gui/widgets/playerbox.h @@ -85,6 +85,8 @@ class PlayerBox final : public Widget, */ void drawFrame(Graphics *graphics) override final; + void safeDrawFrame(Graphics *graphics) override final; + Being *getBeing() A_WARN_UNUSED { return mBeing; } diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp index 481e4365d..1eb5417e8 100644 --- a/src/gui/widgets/scrollarea.cpp +++ b/src/gui/widgets/scrollarea.cpp @@ -436,25 +436,33 @@ void ScrollArea::drawFrame(Graphics *graphics) updateCalcFlag(graphics); - if (isBatchDrawRenders(openGLMode)) + if (mRedraw) { - if (mRedraw) - { - mVertexes2->clear(); - graphics->calcWindow(mVertexes2, - 0, 0, - w, h, - background); - graphics->finalize(mVertexes2); - } - graphics->drawTileCollection(mVertexes2); - } - else - { - graphics->drawImageRect(0, 0, + mVertexes2->clear(); + graphics->calcWindow(mVertexes2, + 0, 0, w, h, background); + graphics->finalize(mVertexes2); } + graphics->drawTileCollection(mVertexes2); + } + BLOCK_END("ScrollArea::drawFrame") +} + +void ScrollArea::safeDrawFrame(Graphics *graphics) +{ + BLOCK_START("ScrollArea::drawFrame") + if (mOpaque) + { + const int bs = mFrameSize * 2; + const int w = mDimension.width + bs; + const int h = mDimension.height + bs; + + updateCalcFlag(graphics); + graphics->drawImageRect(0, 0, + w, h, + background); } BLOCK_END("ScrollArea::drawFrame") } diff --git a/src/gui/widgets/scrollarea.h b/src/gui/widgets/scrollarea.h index d0e3bca92..d166f235c 100644 --- a/src/gui/widgets/scrollarea.h +++ b/src/gui/widgets/scrollarea.h @@ -146,6 +146,8 @@ class ScrollArea final : public BasicContainer, */ void drawFrame(Graphics *graphics) override final; + void safeDrawFrame(Graphics *graphics) override final; + /** * Sets whether the widget should draw its background or not. */ diff --git a/src/gui/widgets/textfield.cpp b/src/gui/widgets/textfield.cpp index 49d3fd412..ce1aacd9e 100644 --- a/src/gui/widgets/textfield.cpp +++ b/src/gui/widgets/textfield.cpp @@ -223,6 +223,18 @@ void TextField::drawFrame(Graphics *graphics) BLOCK_END("TextField::drawFrame") } +void TextField::safeDrawFrame(Graphics *graphics) +{ + BLOCK_START("TextField::drawFrame") + const int bs = 2 * mFrameSize; + graphics->drawImageRect(0, + 0, + mDimension.width + bs, + mDimension.height + bs, + skin); + BLOCK_END("TextField::drawFrame") +} + void TextField::setNumeric(const bool numeric) { mNumeric = numeric; diff --git a/src/gui/widgets/textfield.h b/src/gui/widgets/textfield.h index 2b5f4196f..3a5db3c3c 100644 --- a/src/gui/widgets/textfield.h +++ b/src/gui/widgets/textfield.h @@ -117,6 +117,8 @@ class TextField notfinal : public Widget, */ void drawFrame(Graphics *graphics) override final; + void safeDrawFrame(Graphics *graphics) override final; + /** * Determine whether the field should be numeric or not */ diff --git a/src/gui/widgets/widget.h b/src/gui/widgets/widget.h index 723811e66..7c3134302 100644 --- a/src/gui/widgets/widget.h +++ b/src/gui/widgets/widget.h @@ -147,6 +147,9 @@ class Widget notfinal : public Widget2 virtual void drawFrame(Graphics* graphics A_UNUSED) { } + virtual void safeDrawFrame(Graphics* graphics A_UNUSED) + { } + /** * Sets the size of the widget's frame. The frame is not considered a part of * the widget, it only allows a frame to be drawn around the widget, thus a frame -- cgit v1.2.3-60-g2f50