forked from mirrors/gecko-dev
		
	 3e22d70394
			
		
	
	
		3e22d70394
		
	
	
	
	
		
			
			Non-scrollable elements are immediately activated on touch-start, so it is not necessary to delay firing the synthesized mouse and click events. Differential Revision: https://phabricator.services.mozilla.com/D169727
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: c++; c-basic-offset: 2; tab-width: 20; indent-tabs-mode: nil; -*-
 | |
|  * 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/. */
 | |
| 
 | |
| #include "AndroidContentController.h"
 | |
| 
 | |
| #include "AndroidBridge.h"
 | |
| #include "base/message_loop.h"
 | |
| #include "mozilla/layers/APZCCallbackHelper.h"
 | |
| #include "mozilla/layers/IAPZCTreeManager.h"
 | |
| #include "nsIObserverService.h"
 | |
| #include "nsLayoutUtils.h"
 | |
| #include "nsWindow.h"
 | |
| 
 | |
| using mozilla::layers::IAPZCTreeManager;
 | |
| 
 | |
| namespace mozilla {
 | |
| namespace widget {
 | |
| 
 | |
| void AndroidContentController::Destroy() {
 | |
|   mAndroidWindow = nullptr;
 | |
|   ChromeProcessController::Destroy();
 | |
| }
 | |
| 
 | |
| void AndroidContentController::UpdateOverscrollVelocity(
 | |
|     const ScrollableLayerGuid& aGuid, const float aX, const float aY,
 | |
|     const bool aIsRootContent) {
 | |
|   if (aIsRootContent && mAndroidWindow) {
 | |
|     mAndroidWindow->UpdateOverscrollVelocity(aX, aY);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void AndroidContentController::UpdateOverscrollOffset(
 | |
|     const ScrollableLayerGuid& aGuid, const float aX, const float aY,
 | |
|     const bool aIsRootContent) {
 | |
|   if (aIsRootContent && mAndroidWindow) {
 | |
|     mAndroidWindow->UpdateOverscrollOffset(aX, aY);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void AndroidContentController::NotifyAPZStateChange(
 | |
|     const ScrollableLayerGuid& aGuid, APZStateChange aChange, int aArg,
 | |
|     Maybe<uint64_t> aInputBlockId) {
 | |
|   // This function may get invoked twice, if the first invocation is not on
 | |
|   // the main thread then the ChromeProcessController version of this function
 | |
|   // will redispatch to the main thread. We want to make sure that our handling
 | |
|   // only happens on the main thread.
 | |
|   ChromeProcessController::NotifyAPZStateChange(aGuid, aChange, aArg,
 | |
|                                                 aInputBlockId);
 | |
|   if (NS_IsMainThread()) {
 | |
|     nsCOMPtr<nsIObserverService> observerService =
 | |
|         mozilla::services::GetObserverService();
 | |
|     if (aChange ==
 | |
|         layers::GeckoContentController::APZStateChange::eTransformEnd) {
 | |
|       // This is used by tests to determine when the APZ is done doing whatever
 | |
|       // it's doing. XXX generify this as needed when writing additional tests.
 | |
|       observerService->NotifyObservers(nullptr, "APZ:TransformEnd", nullptr);
 | |
|       observerService->NotifyObservers(nullptr, "PanZoom:StateChange",
 | |
|                                        u"NOTHING");
 | |
|     } else if (aChange == layers::GeckoContentController::APZStateChange::
 | |
|                               eTransformBegin) {
 | |
|       observerService->NotifyObservers(nullptr, "PanZoom:StateChange",
 | |
|                                        u"PANNING");
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| }  // namespace widget
 | |
| }  // namespace mozilla
 |