--- a/layout/style/StyleAnimationValue.cpp
+++ b/layout/style/StyleAnimationValue.cpp
@@ -3326,26 +3326,22 @@ StyleAnimationValue::UncomputeValue(nsCS
if (!StyleAnimationValue::UncomputeValue(aProperty, aComputedValue, val)) {
return false;
}
val.AppendToString(aProperty, aSpecifiedValue, nsCSSValue::eNormalized);
return true;
}
-inline const void*
+template<typename T>
+inline const T&
StyleDataAtOffset(const void* aStyleStruct, ptrdiff_t aOffset)
{
- return reinterpret_cast<const char*>(aStyleStruct) + aOffset;
-}
-
-inline void*
-StyleDataAtOffset(void* aStyleStruct, ptrdiff_t aOffset)
-{
- return reinterpret_cast<char*>(aStyleStruct) + aOffset;
+ return *reinterpret_cast<const T*>(
+ reinterpret_cast<const uint8_t*>(aStyleStruct) + aOffset);
}
static void
SetCurrentOrActualColor(bool aIsForeground, nscolor aActualColor,
StyleAnimationValue& aComputedValue)
{
if (aIsForeground) {
aComputedValue.SetCurrentColorValue();
@@ -4209,18 +4205,18 @@ StyleAnimationValue::ExtractComputedValu
}
default:
MOZ_ASSERT(false, "missing property implementation");
return false;
};
return true;
case eStyleAnimType_Coord: {
- const nsStyleCoord& coord = *static_cast<const nsStyleCoord*>(
- StyleDataAtOffset(styleStruct, ssOffset));
+ const nsStyleCoord& coord =
+ StyleDataAtOffset<nsStyleCoord>(styleStruct, ssOffset);
if (nsCSSProps::PropHasFlags(aProperty, CSS_PROPERTY_NUMBERS_ARE_PIXELS) &&
coord.GetUnit() == eStyleUnit_Coord) {
// For SVG properties where number means the same thing as length,
// we want to animate them the same way. Normalize both to number
// since it has more accuracy (float vs nscoord).
aComputedValue.SetFloatValue(nsPresContext::
AppUnitsToFloatCSSPixels(coord.GetCoordValue()));
return true;
@@ -4233,18 +4229,18 @@ StyleAnimationValue::ExtractComputedValu
case eStyleAnimType_Sides_Left: {
static_assert(
NS_SIDE_TOP == eStyleAnimType_Sides_Top -eStyleAnimType_Sides_Top &&
NS_SIDE_RIGHT == eStyleAnimType_Sides_Right -eStyleAnimType_Sides_Top &&
NS_SIDE_BOTTOM == eStyleAnimType_Sides_Bottom-eStyleAnimType_Sides_Top &&
NS_SIDE_LEFT == eStyleAnimType_Sides_Left -eStyleAnimType_Sides_Top,
"box side constants out of sync with animation side constants");
- const nsStyleCoord &coord = static_cast<const nsStyleSides*>(
- StyleDataAtOffset(styleStruct, ssOffset))->
+ const nsStyleCoord &coord =
+ StyleDataAtOffset<nsStyleSides>(styleStruct, ssOffset).
Get(mozilla::css::Side(animType - eStyleAnimType_Sides_Top));
return StyleCoordToValue(coord, aComputedValue);
}
case eStyleAnimType_Corner_TopLeft:
case eStyleAnimType_Corner_TopRight:
case eStyleAnimType_Corner_BottomRight:
case eStyleAnimType_Corner_BottomLeft: {
static_assert(
@@ -4253,55 +4249,55 @@ StyleAnimationValue::ExtractComputedValu
NS_CORNER_TOP_RIGHT == eStyleAnimType_Corner_TopRight -
eStyleAnimType_Corner_TopLeft &&
NS_CORNER_BOTTOM_RIGHT == eStyleAnimType_Corner_BottomRight -
eStyleAnimType_Corner_TopLeft &&
NS_CORNER_BOTTOM_LEFT == eStyleAnimType_Corner_BottomLeft -
eStyleAnimType_Corner_TopLeft,
"box corner constants out of sync with animation corner constants");
- const nsStyleCorners *corners = static_cast<const nsStyleCorners*>(
- StyleDataAtOffset(styleStruct, ssOffset));
+ const nsStyleCorners& corners =
+ StyleDataAtOffset<nsStyleCorners>(styleStruct, ssOffset);
uint8_t fullCorner = animType - eStyleAnimType_Corner_TopLeft;
const nsStyleCoord &horiz =
- corners->Get(NS_FULL_TO_HALF_CORNER(fullCorner, false));
+ corners.Get(NS_FULL_TO_HALF_CORNER(fullCorner, false));
const nsStyleCoord &vert =
- corners->Get(NS_FULL_TO_HALF_CORNER(fullCorner, true));
+ corners.Get(NS_FULL_TO_HALF_CORNER(fullCorner, true));
nsAutoPtr<nsCSSValuePair> pair(new nsCSSValuePair);
if (!StyleCoordToCSSValue(horiz, pair->mXValue) ||
!StyleCoordToCSSValue(vert, pair->mYValue)) {
return false;
}
aComputedValue.SetAndAdoptCSSValuePairValue(pair.forget(),
eUnit_CSSValuePair);
return true;
}
case eStyleAnimType_nscoord:
- aComputedValue.SetCoordValue(*static_cast<const nscoord*>(
- StyleDataAtOffset(styleStruct, ssOffset)));
+ aComputedValue.SetCoordValue(
+ StyleDataAtOffset<nscoord>(styleStruct, ssOffset));
return true;
case eStyleAnimType_float:
- aComputedValue.SetFloatValue(*static_cast<const float*>(
- StyleDataAtOffset(styleStruct, ssOffset)));
+ aComputedValue.SetFloatValue(
+ StyleDataAtOffset<float>(styleStruct, ssOffset));
if (aProperty == eCSSProperty_font_size_adjust &&
aComputedValue.GetFloatValue() == -1.0f) {
// In nsStyleFont, we set mFont.sizeAdjust to -1.0 to represent
// font-size-adjust: none. Here, we have to treat this as a keyword
// instead of a float value, to make sure we don't end up doing
// interpolation with it.
aComputedValue.SetNoneValue();
}
return true;
case eStyleAnimType_Color:
- aComputedValue.SetColorValue(*static_cast<const nscolor*>(
- StyleDataAtOffset(styleStruct, ssOffset)));
+ aComputedValue.SetColorValue(
+ StyleDataAtOffset<nscolor>(styleStruct, ssOffset));
return true;
case eStyleAnimType_PaintServer: {
- const nsStyleSVGPaint &paint = *static_cast<const nsStyleSVGPaint*>(
- StyleDataAtOffset(styleStruct, ssOffset));
+ const nsStyleSVGPaint& paint =
+ StyleDataAtOffset<nsStyleSVGPaint>(styleStruct, ssOffset);
if (paint.mType == eStyleSVGPaintType_Color) {
aComputedValue.SetColorValue(paint.mPaint.mColor);
return true;
}
if (paint.mType == eStyleSVGPaintType_Server) {
if (!paint.mPaint.mPaintServer) {
NS_WARNING("Null paint server");
return false;
@@ -4330,19 +4326,18 @@ StyleAnimationValue::ExtractComputedValu
return true;
}
MOZ_ASSERT(paint.mType == eStyleSVGPaintType_None,
"Unexpected SVG paint type");
aComputedValue.SetNoneValue();
return true;
}
case eStyleAnimType_Shadow: {
- const nsCSSShadowArray *shadowArray =
- *static_cast<const RefPtr<nsCSSShadowArray>*>(
- StyleDataAtOffset(styleStruct, ssOffset));
+ const nsCSSShadowArray* shadowArray =
+ StyleDataAtOffset<RefPtr<nsCSSShadowArray>>(styleStruct, ssOffset);
if (!shadowArray) {
aComputedValue.SetAndAdoptCSSValueListValue(nullptr, eUnit_Shadow);
return true;
}
nsAutoPtr<nsCSSValueList> result;
nsCSSValueList **resultTail = getter_Transfers(result);
for (uint32_t i = 0, i_end = shadowArray->Length(); i < i_end; ++i) {
AppendCSSShadowValue(shadowArray->ShadowAt(i), resultTail);