1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_CSS_TIMING_DATA_H_
6 #define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_CSS_TIMING_DATA_H_
7 
8 #include "third_party/blink/renderer/platform/animation/timing_function.h"
9 #include "third_party/blink/renderer/platform/heap/handle.h"
10 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
11 #include "third_party/blink/renderer/platform/wtf/vector.h"
12 
13 namespace blink {
14 
15 struct Timing;
16 
17 class CSSTimingData {
18   USING_FAST_MALLOC(CSSTimingData);
19 
20  public:
21   ~CSSTimingData() = default;
22 
DelayList()23   const Vector<double>& DelayList() const { return delay_list_; }
DurationList()24   const Vector<double>& DurationList() const { return duration_list_; }
TimingFunctionList()25   const Vector<scoped_refptr<TimingFunction>>& TimingFunctionList() const {
26     return timing_function_list_;
27   }
28 
DelayList()29   Vector<double>& DelayList() { return delay_list_; }
DurationList()30   Vector<double>& DurationList() { return duration_list_; }
TimingFunctionList()31   Vector<scoped_refptr<TimingFunction>>& TimingFunctionList() {
32     return timing_function_list_;
33   }
34 
InitialDelay()35   static double InitialDelay() { return 0; }
InitialDuration()36   static double InitialDuration() { return 0; }
InitialTimingFunction()37   static scoped_refptr<TimingFunction> InitialTimingFunction() {
38     return CubicBezierTimingFunction::Preset(
39         CubicBezierTimingFunction::EaseType::EASE);
40   }
41 
42   template <class T>
GetRepeated(const Vector<T> & v,size_t index)43   static const T& GetRepeated(const Vector<T>& v, size_t index) {
44     return v[index % v.size()];
45   }
46 
47  protected:
48   CSSTimingData();
49   explicit CSSTimingData(const CSSTimingData&);
50 
51   Timing ConvertToTiming(size_t index) const;
52   bool TimingMatchForStyleRecalc(const CSSTimingData&) const;
53 
54  private:
55   Vector<double> delay_list_;
56   Vector<double> duration_list_;
57   Vector<scoped_refptr<TimingFunction>> timing_function_list_;
58 };
59 
60 }  // namespace blink
61 
62 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_CSS_TIMING_DATA_H_
63