// Copyright 2014 The Chromium Authors // 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_KEYFRAME_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_KEYFRAME_H_ #include <optional> #include "base/memory/scoped_refptr.h" #include "third_party/blink/renderer/core/animation/effect_model.h" #include "third_party/blink/renderer/core/animation/property_handle.h" #include "third_party/blink/renderer/core/animation/timeline_offset.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/animation/timing_function.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/forward.h" #include "third_party/blink/renderer/platform/wtf/hash_set.h" namespace blink { PropertyHandleSet; class Element; class ComputedStyle; class CompositorKeyframeValue; class TimelineRange; class V8ObjectBuilder; // A base class representing an animation keyframe. // // Generically a keyframe is a set of (property, value) pairs. In the // web-animations spec keyframes have a few additional properties: // // * A possibly-null keyframe offset, which represents the keyframe's position // relative to other keyframes in the same effect. // * A non-null timing function, which applies to the period of time between // this keyframe and the next keyframe in the same effect and influences // the interpolation between them. // * An keyframe-specific composite operation, which specifies a specific // composite operation used to combine values in this keyframe with an // underlying value. If this is 'auto', the keyframe effect composite // operation is used instead. // // For spec details, refer to: https://w3.org/TR/web-animations-1/#keyframe // // Implementation-wise the base Keyframe class captures the offset, composite // operation, and timing function. It is left to subclasses to define and store // the set of (property, value) pairs. // // === PropertySpecificKeyframes === // // When calculating the effect value of a keyframe effect, the web-animations // spec requires that a set of 'property-specific' keyframes are created. // Property-specific keyframes resolve any unspecified offsets in the keyframes, // calculate computed values for the specified properties, convert shorthand // properties to multiple longhand properties, and resolve any conflicting // shorthand properties. // // In this implementation property-specific keyframes are created only once and // cached for subsequent calls, rather than re-computing them for every sample // from the keyframe effect. See KeyframeEffectModelBase::EnsureKeyframeGroups. // // FIXME: Make Keyframe immutable class CORE_EXPORT Keyframe : public GarbageCollected<Keyframe> { … }; PropertySpecificKeyframe; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_KEYFRAME_H_