blob: 67712f653ffb18a04dc70b9810e726198fe123c6 [file] [log] [blame]
// Copyright 2016 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/renderer/core/animation/size_list_property_functions.h"
#include "third_party/blink/renderer/core/style/computed_style.h"
namespace blink {
static const FillLayer* GetFillLayerForSize(const CSSProperty& property,
const ComputedStyle& style) {
switch (property.PropertyID()) {
case CSSPropertyID::kBackgroundSize:
return &style.BackgroundLayers();
case CSSPropertyID::kWebkitMaskSize:
return &style.MaskLayers();
default:
NOTREACHED();
return nullptr;
}
}
static FillLayer* AccessFillLayerForSize(const CSSProperty& property,
ComputedStyle& style) {
switch (property.PropertyID()) {
case CSSPropertyID::kBackgroundSize:
return &style.AccessBackgroundLayers();
case CSSPropertyID::kWebkitMaskSize:
return &style.AccessMaskLayers();
default:
NOTREACHED();
return nullptr;
}
}
SizeList SizeListPropertyFunctions::GetInitialSizeList(
const CSSProperty& property) {
return GetSizeList(property, ComputedStyle::InitialStyle());
}
SizeList SizeListPropertyFunctions::GetSizeList(const CSSProperty& property,
const ComputedStyle& style) {
SizeList result;
for (const FillLayer* fill_layer = GetFillLayerForSize(property, style);
fill_layer && fill_layer->IsSizeSet(); fill_layer = fill_layer->Next())
result.push_back(fill_layer->Size());
return result;
}
void SizeListPropertyFunctions::SetSizeList(const CSSProperty& property,
ComputedStyle& style,
const SizeList& size_list) {
FillLayer* fill_layer = AccessFillLayerForSize(property, style);
FillLayer* prev = nullptr;
for (const FillSize& size : size_list) {
if (!fill_layer)
fill_layer = prev->EnsureNext();
fill_layer->SetSize(size);
prev = fill_layer;
fill_layer = fill_layer->Next();
}
while (fill_layer) {
fill_layer->ClearSize();
fill_layer = fill_layer->Next();
}
}
} // namespace blink