dom/animation/ComputedTimingFunction.h
author Brian Birtles <birtles@gmail.com>
Fri, 04 Dec 2015 08:32:53 +0900
changeset 309699 17eb384095497ac3b940aabe1de65f51f230c7b6
parent 305305 41c442dfc891bb8d1cb21bc085abe5bd31584f79
child 315144 941bb74fe4b9ab8eac3a87fbc6e79796ec54102f
permissions -rw-r--r--
Bug 1226118 part 5 - Move LogAsyncAnimationFailure to AnimationUtils; r=dholbert This patch also moves AnimationUtils out of the dom namespace since it seems unnecessary. We typically only put actual DOM interfaces in the dom namespace.

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef mozilla_ComputedTimingFunction_h
#define mozilla_ComputedTimingFunction_h

#include "nsSMILKeySpline.h"  // nsSMILKeySpline
#include "nsStyleStruct.h"    // nsTimingFunction

namespace mozilla {

class ComputedTimingFunction
{
public:
  void Init(const nsTimingFunction &aFunction);
  double GetValue(double aPortion) const;
  const nsSMILKeySpline* GetFunction() const
  {
    NS_ASSERTION(HasSpline(), "Type mismatch");
    return &mTimingFunction;
  }
  nsTimingFunction::Type GetType() const { return mType; }
  bool HasSpline() const { return nsTimingFunction::IsSplineType(mType); }
  uint32_t GetSteps() const { return mSteps; }
  nsTimingFunction::StepSyntax GetStepSyntax() const { return mStepSyntax; }
  bool operator==(const ComputedTimingFunction& aOther) const
  {
    return mType == aOther.mType &&
           (HasSpline() ?
            mTimingFunction == aOther.mTimingFunction :
            (mSteps == aOther.mSteps &&
             mStepSyntax == aOther.mStepSyntax));
  }
  bool operator!=(const ComputedTimingFunction& aOther) const
  {
    return !(*this == aOther);
  }
  int32_t Compare(const ComputedTimingFunction& aRhs) const;
  void AppendToString(nsAString& aResult) const;

private:
  nsTimingFunction::Type mType;
  nsSMILKeySpline mTimingFunction;
  uint32_t mSteps;
  nsTimingFunction::StepSyntax mStepSyntax;
};

} // namespace mozilla

#endif // mozilla_dom_AnimationEffectReadOnly_h