summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/src/SampledAPZCState.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/apz/src/SampledAPZCState.h')
-rw-r--r--gfx/layers/apz/src/SampledAPZCState.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/gfx/layers/apz/src/SampledAPZCState.h b/gfx/layers/apz/src/SampledAPZCState.h
new file mode 100644
index 0000000000..a521eeaf87
--- /dev/null
+++ b/gfx/layers/apz/src/SampledAPZCState.h
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#ifndef mozilla_layers_SampledAPZCState_h
+#define mozilla_layers_SampledAPZCState_h
+
+#include "FrameMetrics.h"
+#include "mozilla/Maybe.h"
+#include "mozilla/ScrollGeneration.h"
+
+namespace mozilla {
+namespace layers {
+
+class SampledAPZCState {
+ public:
+ SampledAPZCState();
+ explicit SampledAPZCState(const FrameMetrics& aMetrics);
+ SampledAPZCState(const FrameMetrics& aMetrics,
+ Maybe<CompositionPayload>&& aPayload,
+ APZScrollGeneration aGeneration);
+
+ bool operator==(const SampledAPZCState& aOther) const;
+ bool operator!=(const SampledAPZCState& aOther) const;
+
+ CSSRect GetLayoutViewport() const { return mLayoutViewport; }
+ CSSPoint GetVisualScrollOffset() const { return mVisualScrollOffset; }
+ CSSToParentLayerScale GetZoom() const { return mZoom; }
+ Maybe<CompositionPayload> TakeScrollPayload();
+ const APZScrollGeneration& Generation() const { return mGeneration; }
+
+ void UpdateScrollProperties(const FrameMetrics& aMetrics);
+ void UpdateScrollPropertiesWithRelativeDelta(const FrameMetrics& aMetrics,
+ const CSSPoint& aRelativeDelta);
+
+ void UpdateZoomProperties(const FrameMetrics& aMetrics);
+
+ /**
+ * Re-clamp mVisualScrollOffset to the scroll range specified by the provided
+ * metrics. This only needs to be called if the scroll offset changes
+ * outside of AsyncPanZoomController::SampleCompositedAsyncTransform().
+ * It also recalculates mLayoutViewport so that it continues to enclose
+ * the visual viewport. This only needs to be called if the
+ * layout viewport changes outside of SampleCompositedAsyncTransform().
+ */
+ void ClampVisualScrollOffset(const FrameMetrics& aMetrics);
+
+ void ZoomBy(float aScale);
+
+ private:
+ // These variables cache the layout viewport, scroll offset, and zoom stored
+ // in |Metrics()| at the time this class was constructed.
+ CSSRect mLayoutViewport;
+ CSSPoint mVisualScrollOffset;
+ CSSToParentLayerScale mZoom;
+ // An optional payload that rides along with the sampled state.
+ Maybe<CompositionPayload> mScrollPayload;
+ APZScrollGeneration mGeneration;
+
+ void RemoveFractionalAsyncDelta();
+ // A handy wrapper to call
+ // FrameMetrics::KeepLayoutViewportEnclosingVisualViewport with this
+ // SampledAPZCState and the given |aMetrics|.
+ void KeepLayoutViewportEnclosingVisualViewport(const FrameMetrics& aMetrics);
+};
+
+} // namespace layers
+} // namespace mozilla
+
+#endif // mozilla_layers_SampledAPZCState_h