text: // 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.
  
  #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_IMAGE_SLICE_PROPERTY_FUNCTIONS_H_
  #define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_IMAGE_SLICE_PROPERTY_FUNCTIONS_H_
  
  #include "third_party/blink/renderer/core/css/css_property_names.h"
  #include "third_party/blink/renderer/core/style/computed_style.h"
  #include "third_party/blink/renderer/platform/wtf/allocator.h"
  
  namespace blink {
  
  // This struct doesn't retain ownership of the slices, treat it like a
  // reference.
  struct ImageSlice {
    ImageSlice(const LengthBox& slices, bool fill) : slices(slices), fill(fill) {}
  
    const LengthBox& slices;
    bool fill;
  };
  
  class ImageSlicePropertyFunctions {
    STATIC_ONLY(ImageSlicePropertyFunctions);
  
   public:
    static ImageSlice GetInitialImageSlice(const CSSProperty& property) {
      return GetImageSlice(property, ComputedStyle::InitialStyle());
    }
  
    static ImageSlice GetImageSlice(const CSSProperty& property,
                                    const ComputedStyle& style) {
      switch (property.PropertyID()) {
        default:
          NOTREACHED();
          FALLTHROUGH;
        case CSSPropertyID::kBorderImageSlice:
          return ImageSlice(style.BorderImageSlices(),
                            style.BorderImageSlicesFill());
        case CSSPropertyID::kWebkitMaskBoxImageSlice:
          return ImageSlice(style.MaskBoxImageSlices(),
                            style.MaskBoxImageSlicesFill());
      }
    }
  
    static void SetImageSlice(const CSSProperty& property,
                              ComputedStyle& style,
                              const ImageSlice& slice) {
      switch (property.PropertyID()) {
        case CSSPropertyID::kBorderImageSlice:
          style.SetBorderImageSlices(slice.slices);
          style.SetBorderImageSlicesFill(slice.fill);
          break;
        case CSSPropertyID::kWebkitMaskBoxImageSlice:
          style.SetMaskBoxImageSlices(slice.slices);
          style.SetMaskBoxImageSlicesFill(slice.fill);
          break;
        default:
          NOTREACHED();
      }
    }
  };
  
  }  // namespace blink
  
  #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_IMAGE_SLICE_PROPERTY_FUNCTIONS_H_
  