Home | History | Annotate | Download | only in compositor_bindings
      1 // Copyright 2012 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 #include "webkit/renderer/compositor_bindings/web_animation_impl.h"
      6 
      7 #include "cc/animation/animation.h"
      8 #include "cc/animation/animation_curve.h"
      9 #include "cc/animation/animation_id_provider.h"
     10 #include "third_party/WebKit/public/platform/WebAnimation.h"
     11 #include "third_party/WebKit/public/platform/WebAnimationCurve.h"
     12 #include "webkit/renderer/compositor_bindings/web_filter_animation_curve_impl.h"
     13 #include "webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h"
     14 #include "webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.h"
     15 
     16 using cc::Animation;
     17 using cc::AnimationIdProvider;
     18 
     19 using blink::WebAnimation;
     20 using blink::WebAnimationCurve;
     21 
     22 namespace webkit {
     23 
     24 WebAnimationImpl::WebAnimationImpl(const WebAnimationCurve& web_curve,
     25                                    TargetProperty target_property,
     26                                    int animation_id,
     27                                    int group_id) {
     28   if (!animation_id)
     29     animation_id = AnimationIdProvider::NextAnimationId();
     30   if (!group_id)
     31     group_id = AnimationIdProvider::NextGroupId();
     32 
     33   WebAnimationCurve::AnimationCurveType curve_type = web_curve.type();
     34   scoped_ptr<cc::AnimationCurve> curve;
     35   switch (curve_type) {
     36     case WebAnimationCurve::AnimationCurveTypeFloat: {
     37       const WebFloatAnimationCurveImpl* float_curve_impl =
     38           static_cast<const WebFloatAnimationCurveImpl*>(&web_curve);
     39       curve = float_curve_impl->CloneToAnimationCurve();
     40       break;
     41     }
     42     case WebAnimationCurve::AnimationCurveTypeTransform: {
     43       const WebTransformAnimationCurveImpl* transform_curve_impl =
     44           static_cast<const WebTransformAnimationCurveImpl*>(&web_curve);
     45       curve = transform_curve_impl->CloneToAnimationCurve();
     46       break;
     47     }
     48     case WebAnimationCurve::AnimationCurveTypeFilter: {
     49       const WebFilterAnimationCurveImpl* filter_curve_impl =
     50           static_cast<const WebFilterAnimationCurveImpl*>(&web_curve);
     51       curve = filter_curve_impl->CloneToAnimationCurve();
     52       break;
     53     }
     54   }
     55   animation_ = Animation::Create(
     56       curve.Pass(),
     57       animation_id,
     58       group_id,
     59       static_cast<cc::Animation::TargetProperty>(target_property));
     60 }
     61 
     62 WebAnimationImpl::~WebAnimationImpl() {}
     63 
     64 int WebAnimationImpl::id() { return animation_->id(); }
     65 
     66 blink::WebAnimation::TargetProperty WebAnimationImpl::targetProperty() const {
     67   return static_cast<WebAnimationImpl::TargetProperty>(
     68       animation_->target_property());
     69 }
     70 
     71 int WebAnimationImpl::iterations() const { return animation_->iterations(); }
     72 
     73 void WebAnimationImpl::setIterations(int n) { animation_->set_iterations(n); }
     74 
     75 double WebAnimationImpl::startTime() const { return animation_->start_time(); }
     76 
     77 void WebAnimationImpl::setStartTime(double monotonic_time) {
     78   animation_->set_start_time(monotonic_time);
     79 }
     80 
     81 double WebAnimationImpl::timeOffset() const {
     82   return animation_->time_offset();
     83 }
     84 
     85 void WebAnimationImpl::setTimeOffset(double monotonic_time) {
     86   animation_->set_time_offset(monotonic_time);
     87 }
     88 
     89 bool WebAnimationImpl::alternatesDirection() const {
     90   return animation_->alternates_direction();
     91 }
     92 
     93 void WebAnimationImpl::setAlternatesDirection(bool alternates) {
     94   animation_->set_alternates_direction(alternates);
     95 }
     96 
     97 scoped_ptr<cc::Animation> WebAnimationImpl::PassAnimation() {
     98   animation_->set_needs_synchronized_start_time(true);
     99   return animation_.Pass();
    100 }
    101 
    102 #define COMPILE_ASSERT_MATCHING_ENUMS(webkit_name, cc_name)                    \
    103     COMPILE_ASSERT(static_cast<int>(webkit_name) == static_cast<int>(cc_name), \
    104                    mismatching_enums)
    105 
    106 COMPILE_ASSERT_MATCHING_ENUMS(
    107     WebAnimation::TargetPropertyTransform, Animation::Transform);
    108 COMPILE_ASSERT_MATCHING_ENUMS(
    109     WebAnimation::TargetPropertyOpacity, Animation::Opacity);
    110 COMPILE_ASSERT_MATCHING_ENUMS(
    111     WebAnimation::TargetPropertyFilter, Animation::Filter);
    112 
    113 }  // namespace webkit
    114