tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

IAPZHitTester.cpp (2873B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "IAPZHitTester.h"
      8 #include "APZCTreeManager.h"
      9 #include "AsyncPanZoomController.h"
     10 
     11 namespace mozilla {
     12 namespace layers {
     13 
     14 IAPZHitTester::HitTestResult IAPZHitTester::CloneHitTestResult(
     15    RecursiveMutexAutoLock& aProofOfTreeLock,
     16    const IAPZHitTester::HitTestResult& aHitTestResult) const {
     17  HitTestResult result;
     18 
     19  result.mTargetApzc = aHitTestResult.mTargetApzc;
     20  result.mHitResult = aHitTestResult.mHitResult;
     21  result.mLayersId = aHitTestResult.mLayersId;
     22  result.mFixedPosSides = aHitTestResult.mFixedPosSides;
     23  result.mHitOverscrollGutter = aHitTestResult.mHitOverscrollGutter;
     24 
     25  RefPtr<HitTestingTreeNode> scrollbarNode =
     26      aHitTestResult.mScrollbarNode.Get(aProofOfTreeLock);
     27  RefPtr<HitTestingTreeNode> node = aHitTestResult.mNode.Get(aProofOfTreeLock);
     28 
     29  if (aHitTestResult.mScrollbarNode) {
     30    InitializeHitTestingTreeNodeAutoLock(result.mScrollbarNode,
     31                                         aProofOfTreeLock, scrollbarNode);
     32  }
     33  if (aHitTestResult.mNode) {
     34    InitializeHitTestingTreeNodeAutoLock(result.mNode, aProofOfTreeLock, node);
     35  }
     36 
     37  return result;
     38 }
     39 
     40 RecursiveMutex& IAPZHitTester::GetTreeLock() { return mTreeManager->mTreeLock; }
     41 
     42 LayersId IAPZHitTester::GetRootLayersId() const {
     43  return mTreeManager->mRootLayersId;
     44 }
     45 
     46 HitTestingTreeNode* IAPZHitTester::GetRootNode() const {
     47  mTreeManager->mTreeLock.AssertCurrentThreadIn();
     48  return mTreeManager->mRootNode;
     49 }
     50 
     51 HitTestingTreeNode* IAPZHitTester::FindRootNodeForLayersId(
     52    LayersId aLayersId) const {
     53  return mTreeManager->FindRootNodeForLayersId(aLayersId);
     54 }
     55 
     56 AsyncPanZoomController* IAPZHitTester::FindRootApzcForLayersId(
     57    LayersId aLayersId) const {
     58  HitTestingTreeNode* resultNode = FindRootNodeForLayersId(aLayersId);
     59  return resultNode ? resultNode->GetApzc() : nullptr;
     60 }
     61 
     62 already_AddRefed<HitTestingTreeNode> IAPZHitTester::GetTargetNode(
     63    const ScrollableLayerGuid& aGuid,
     64    ScrollableLayerGuid::Comparator aComparator) {
     65  // Acquire the tree lock so that derived classes can call this from
     66  // methods other than GetAPZCAtPoint().
     67  RecursiveMutexAutoLock lock(mTreeManager->mTreeLock);
     68  return mTreeManager->GetTargetNode(aGuid, aComparator);
     69 }
     70 
     71 void IAPZHitTester::InitializeHitTestingTreeNodeAutoLock(
     72    HitTestingTreeNodeAutoLock& aAutoLock,
     73    const RecursiveMutexAutoLock& aProofOfTreeLock,
     74    RefPtr<HitTestingTreeNode>& aNode) const {
     75  aAutoLock.Initialize(aProofOfTreeLock, aNode.forget(),
     76                       mTreeManager->mTreeLock);
     77 }
     78 
     79 }  // namespace layers
     80 }  // namespace mozilla