From f9de783dc1da6e09a716abb6f6094fea06df99a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Fri, 22 Nov 2013 17:22:37 +0200 Subject: [PATCH] UI|Client: Draw post-busy transition in BusyWidget This commit fixes the issue where the transition was not drawn correctly when the sidebar is open. Previously the drawing was done in GameUIWidget, which is affected by the game viewport. --- .../client/include/ui/framework/guiwidget.h | 4 ++-- doomsday/client/src/busymode.cpp | 1 + doomsday/client/src/ui/clientwindow.cpp | 3 ++- .../client/src/ui/framework/guiwidget.cpp | 2 +- doomsday/client/src/ui/widgets/busywidget.cpp | 21 ++++++++++++++++--- .../client/src/ui/widgets/gameuiwidget.cpp | 6 ------ 6 files changed, 24 insertions(+), 13 deletions(-) diff --git a/doomsday/client/include/ui/framework/guiwidget.h b/doomsday/client/include/ui/framework/guiwidget.h index 074dd6641c..2cec9a63a3 100644 --- a/doomsday/client/include/ui/framework/guiwidget.h +++ b/doomsday/client/include/ui/framework/guiwidget.h @@ -225,9 +225,9 @@ class GuiWidget : public QObject, public de::Widget void setOpacity(float opacity, de::TimeDelta span = 0, de::TimeDelta startDelay = 0); /** - * Determines the widget's current opacity. + * Determines the widget's opacity animation. */ - float opacity() const; + de::Animation opacity() const; /** * Determines the widget's opacity, factoring in all ancestor opacities. diff --git a/doomsday/client/src/busymode.cpp b/doomsday/client/src/busymode.cpp index 9f073998e7..523d8cce94 100644 --- a/doomsday/client/src/busymode.cpp +++ b/doomsday/client/src/busymode.cpp @@ -147,6 +147,7 @@ static void beginTask(BusyTask* task) busyInited = true; ProgressWidget &prog = ClientWindow::main().busy().progress(); + prog.show(); prog.setText(task->name); prog.setMode(task->mode & BUSYF_ACTIVITY? ProgressWidget::Indefinite : ProgressWidget::Ranged); diff --git a/doomsday/client/src/ui/clientwindow.cpp b/doomsday/client/src/ui/clientwindow.cpp index 3ce7b1aed2..f8077e98f4 100644 --- a/doomsday/client/src/ui/clientwindow.cpp +++ b/doomsday/client/src/ui/clientwindow.cpp @@ -251,7 +251,8 @@ DENG2_OBSERVES(App, GameChange) break; default: - busy->hide(); + //busy->hide(); + // The busy widget will hide itself after a possible transition has finished. busy->disable(); game->show(); diff --git a/doomsday/client/src/ui/framework/guiwidget.cpp b/doomsday/client/src/ui/framework/guiwidget.cpp index fec7597450..adaecd0874 100644 --- a/doomsday/client/src/ui/framework/guiwidget.cpp +++ b/doomsday/client/src/ui/framework/guiwidget.cpp @@ -410,7 +410,7 @@ void GuiWidget::setOpacity(float opacity, TimeDelta span, TimeDelta startDelay) d->opacity.setValue(opacity, span, startDelay); } -float GuiWidget::opacity() const +Animation GuiWidget::opacity() const { return d->opacity; } diff --git a/doomsday/client/src/ui/widgets/busywidget.cpp b/doomsday/client/src/ui/widgets/busywidget.cpp index 6f8283085a..589c5e7ec3 100644 --- a/doomsday/client/src/ui/widgets/busywidget.cpp +++ b/doomsday/client/src/ui/widgets/busywidget.cpp @@ -27,6 +27,7 @@ #include "GuiRootWidget" #include "busymode.h" #include "sys_system.h" +#include "con_main.h" #include #include @@ -104,11 +105,25 @@ void BusyWidget::update() void BusyWidget::drawContent() { - if(d->transitionTex.isNull()) + if(!BusyMode_Active()) { - //root().window().canvas().renderTarget().clear(GLTarget::ColorDepth); + d->progress->hide(); + + if(Con_TransitionInProgress()) + { + Con_DrawTransition(); + } + else + { + // Time to hide the busy widget, the transition has ended (or + // was never started). + hide(); + releaseTransitionFrame(); + } + return; } - else + + if(!d->transitionTex.isNull()) { GLState::top().apply(); diff --git a/doomsday/client/src/ui/widgets/gameuiwidget.cpp b/doomsday/client/src/ui/widgets/gameuiwidget.cpp index aee3bc8f80..b5dc08f3db 100644 --- a/doomsday/client/src/ui/widgets/gameuiwidget.cpp +++ b/doomsday/client/src/ui/widgets/gameuiwidget.cpp @@ -73,12 +73,6 @@ DENG2_PIMPL(GameUIWidget) } } - if(Con_TransitionInProgress()) - { - /// @todo Transition must be done at window level to work correctly. - Con_DrawTransition(); - } - // Draw the widgets of the Shadow Bias Editor (if active). SBE_DrawGui();