Bug 1335895 - part 13: Update APZCTreeManager create AndroidDynamicToolbarAnimator r=kats,botond
The AndroidDynamicToolbarAnimator intercepts input events in APZCTreeManager::ReceiveInputEvent
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -174,16 +174,19 @@ APZCTreeManager::APZCTreeManager()
mApzcTreeLog("apzctree")
{
RefPtr<APZCTreeManager> self(this);
NS_DispatchToMainThread(NS_NewRunnableFunction([self] {
self->mFlushObserver = new CheckerboardFlushObserver(self);
}));
AsyncPanZoomController::InitializeGlobalState();
mApzcTreeLog.ConditionOnPrefFunction(gfxPrefs::APZPrintTree);
+#if defined(MOZ_WIDGET_ANDROID)
+ mToolbarAnimator = AndroidDynamicToolbarAnimator::Create();
+#endif // (MOZ_WIDGET_ANDROID)
}
APZCTreeManager::~APZCTreeManager()
{
}
/*static*/ void
APZCTreeManager::InitializeGlobalState()
@@ -710,16 +713,25 @@ APZCTreeManager::FlushApzRepaints(uint64
nsEventStatus
APZCTreeManager::ReceiveInputEvent(InputData& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
APZThreadUtils::AssertOnControllerThread();
+#if defined(MOZ_WIDGET_ANDROID)
+ MOZ_ASSERT(mToolbarAnimator);
+ nsEventStatus isConsumed = mToolbarAnimator->ReceiveInputEvent(aEvent);
+ // Check if the mToolbarAnimator consumed the event.
+ if (isConsumed == nsEventStatus_eConsumeNoDefault) {
+ return isConsumed;
+ }
+#endif // (MOZ_WIDGET_ANDROID)
+
// Initialize aOutInputBlockId to a sane value, and then later we overwrite
// it if the input event goes into a block.
if (aOutInputBlockId) {
*aOutInputBlockId = InputBlockState::NO_BLOCK_ID;
}
nsEventStatus result = nsEventStatus_eIgnore;
HitTestResult hitResult = HitNothing;
switch (aEvent.mInputType) {
--- a/gfx/layers/apz/src/APZCTreeManager.h
+++ b/gfx/layers/apz/src/APZCTreeManager.h
@@ -14,16 +14,20 @@
#include "mozilla/gfx/Matrix.h" // for Matrix4x4
#include "mozilla/layers/TouchCounter.h"// for TouchCounter
#include "mozilla/layers/IAPZCTreeManager.h" // for IAPZCTreeManager
#include "mozilla/Mutex.h" // for Mutex
#include "mozilla/RefPtr.h" // for RefPtr
#include "mozilla/TimeStamp.h" // for mozilla::TimeStamp
#include "nsCOMPtr.h" // for already_AddRefed
+#if defined(MOZ_WIDGET_ANDROID)
+#include "mozilla/layers/AndroidDynamicToolbarAnimator.h"
+#endif // defined(MOZ_WIDGET_ANDROID)
+
namespace mozilla {
class MultiTouchInput;
namespace layers {
class Layer;
class AsyncPanZoomController;
@@ -520,14 +524,29 @@ private:
* pref). */
gfx::TreeLog mApzcTreeLog;
class CheckerboardFlushObserver;
friend class CheckerboardFlushObserver;
RefPtr<CheckerboardFlushObserver> mFlushObserver;
static float sDPI;
+
+#if defined(MOZ_WIDGET_ANDROID)
+ RefPtr<AndroidDynamicToolbarAnimator> mToolbarAnimator;
+
+public:
+ void InitializeDynamicToolbarAnimator(const int64_t& aRootLayerTreeId)
+ {
+ MOZ_ASSERT(mToolbarAnimator);
+ mToolbarAnimator->Initialize(aRootLayerTreeId);
+ }
+ AndroidDynamicToolbarAnimator* GetAndroidDynamicToolbarAnimator()
+ {
+ return mToolbarAnimator;
+ }
+#endif // defined(MOZ_WIDGET_ANDROID)
};
} // namespace layers
} // namespace mozilla
#endif // mozilla_layers_PanZoomController_h