Files
palemoon27/dom/smil/nsSMILKeySpline.h
T
roytam1 2b652f0b52 import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1195098. Null check for blurred source surface. r=mstange (4578ca815e)
- Bug 1155828. Follow up bug to correct indentation. r=mstange (7b1ccb079e)
- Bug 1181028. Log assert error. r=me (a09801af89)
- Bug 1181028. Delete assertion to create equivalent draw targets during box shadow creation. r=mstange (de7ffd0412)
- Bug 1209649. Take into account border radius sizes for min inset box shadow. r=mstange (992619654c)
- Bug 1178971 - Added function to draw dashed table borders to replace loop currently used to individually draw each dash. r=mstange (1a0ef8e26d)
- Bug 1198708 - Part 1: Store exact timing-function type on nsTimingFunction and ComputedTimingFunction. r=birtles (03636015d2)
- Bug 1198708 - Part 2: Factor out computed nsTimingFunction serialization to public utility methods. r=birtles (11069efa45)
- Bug 1198708 - Part 3: Serialize computed {transition,animation}-timing-function using their specified values. r=birtles (67b033f452)
- Bug 1198708 - Part 4: Don't include start/end keyword in serialized specified {transition,animation}-timing-function value if it was omitted. r=birtles (e1b4225025)
- Bug 1198708 - Part 5: Add method to serialize a ComputedTimingFunction. r=birtles (c48edd3c1c)
- Bug 1198708 - Part 6: Implement KeyframeEffectReadOnly.getFrames(). r=birtles,bzbarsky (9cc9001e8d)
- Bug 1198708 - Part 7: Tests. r=birtles (8668bdbed3)
- Bug 1206569 - Part 4: Add method to get a CSS property's IDL name. r=bzbarsky (f9d94c27e4)
- Bug 1207028 - Add method to get a CSS property's sorted order position based on its IDL name. r=bzbarsky (a856d46e67)
- Bug 1188095 - Don't pause media elements on 'graphene'; r=baku (aae8063137)
- Bug 1111201: Check for OOM when calling an asm.js function with new; r=evilpie (e5973dd6b8)
- Bug 1178793 - Throw on OOB atomics access, interpreter+Ion. r=luke (d974def281)
- Bug 1084248 - no undefined behavior, take 2. r=waldo (0c0c00f90f)
- Bug 1084248 - safe for races, take 2. r=waldo (85629fd1e6)
2022-09-01 10:03:18 +08:00

123 lines
3.0 KiB
C++

/* -*- 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 NS_SMILKEYSPLINE_H_
#define NS_SMILKEYSPLINE_H_
#include "mozilla/ArrayUtils.h"
#include "mozilla/PodOperations.h"
/**
* Utility class to provide scaling defined in a keySplines element.
*/
class nsSMILKeySpline
{
public:
nsSMILKeySpline() { /* caller must call Init later */ }
/**
* Creates a new key spline control point description.
*
* aX1, etc. are the x1, y1, x2, y2 cubic Bezier control points as defined by
* SMILANIM 3.2.3. They must each be in the range 0.0 <= x <= 1.0
*/
nsSMILKeySpline(double aX1, double aY1,
double aX2, double aY2)
{
Init(aX1, aY1, aX2, aY2);
}
double X1() const { return mX1; }
double Y1() const { return mY1; }
double X2() const { return mX2; }
double Y2() const { return mY2; }
void Init(double aX1, double aY1,
double aX2, double aY2);
/**
* Gets the output (y) value for an input (x).
*
* @param aX The input x value. A floating-point number between 0 and
* 1 (inclusive).
*/
double GetSplineValue(double aX) const;
void GetSplineDerivativeValues(double aX, double& aDX, double& aDY) const;
bool operator==(const nsSMILKeySpline& aOther) const {
return mX1 == aOther.mX1 &&
mY1 == aOther.mY1 &&
mX2 == aOther.mX2 &&
mY2 == aOther.mY2;
}
bool operator!=(const nsSMILKeySpline& aOther) const {
return !(*this == aOther);
}
int32_t Compare(const nsSMILKeySpline& aRhs) const {
if (mX1 != aRhs.mX1) return mX1 < aRhs.mX1 ? -1 : 1;
if (mY1 != aRhs.mY1) return mY1 < aRhs.mY1 ? -1 : 1;
if (mX2 != aRhs.mX2) return mX2 < aRhs.mX2 ? -1 : 1;
if (mY2 != aRhs.mY2) return mY2 < aRhs.mY2 ? -1 : 1;
return 0;
}
private:
void
CalcSampleValues();
/**
* Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
*/
static double
CalcBezier(double aT, double aA1, double aA2);
/**
* Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
*/
static double
GetSlope(double aT, double aA1, double aA2);
double
GetTForX(double aX) const;
double
NewtonRaphsonIterate(double aX, double aGuessT) const;
double
BinarySubdivide(double aX, double aA, double aB) const;
static double
A(double aA1, double aA2)
{
return 1.0 - 3.0 * aA2 + 3.0 * aA1;
}
static double
B(double aA1, double aA2)
{
return 3.0 * aA2 - 6.0 * aA1;
}
static double
C(double aA1)
{
return 3.0 * aA1;
}
double mX1;
double mY1;
double mX2;
double mY2;
enum { kSplineTableSize = 11 };
double mSampleValues[kSplineTableSize];
static const double kSampleStepSize;
};
#endif // NS_SMILKEYSPLINE_H_