| Index: ios/web/public/web_state/page_scroll_state.mm
|
| diff --git a/ios/web/public/web_state/page_scroll_state.mm b/ios/web/public/web_state/page_scroll_state.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b7479fd44c37d95b0ef5da646c59ca991c00716d
|
| --- /dev/null
|
| +++ b/ios/web/public/web_state/page_scroll_state.mm
|
| @@ -0,0 +1,72 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ios/web/public/web_state/page_scroll_state.h"
|
| +
|
| +#include <cmath>
|
| +
|
| +namespace web {
|
| +
|
| +namespace {
|
| +// Returns true if:
|
| +// - both |value1| and |value2| are NAN, or
|
| +// - |value1| and |value2| are equal non-NAN values.
|
| +inline bool StateValuesAreEqual(double value1, double value2) {
|
| + return std::isnan(value1) ? std::isnan(value2) : value1 == value2;
|
| +}
|
| +} // namespace
|
| +
|
| +PageScrollState::PageScrollState()
|
| + : scroll_offset_x_(NAN),
|
| + scroll_offset_y_(NAN),
|
| + minimum_zoom_scale_(NAN),
|
| + maximum_zoom_scale_(NAN),
|
| + zoom_scale_(NAN) {
|
| +}
|
| +
|
| +PageScrollState::PageScrollState(double scroll_offset_x,
|
| + double scroll_offset_y,
|
| + double minimum_zoom_scale,
|
| + double maximum_zoom_scale,
|
| + double zoom_scale)
|
| + : scroll_offset_x_(scroll_offset_x),
|
| + scroll_offset_y_(scroll_offset_y),
|
| + minimum_zoom_scale_(minimum_zoom_scale),
|
| + maximum_zoom_scale_(maximum_zoom_scale),
|
| + zoom_scale_(zoom_scale) {
|
| +}
|
| +
|
| +PageScrollState::~PageScrollState() {
|
| +}
|
| +
|
| +bool PageScrollState::IsValid() const {
|
| + return IsScrollOffsetValid() && IsZoomScaleValid();
|
| +}
|
| +
|
| +bool PageScrollState::IsScrollOffsetValid() const {
|
| + return !std::isnan(scroll_offset_x_) && !std::isnan(scroll_offset_y_);
|
| +}
|
| +
|
| +bool PageScrollState::IsZoomScaleValid() const {
|
| + return IsZoomScaleLegacyFormat() ||
|
| + (!std::isnan(minimum_zoom_scale_) &&
|
| + !std::isnan(maximum_zoom_scale_) && !std::isnan(zoom_scale_) &&
|
| + zoom_scale_ >= minimum_zoom_scale_ &&
|
| + zoom_scale_ <= maximum_zoom_scale_);
|
| +}
|
| +
|
| +bool PageScrollState::IsZoomScaleLegacyFormat() const {
|
| + return std::isnan(minimum_zoom_scale_) && std::isnan(maximum_zoom_scale_) &&
|
| + zoom_scale_ > 0.0;
|
| +}
|
| +
|
| +bool PageScrollState::operator==(const PageScrollState& other) const {
|
| + return StateValuesAreEqual(scroll_offset_x_, other.scroll_offset_x_) &&
|
| + StateValuesAreEqual(scroll_offset_y_, other.scroll_offset_y_) &&
|
| + StateValuesAreEqual(minimum_zoom_scale_, other.minimum_zoom_scale_) &&
|
| + StateValuesAreEqual(maximum_zoom_scale_, other.maximum_zoom_scale_) &&
|
| + StateValuesAreEqual(zoom_scale_, other.zoom_scale_);
|
| +}
|
| +
|
| +} // namespace web
|
|
|