blob: d766d5c70ea82feae770e1261aec8eff5c0ef076 [file] [log] [blame]
// Copyright 2018 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 "third_party/blink/public/platform/web_scroll_into_view_params.h"
#include "third_party/blink/renderer/platform/wtf/size_assertions.h"
namespace blink {
namespace {
using AlignmentBehavior = WebScrollIntoViewParams::AlignmentBehavior;
using Alignment = WebScrollIntoViewParams::Alignment;
using Type = WebScrollIntoViewParams::Type;
using Behavior = WebScrollIntoViewParams::Behavior;
// Make sure we keep the public enums in sync with the internal ones.
ASSERT_SIZE(AlignmentBehavior, ScrollAlignmentBehavior)
STATIC_ASSERT_ENUM(AlignmentBehavior::kNoScroll,
ScrollAlignmentBehavior::kScrollAlignmentNoScroll);
STATIC_ASSERT_ENUM(AlignmentBehavior::kCenter,
ScrollAlignmentBehavior::kScrollAlignmentCenter);
STATIC_ASSERT_ENUM(AlignmentBehavior::kTop,
ScrollAlignmentBehavior::kScrollAlignmentTop);
STATIC_ASSERT_ENUM(AlignmentBehavior::kBottom,
ScrollAlignmentBehavior::kScrollAlignmentBottom);
STATIC_ASSERT_ENUM(AlignmentBehavior::kLeft,
ScrollAlignmentBehavior::kScrollAlignmentLeft);
STATIC_ASSERT_ENUM(AlignmentBehavior::kRight,
ScrollAlignmentBehavior::kScrollAlignmentRight);
STATIC_ASSERT_ENUM(AlignmentBehavior::kClosestEdge,
ScrollAlignmentBehavior::kScrollAlignmentClosestEdge);
ASSERT_SIZE(Type, ScrollType)
STATIC_ASSERT_ENUM(Type::kUser, ScrollType::kUserScroll);
STATIC_ASSERT_ENUM(Type::kProgrammatic, ScrollType::kProgrammaticScroll);
STATIC_ASSERT_ENUM(Type::kClamping, ScrollType::kClampingScroll);
STATIC_ASSERT_ENUM(Type::kAnchoring, ScrollType::kAnchoringScroll);
STATIC_ASSERT_ENUM(Type::kSequenced, ScrollType::kSequencedScroll);
ASSERT_SIZE(Behavior, ScrollBehavior)
STATIC_ASSERT_ENUM(Behavior::kAuto, ScrollBehavior::kScrollBehaviorAuto);
STATIC_ASSERT_ENUM(Behavior::kInstant, ScrollBehavior::kScrollBehaviorInstant);
STATIC_ASSERT_ENUM(Behavior::kSmooth, ScrollBehavior::kScrollBehaviorSmooth);
AlignmentBehavior ToAlignmentBehavior(
ScrollAlignmentBehavior scroll_alignment_behavior) {
return static_cast<AlignmentBehavior>(
static_cast<int>(scroll_alignment_behavior));
}
ScrollAlignmentBehavior ToScrollAlignmentBehavior(
AlignmentBehavior alignment_behavior) {
return static_cast<ScrollAlignmentBehavior>(
static_cast<int>(alignment_behavior));
}
ScrollAlignment ToScrollAlignment(Alignment alignment) {
return {ToScrollAlignmentBehavior(alignment.rect_visible),
ToScrollAlignmentBehavior(alignment.rect_hidden),
ToScrollAlignmentBehavior(alignment.rect_partial)};
}
Type FromScrollType(ScrollType type) {
return static_cast<Type>(static_cast<int>(type));
}
ScrollType ToScrollType(Type type) {
return static_cast<ScrollType>(static_cast<int>(type));
}
Behavior FromScrollBehavior(ScrollBehavior behavior) {
return static_cast<Behavior>(static_cast<int>(behavior));
}
ScrollBehavior ToScrollBehavior(Behavior behavior) {
return static_cast<ScrollBehavior>(static_cast<int>(behavior));
}
} // namespace
WebScrollIntoViewParams::Alignment::Alignment(
const ScrollAlignment& scroll_alignment)
: rect_visible(ToAlignmentBehavior(
ScrollAlignment::GetVisibleBehavior(scroll_alignment))),
rect_hidden(ToAlignmentBehavior(
ScrollAlignment::GetHiddenBehavior(scroll_alignment))),
rect_partial(ToAlignmentBehavior(
ScrollAlignment::GetPartialBehavior(scroll_alignment))) {}
WebScrollIntoViewParams::WebScrollIntoViewParams(
ScrollAlignment scroll_alignment_x,
ScrollAlignment scroll_alignment_y,
ScrollType scroll_type,
bool make_visible_in_visual_viewport,
ScrollBehavior scroll_behavior,
bool is_for_scroll_sequence,
bool zoom_into_rect)
: align_x(scroll_alignment_x),
align_y(scroll_alignment_y),
type(FromScrollType(scroll_type)),
make_visible_in_visual_viewport(make_visible_in_visual_viewport),
behavior(FromScrollBehavior(scroll_behavior)),
is_for_scroll_sequence(is_for_scroll_sequence),
zoom_into_rect(zoom_into_rect) {}
ScrollAlignment WebScrollIntoViewParams::GetScrollAlignmentX() const {
return ToScrollAlignment(align_x);
}
ScrollAlignment WebScrollIntoViewParams::GetScrollAlignmentY() const {
return ToScrollAlignment(align_y);
}
ScrollType WebScrollIntoViewParams::GetScrollType() const {
return ToScrollType(type);
}
ScrollBehavior WebScrollIntoViewParams::GetScrollBehavior() const {
return ToScrollBehavior(behavior);
}
} // namespace blink