mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Move AsyncPanZoomAnimation into its own header. (bug 1139220 part 1, r=kats)
This commit is contained in:
parent
6df58600b2
commit
5eeb4a740b
77
gfx/layers/apz/src/AsyncPanZoomAnimation.h
Normal file
77
gfx/layers/apz/src/AsyncPanZoomAnimation.h
Normal file
@ -0,0 +1,77 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set sw=2 ts=8 et tw=80 : */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef mozilla_layers_AsyncPanZoomAnimation_h_
|
||||
#define mozilla_layers_AsyncPanZoomAnimation_h_
|
||||
|
||||
#include "base/message_loop.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/TimeStamp.h"
|
||||
#include "FrameMetrics.h"
|
||||
#include "nsISupportsImpl.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
|
||||
class AsyncPanZoomAnimation {
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AsyncPanZoomAnimation)
|
||||
|
||||
public:
|
||||
explicit AsyncPanZoomAnimation(const TimeDuration& aRepaintInterval =
|
||||
TimeDuration::Forever())
|
||||
: mRepaintInterval(aRepaintInterval)
|
||||
{ }
|
||||
|
||||
virtual bool DoSample(FrameMetrics& aFrameMetrics,
|
||||
const TimeDuration& aDelta) = 0;
|
||||
|
||||
bool Sample(FrameMetrics& aFrameMetrics,
|
||||
const TimeDuration& aDelta) {
|
||||
// In some situations, particularly when handoff is involved, it's possible
|
||||
// for |aDelta| to be negative on the first call to sample. Ignore such a
|
||||
// sample here, to avoid each derived class having to deal with this case.
|
||||
if (aDelta.ToMilliseconds() <= 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return DoSample(aFrameMetrics, aDelta);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the deferred tasks in |mDeferredTasks|. See |mDeferredTasks|
|
||||
* for more information.
|
||||
* Clears |mDeferredTasks|.
|
||||
*/
|
||||
Vector<Task*> TakeDeferredTasks() {
|
||||
Vector<Task*> result;
|
||||
mDeferredTasks.swap(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies how frequently (at most) we want to do repaints during the
|
||||
* animation sequence. TimeDuration::Forever() will cause it to only repaint
|
||||
* at the end of the animation.
|
||||
*/
|
||||
TimeDuration mRepaintInterval;
|
||||
|
||||
protected:
|
||||
// Protected destructor, to discourage deletion outside of Release():
|
||||
virtual ~AsyncPanZoomAnimation()
|
||||
{ }
|
||||
|
||||
/**
|
||||
* Tasks scheduled for execution after the APZC's mMonitor is released.
|
||||
* Derived classes can add tasks here in Sample(), and the APZC can call
|
||||
* ExecuteDeferredTasks() to execute them.
|
||||
*/
|
||||
Vector<Task*> mDeferredTasks;
|
||||
};
|
||||
|
||||
} // namespace layers
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_layers_AsyncPanZoomAnimation_h_
|
@ -10,6 +10,7 @@
|
||||
#include "CrossProcessMutex.h"
|
||||
#include "mozilla/layers/GeckoContentController.h"
|
||||
#include "mozilla/layers/APZCTreeManager.h"
|
||||
#include "mozilla/layers/AsyncPanZoomAnimation.h"
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/EventForwards.h"
|
||||
#include "mozilla/Monitor.h"
|
||||
@ -1076,61 +1077,6 @@ private:
|
||||
bool mAsyncTransformAppliedToContent;
|
||||
};
|
||||
|
||||
class AsyncPanZoomAnimation {
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AsyncPanZoomAnimation)
|
||||
|
||||
public:
|
||||
explicit AsyncPanZoomAnimation(const TimeDuration& aRepaintInterval =
|
||||
TimeDuration::Forever())
|
||||
: mRepaintInterval(aRepaintInterval)
|
||||
{ }
|
||||
|
||||
virtual bool DoSample(FrameMetrics& aFrameMetrics,
|
||||
const TimeDuration& aDelta) = 0;
|
||||
|
||||
bool Sample(FrameMetrics& aFrameMetrics,
|
||||
const TimeDuration& aDelta) {
|
||||
// In some situations, particularly when handoff is involved, it's possible
|
||||
// for |aDelta| to be negative on the first call to sample. Ignore such a
|
||||
// sample here, to avoid each derived class having to deal with this case.
|
||||
if (aDelta.ToMilliseconds() <= 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return DoSample(aFrameMetrics, aDelta);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the deferred tasks in |mDeferredTasks|. See |mDeferredTasks|
|
||||
* for more information.
|
||||
* Clears |mDeferredTasks|.
|
||||
*/
|
||||
Vector<Task*> TakeDeferredTasks() {
|
||||
Vector<Task*> result;
|
||||
mDeferredTasks.swap(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies how frequently (at most) we want to do repaints during the
|
||||
* animation sequence. TimeDuration::Forever() will cause it to only repaint
|
||||
* at the end of the animation.
|
||||
*/
|
||||
TimeDuration mRepaintInterval;
|
||||
|
||||
protected:
|
||||
// Protected destructor, to discourage deletion outside of Release():
|
||||
virtual ~AsyncPanZoomAnimation()
|
||||
{ }
|
||||
|
||||
/**
|
||||
* Tasks scheduled for execution after the APZC's mMonitor is released.
|
||||
* Derived classes can add tasks here in Sample(), and the APZC can call
|
||||
* ExecuteDeferredTasks() to execute them.
|
||||
*/
|
||||
Vector<Task*> mDeferredTasks;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -94,6 +94,7 @@ EXPORTS.mozilla.layers += [
|
||||
# proper interface for the code there
|
||||
'apz/src/APZCTreeManager.h',
|
||||
'apz/src/APZUtils.h',
|
||||
'apz/src/AsyncPanZoomAnimation.h',
|
||||
'apz/testutil/APZTestData.h',
|
||||
'apz/util/ActiveElementManager.h',
|
||||
'apz/util/APZCCallbackHelper.h',
|
||||
|
Loading…
Reference in New Issue
Block a user