Bug 1335895 - part 13: Update APZCTreeManager to create AndroidDynamicToolbarAnimator r=kats,botond
The AndroidDynamicToolbarAnimator intercepts input events in APZCTreeManager::ReceiveInputEvent
MozReview-Commit-ID: 2AgrDK4xBJR
--- 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 = new AndroidDynamicToolbarAnimator();
+#endif // (MOZ_WIDGET_ANDROID)
}
APZCTreeManager::~APZCTreeManager()
{
}
/*static*/ void
APZCTreeManager::InitializeGlobalState()
@@ -716,16 +719,26 @@ 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) {
+ APZCTM_LOG("Dynamic toolbar consumed event");
+ 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) {
@@ -2117,10 +2130,25 @@ APZCTreeManager::CommonAncestor(AsyncPan
break;
}
aApzc1 = aApzc1->GetParent();
aApzc2 = aApzc2->GetParent();
}
return ancestor.forget();
}
+#if defined(MOZ_WIDGET_ANDROID)
+void
+APZCTreeManager::InitializeDynamicToolbarAnimator(const int64_t& aRootLayerTreeId)
+{
+ MOZ_ASSERT(mToolbarAnimator);
+ mToolbarAnimator->Initialize(aRootLayerTreeId);
+}
+
+AndroidDynamicToolbarAnimator*
+APZCTreeManager::GetAndroidDynamicToolbarAnimator()
+{
+ return mToolbarAnimator;
+}
+#endif // defined(MOZ_WIDGET_ANDROID)
+
} // namespace layers
} // namespace mozilla
--- 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,23 @@ private:
* pref). */
gfx::TreeLog mApzcTreeLog;
class CheckerboardFlushObserver;
friend class CheckerboardFlushObserver;
RefPtr<CheckerboardFlushObserver> mFlushObserver;
static float sDPI;
+
+#if defined(MOZ_WIDGET_ANDROID)
+public:
+ void InitializeDynamicToolbarAnimator(const int64_t& aRootLayerTreeId);
+ AndroidDynamicToolbarAnimator* GetAndroidDynamicToolbarAnimator();
+
+private:
+ RefPtr<AndroidDynamicToolbarAnimator> mToolbarAnimator;
+#endif // defined(MOZ_WIDGET_ANDROID)
};
} // namespace layers
} // namespace mozilla
#endif // mozilla_layers_PanZoomController_h