tor-browser

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

AutoDirWheelDeltaAdjuster.h (3863B)


      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 #ifndef __mozilla_layers_AutoDirWheelDeltaAdjuster_h__
      8 #define __mozilla_layers_AutoDirWheelDeltaAdjuster_h__
      9 
     10 #include "Axis.h"                         // for AxisX, AxisY, Side
     11 #include "mozilla/WheelHandlingHelper.h"  // for AutoDirWheelDeltaAdjuster
     12 
     13 namespace mozilla {
     14 namespace layers {
     15 
     16 /**
     17 * About AutoDirWheelDeltaAdjuster:
     18 * For an AutoDir wheel scroll, there's some situations where we should adjust a
     19 * wheel event's delta values. AutoDirWheelDeltaAdjuster converts delta values
     20 * for AutoDir scrolling. An AutoDir wheel scroll lets the user scroll a frame
     21 * with only one scrollbar, using either a vertical or a horzizontal wheel.
     22 * For more detail about the concept of AutoDir scrolling, see the comments in
     23 * AutoDirWheelDeltaAdjuster.
     24 *
     25 * This is the APZ implementation of AutoDirWheelDeltaAdjuster.
     26 */
     27 class MOZ_STACK_CLASS APZAutoDirWheelDeltaAdjuster final
     28    : public AutoDirWheelDeltaAdjuster {
     29 public:
     30  /**
     31   * @param aDeltaX            DeltaX for a wheel event whose delta values will
     32   *                           be adjusted upon calling adjust() when
     33   *                           ShouldBeAdjusted() returns true.
     34   * @param aDeltaY            DeltaY for a wheel event, like DeltaX.
     35   * @param aAxisX             The X axis information provider for the current
     36   *                           frame, such as whether the frame can be scrolled
     37   *                           horizontally, leftwards or rightwards.
     38   * @param aAxisY             The Y axis information provider for the current
     39   *                           frame, such as whether the frame can be scrolled
     40   *                           vertically, upwards or downwards.
     41   * @param aIsHorizontalContentRightToLeft
     42   *                           Indicates whether the horizontal content starts
     43   *                           at rightside. This value will decide which edge
     44   *                           the adjusted scroll goes towards, in other words,
     45   *                           it will decide the sign of the adjusted delta
     46   *                           values). For detailed information, see
     47   *                           IsHorizontalContentRightToLeft() in
     48   *                           the base class AutoDirWheelDeltaAdjuster.
     49   */
     50  APZAutoDirWheelDeltaAdjuster(double& aDeltaX, double& aDeltaY,
     51                               const AxisX& aAxisX, const AxisY& aAxisY,
     52                               bool aIsHorizontalContentRightToLeft)
     53      : AutoDirWheelDeltaAdjuster(aDeltaX, aDeltaY),
     54        mAxisX(aAxisX),
     55        mAxisY(aAxisY),
     56        mIsHorizontalContentRightToLeft(aIsHorizontalContentRightToLeft) {}
     57 
     58 private:
     59  virtual bool CanScrollAlongXAxis() const override {
     60    return mAxisX.CanScroll();
     61  }
     62  virtual bool CanScrollAlongYAxis() const override {
     63    return mAxisY.CanScroll();
     64  }
     65  virtual bool CanScrollUpwards() const override {
     66    return mAxisY.CanScrollTo(eSideTop);
     67  }
     68  virtual bool CanScrollDownwards() const override {
     69    return mAxisY.CanScrollTo(eSideBottom);
     70  }
     71  virtual bool CanScrollLeftwards() const override {
     72    return mAxisX.CanScrollTo(eSideLeft);
     73  }
     74  virtual bool CanScrollRightwards() const override {
     75    return mAxisX.CanScrollTo(eSideRight);
     76  }
     77  virtual bool IsHorizontalContentRightToLeft() const override {
     78    return mIsHorizontalContentRightToLeft;
     79  }
     80 
     81  const AxisX& mAxisX;
     82  const AxisY& mAxisY;
     83  bool mIsHorizontalContentRightToLeft;
     84 };
     85 
     86 }  // namespace layers
     87 }  // namespace mozilla
     88 
     89 #endif  // __mozilla_layers_AutoDirWheelDeltaAdjuster_h__