blob: 3120744d5f1492afd0bb65fe247b67be453e1b75 [file] [log] [blame]
#ifndef VisibilityStyleInterpolation_h
#define VisibilityStyleInterpolation_h
#include "core/CSSValueKeywords.h"
#include "core/CoreExport.h"
#include "core/animation/StyleInterpolation.h"
#include "core/css/CSSPrimitiveValue.h"
namespace blink {
class CORE_EXPORT VisibilityStyleInterpolation : public StyleInterpolation {
public:
static PassRefPtr<VisibilityStyleInterpolation> create(const CSSValue& start, const CSSValue& end, CSSPropertyID id)
{
RefPtr<VisibilityStyleInterpolation> interpolation = adoptRef(new VisibilityStyleInterpolation(
visibilityToInterpolableValue(start), visibilityToInterpolableValue(end), id));
if (!isVisible(start)) {
interpolation->m_notVisible = toCSSPrimitiveValue(start).getValueID();
} else if (!isVisible(end)) {
interpolation->m_notVisible = toCSSPrimitiveValue(end).getValueID();
}
return interpolation.release();
}
static bool canCreateFrom(const CSSValue&);
static bool isVisible(const CSSValue&);
void apply(StyleResolverState&) const override;
private:
VisibilityStyleInterpolation(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end, CSSPropertyID id)
: StyleInterpolation(start, end, id)
, m_notVisible(CSSValueVisible)
{
}
static PassOwnPtr<InterpolableValue> visibilityToInterpolableValue(const CSSValue&);
static PassRefPtrWillBeRawPtr<CSSValue> interpolableValueToVisibility(InterpolableValue*, CSSValueID);
CSSValueID m_notVisible;
friend class AnimationVisibilityStyleInterpolationTest;
};
}
#endif