Bug 1437272 - Split nsTimingFunction into an independent header file. r?birtles
So that we don't need to include nsStyleStruct.h in gfx any more.
MozReview-Commit-ID: 6nOaAbssLCz
--- a/dom/animation/ComputedTimingFunction.h
+++ b/dom/animation/ComputedTimingFunction.h
@@ -3,17 +3,17 @@
/* 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
+#include "nsTimingFunction.h"
namespace mozilla {
class ComputedTimingFunction
{
public:
static ComputedTimingFunction
CubicBezier(double x1, double y1, double x2, double y2)
--- a/gfx/layers/Layers.cpp
+++ b/gfx/layers/Layers.cpp
@@ -38,17 +38,16 @@
#include "mozilla/layers/LayersMessages.h" // for TransformFunction, etc
#include "mozilla/layers/LayersTypes.h" // for TextureDumpMode
#include "mozilla/layers/PersistentBufferProvider.h"
#include "mozilla/layers/ShadowLayers.h" // for ShadowableLayer
#include "nsAString.h"
#include "nsCSSValue.h" // for nsCSSValue::Array, etc
#include "nsDisplayList.h" // for nsDisplayItem
#include "nsPrintfCString.h" // for nsPrintfCString
-#include "nsStyleStruct.h" // for nsTimingFunction, etc
#include "protobuf/LayerScopePacket.pb.h"
#include "mozilla/Compression.h"
#include "TreeTraversal.h" // for ForEachNode
#include <list>
#include <set>
uint8_t gLayerManagerLayerBuilder;
--- a/gfx/layers/apz/src/AsyncPanZoomController.cpp
+++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp
@@ -67,17 +67,17 @@
#include "mozilla/FloatingPoint.h" // for FuzzyEquals*
#include "nsAlgorithm.h" // for clamped
#include "nsCOMPtr.h" // for already_AddRefed
#include "nsDebug.h" // for NS_WARNING
#include "nsIDOMWindowUtils.h" // for nsIDOMWindowUtils
#include "nsMathUtils.h" // for NS_hypot
#include "nsPoint.h" // for nsIntPoint
#include "nsStyleConsts.h"
-#include "nsStyleStruct.h" // for nsTimingFunction
+#include "nsTimingFunction.h"
#include "nsTArray.h" // for nsTArray, nsTArray_Impl, etc
#include "nsThreadUtils.h" // for NS_IsMainThread
#include "nsViewportInfo.h" // for kViewportMinScale, kViewportMaxScale
#include "prsystem.h" // for PR_GetPhysicalMemorySize
#include "SharedMemoryBasic.h" // for SharedMemoryBasic
#include "ScrollSnap.h" // for ScrollSnapUtils
#include "ScrollAnimationPhysics.h" // for ComputeAcceleratedWheelDelta
#include "WheelScrollAnimation.h"
--- a/gfx/layers/ipc/LayerAnimationUtils.cpp
+++ b/gfx/layers/ipc/LayerAnimationUtils.cpp
@@ -2,16 +2,17 @@
/* 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/. */
#include "LayerAnimationUtils.h"
#include "mozilla/ComputedTimingFunction.h" // For ComputedTimingFunction
#include "mozilla/layers/LayersMessages.h" // For TimingFunction etc.
+#include "nsTimingFunction.h"
namespace mozilla {
namespace layers {
/* static */ Maybe<ComputedTimingFunction>
AnimationUtils::TimingFunctionToComputedTimingFunction(
const TimingFunction& aTimingFunction)
{
--- a/layout/style/moz.build
+++ b/layout/style/moz.build
@@ -62,16 +62,17 @@ EXPORTS += [
'nsStyleContext.h',
'nsStyleContextInlines.h',
'nsStyleCoord.h',
'nsStyleStruct.h',
'nsStyleStructFwd.h',
'nsStyleStructInlines.h',
'nsStyleTransformMatrix.h',
'nsStyleUtil.h',
+ 'nsTimingFunction.h',
]
if CONFIG['MOZ_OLD_STYLE']:
EXPORTS += [
'nsCSSRuleProcessor.h',
'nsIStyleRule.h',
'nsIStyleRuleProcessor.h',
'nsMediaList.h',
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -26,16 +26,17 @@
#include "nsCoord.h"
#include "nsMargin.h"
#include "nsFont.h"
#include "nsStyleAutoArray.h"
#include "nsStyleCoord.h"
#include "nsStyleConsts.h"
#include "nsChangeHint.h"
#include "nsPresContext.h"
+#include "nsTimingFunction.h"
#include "nsCOMPtr.h"
#include "nsCOMArray.h"
#include "nsTArray.h"
#include "nsCSSValue.h"
#include "imgRequestProxy.h"
#include "Orientation.h"
#include "CounterStyleManager.h"
#include <cstddef> // offsetof()
@@ -2091,129 +2092,16 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt
}
bool IsVisibleOrCollapsed() const {
return ((mVisible == NS_STYLE_VISIBILITY_VISIBLE) ||
(mVisible == NS_STYLE_VISIBILITY_COLLAPSE));
}
};
-struct nsTimingFunction
-{
-
- enum class Type {
- Ease, // ease
- Linear, // linear
- EaseIn, // ease-in
- EaseOut, // ease-out
- EaseInOut, // ease-in-out
- StepStart, // step-start and steps(..., start)
- StepEnd, // step-end, steps(..., end) and steps(...)
- CubicBezier, // cubic-bezier()
- Frames, // frames()
- };
-
- // Whether the timing function type is represented by a spline,
- // and thus will have mFunc filled in.
- static bool IsSplineType(Type aType)
- {
- return aType != Type::StepStart &&
- aType != Type::StepEnd &&
- aType != Type::Frames;
- }
-
- explicit nsTimingFunction(int32_t aTimingFunctionType
- = NS_STYLE_TRANSITION_TIMING_FUNCTION_EASE)
- {
- AssignFromKeyword(aTimingFunctionType);
- }
-
- nsTimingFunction(float x1, float y1, float x2, float y2)
- : mType(Type::CubicBezier)
- {
- mFunc.mX1 = x1;
- mFunc.mY1 = y1;
- mFunc.mX2 = x2;
- mFunc.mY2 = y2;
- }
-
- enum class Keyword { Implicit, Explicit };
-
- nsTimingFunction(Type aType, uint32_t aStepsOrFrames)
- : mType(aType)
- {
- MOZ_ASSERT(mType == Type::StepStart ||
- mType == Type::StepEnd ||
- mType == Type::Frames,
- "wrong type");
- mStepsOrFrames = aStepsOrFrames;
- }
-
- nsTimingFunction(const nsTimingFunction& aOther)
- {
- *this = aOther;
- }
-
- Type mType;
- union {
- struct {
- float mX1;
- float mY1;
- float mX2;
- float mY2;
- } mFunc;
- struct {
- uint32_t mStepsOrFrames;
- };
- };
-
- nsTimingFunction&
- operator=(const nsTimingFunction& aOther)
- {
- if (&aOther == this) {
- return *this;
- }
-
- mType = aOther.mType;
-
- if (HasSpline()) {
- mFunc.mX1 = aOther.mFunc.mX1;
- mFunc.mY1 = aOther.mFunc.mY1;
- mFunc.mX2 = aOther.mFunc.mX2;
- mFunc.mY2 = aOther.mFunc.mY2;
- } else {
- mStepsOrFrames = aOther.mStepsOrFrames;
- }
-
- return *this;
- }
-
- bool operator==(const nsTimingFunction& aOther) const
- {
- if (mType != aOther.mType) {
- return false;
- }
- if (HasSpline()) {
- return mFunc.mX1 == aOther.mFunc.mX1 && mFunc.mY1 == aOther.mFunc.mY1 &&
- mFunc.mX2 == aOther.mFunc.mX2 && mFunc.mY2 == aOther.mFunc.mY2;
- }
- return mStepsOrFrames == aOther.mStepsOrFrames;
- }
-
- bool operator!=(const nsTimingFunction& aOther) const
- {
- return !(*this == aOther);
- }
-
- bool HasSpline() const { return IsSplineType(mType); }
-
-private:
- void AssignFromKeyword(int32_t aTimingFunctionType);
-};
-
namespace mozilla {
struct StyleTransition
{
StyleTransition() { /* leaves uninitialized; see also SetInitialValues */ }
explicit StyleTransition(const StyleTransition& aCopy);
void SetInitialValues();
new file mode 100644
--- /dev/null
+++ b/layout/style/nsTimingFunction.h
@@ -0,0 +1,124 @@
+/* -*- 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 nsTimingFunction_h
+#define nsTimingFunction_h
+
+#include "nsStyleConsts.h"
+
+struct nsTimingFunction
+{
+ enum class Type {
+ Ease, // ease
+ Linear, // linear
+ EaseIn, // ease-in
+ EaseOut, // ease-out
+ EaseInOut, // ease-in-out
+ StepStart, // step-start and steps(..., start)
+ StepEnd, // step-end, steps(..., end) and steps(...)
+ CubicBezier, // cubic-bezier()
+ Frames, // frames()
+ };
+
+ // Whether the timing function type is represented by a spline,
+ // and thus will have mFunc filled in.
+ static bool IsSplineType(Type aType)
+ {
+ return aType != Type::StepStart &&
+ aType != Type::StepEnd &&
+ aType != Type::Frames;
+ }
+
+ explicit nsTimingFunction(int32_t aTimingFunctionType
+ = NS_STYLE_TRANSITION_TIMING_FUNCTION_EASE)
+ {
+ AssignFromKeyword(aTimingFunctionType);
+ }
+
+ nsTimingFunction(float x1, float y1, float x2, float y2)
+ : mType(Type::CubicBezier)
+ {
+ mFunc.mX1 = x1;
+ mFunc.mY1 = y1;
+ mFunc.mX2 = x2;
+ mFunc.mY2 = y2;
+ }
+
+ enum class Keyword { Implicit, Explicit };
+
+ nsTimingFunction(Type aType, uint32_t aStepsOrFrames)
+ : mType(aType)
+ {
+ MOZ_ASSERT(mType == Type::StepStart ||
+ mType == Type::StepEnd ||
+ mType == Type::Frames,
+ "wrong type");
+ mStepsOrFrames = aStepsOrFrames;
+ }
+
+ nsTimingFunction(const nsTimingFunction& aOther)
+ {
+ *this = aOther;
+ }
+
+ Type mType;
+ union {
+ struct {
+ float mX1;
+ float mY1;
+ float mX2;
+ float mY2;
+ } mFunc;
+ struct {
+ uint32_t mStepsOrFrames;
+ };
+ };
+
+ nsTimingFunction&
+ operator=(const nsTimingFunction& aOther)
+ {
+ if (&aOther == this) {
+ return *this;
+ }
+
+ mType = aOther.mType;
+
+ if (HasSpline()) {
+ mFunc.mX1 = aOther.mFunc.mX1;
+ mFunc.mY1 = aOther.mFunc.mY1;
+ mFunc.mX2 = aOther.mFunc.mX2;
+ mFunc.mY2 = aOther.mFunc.mY2;
+ } else {
+ mStepsOrFrames = aOther.mStepsOrFrames;
+ }
+
+ return *this;
+ }
+
+ bool operator==(const nsTimingFunction& aOther) const
+ {
+ if (mType != aOther.mType) {
+ return false;
+ }
+ if (HasSpline()) {
+ return mFunc.mX1 == aOther.mFunc.mX1 && mFunc.mY1 == aOther.mFunc.mY1 &&
+ mFunc.mX2 == aOther.mFunc.mX2 && mFunc.mY2 == aOther.mFunc.mY2;
+ }
+ return mStepsOrFrames == aOther.mStepsOrFrames;
+ }
+
+ bool operator!=(const nsTimingFunction& aOther) const
+ {
+ return !(*this == aOther);
+ }
+
+ bool HasSpline() const { return IsSplineType(mType); }
+
+private:
+ void AssignFromKeyword(int32_t aTimingFunctionType);
+};
+
+#endif // nsTimingFunction_h