Bug 1221659 - Make fullscreen transition on Linux take the designed time. r=roc

--HG--
extra : source : 6188bec8397bc87d1b3b5820adf66fc424a0bc20
This commit is contained in:
Xidorn Quan 2015-12-31 14:11:36 +11:00
Родитель 95d58839d3
Коммит de0658cc13
1 изменённых файлов: 12 добавлений и 6 удалений

Просмотреть файл

@ -10,6 +10,7 @@
#include "mozilla/MiscEvents.h"
#include "mozilla/MouseEvents.h"
#include "mozilla/TextEvents.h"
#include "mozilla/TimeStamp.h"
#include "mozilla/TouchEvents.h"
#include "mozilla/UniquePtrExtensions.h"
#include <algorithm>
@ -4911,8 +4912,8 @@ public:
uint16_t aDuration, nsIRunnable* aCallback,
FullscreenTransitionWindow* aWindow)
: mStage(aStage)
, mStep(0)
, mTotalSteps(aDuration / sInterval)
, mStartTime(TimeStamp::Now())
, mDuration(TimeDuration::FromMilliseconds(aDuration))
, mCallback(aCallback)
, mWindow(aWindow) { }
@ -4921,7 +4922,8 @@ public:
private:
nsIWidget::FullscreenTransitionStage mStage;
uint16_t mStep, mTotalSteps;
TimeStamp mStartTime;
TimeDuration mDuration;
nsCOMPtr<nsIRunnable> mCallback;
RefPtr<FullscreenTransitionWindow> mWindow;
};
@ -4929,15 +4931,19 @@ private:
/* static */ gboolean
FullscreenTransitionData::TimeoutCallback(gpointer aData)
{
bool finishing = false;
auto data = static_cast<FullscreenTransitionData*>(aData);
data->mStep++;
gdouble opacity = data->mStep / gdouble(data->mTotalSteps);
gdouble opacity = (TimeStamp::Now() - data->mStartTime) / data->mDuration;
if (opacity >= 1.0) {
opacity = 1.0;
finishing = true;
}
if (data->mStage == nsIWidget::eAfterFullscreenToggle) {
opacity = 1.0 - opacity;
}
gtk_window_set_opacity(GTK_WINDOW(data->mWindow->mWindow), opacity);
if (data->mStep != data->mTotalSteps) {
if (!finishing) {
return TRUE;
}
NS_DispatchToMainThread(data->mCallback.forget());