Bug 1292447: part 2 - Get border-*-radius and outline-radius-* props value resolved to computed value.
MozReview-Commit-ID: L05tISAdu0q
--- a/layout/style/nsCSSPropList.h
+++ b/layout/style/nsCSSPropList.h
@@ -806,32 +806,30 @@ CSS_PROP_BORDER(
eStyleAnimType_None)
CSS_PROP_BORDER(
border-bottom-left-radius,
border_bottom_left_radius,
BorderBottomLeftRadius,
CSS_PROPERTY_PARSE_FUNCTION |
CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
CSS_PROPERTY_VALUE_NONNEGATIVE |
- CSS_PROPERTY_STORES_CALC |
- CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+ CSS_PROPERTY_STORES_CALC,
"",
0,
nullptr,
offsetof(nsStyleBorder, mBorderRadius),
eStyleAnimType_Corner_BottomLeft)
CSS_PROP_BORDER(
border-bottom-right-radius,
border_bottom_right_radius,
BorderBottomRightRadius,
CSS_PROPERTY_PARSE_FUNCTION |
CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
CSS_PROPERTY_VALUE_NONNEGATIVE |
- CSS_PROPERTY_STORES_CALC |
- CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+ CSS_PROPERTY_STORES_CALC,
"",
0,
nullptr,
offsetof(nsStyleBorder, mBorderRadius),
eStyleAnimType_Corner_BottomRight)
CSS_PROP_BORDER(
border-bottom-style,
border_bottom_style,
@@ -1208,32 +1206,30 @@ CSS_PROP_BORDER(
eStyleAnimType_None)
CSS_PROP_BORDER(
border-top-left-radius,
border_top_left_radius,
BorderTopLeftRadius,
CSS_PROPERTY_PARSE_FUNCTION |
CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
CSS_PROPERTY_VALUE_NONNEGATIVE |
- CSS_PROPERTY_STORES_CALC |
- CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+ CSS_PROPERTY_STORES_CALC,
"",
0,
nullptr,
offsetof(nsStyleBorder, mBorderRadius),
eStyleAnimType_Corner_TopLeft)
CSS_PROP_BORDER(
border-top-right-radius,
border_top_right_radius,
BorderTopRightRadius,
CSS_PROPERTY_PARSE_FUNCTION |
CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
CSS_PROPERTY_VALUE_NONNEGATIVE |
- CSS_PROPERTY_STORES_CALC |
- CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+ CSS_PROPERTY_STORES_CALC,
"",
0,
nullptr,
offsetof(nsStyleBorder, mBorderRadius),
eStyleAnimType_Corner_TopRight)
CSS_PROP_BORDER(
border-top-style,
border_top_style,
@@ -3141,57 +3137,53 @@ CSS_PROP_SHORTHAND(
CSS_PROPERTY_PARSE_FUNCTION,
"")
CSS_PROP_OUTLINE(
-moz-outline-radius-bottomleft,
_moz_outline_radius_bottomLeft,
CSS_PROP_DOMPROP_PREFIXED(OutlineRadiusBottomleft),
CSS_PROPERTY_PARSE_FUNCTION |
CSS_PROPERTY_VALUE_NONNEGATIVE |
- CSS_PROPERTY_STORES_CALC |
- CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+ CSS_PROPERTY_STORES_CALC,
"",
0,
nullptr,
offsetof(nsStyleOutline, mOutlineRadius),
eStyleAnimType_Corner_BottomLeft)
CSS_PROP_OUTLINE(
-moz-outline-radius-bottomright,
_moz_outline_radius_bottomRight,
CSS_PROP_DOMPROP_PREFIXED(OutlineRadiusBottomright),
CSS_PROPERTY_PARSE_FUNCTION |
CSS_PROPERTY_VALUE_NONNEGATIVE |
- CSS_PROPERTY_STORES_CALC |
- CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+ CSS_PROPERTY_STORES_CALC,
"",
0,
nullptr,
offsetof(nsStyleOutline, mOutlineRadius),
eStyleAnimType_Corner_BottomRight)
CSS_PROP_OUTLINE(
-moz-outline-radius-topleft,
_moz_outline_radius_topLeft,
CSS_PROP_DOMPROP_PREFIXED(OutlineRadiusTopleft),
CSS_PROPERTY_PARSE_FUNCTION |
CSS_PROPERTY_VALUE_NONNEGATIVE |
- CSS_PROPERTY_STORES_CALC |
- CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+ CSS_PROPERTY_STORES_CALC,
"",
0,
nullptr,
offsetof(nsStyleOutline, mOutlineRadius),
eStyleAnimType_Corner_TopLeft)
CSS_PROP_OUTLINE(
-moz-outline-radius-topright,
_moz_outline_radius_topRight,
CSS_PROP_DOMPROP_PREFIXED(OutlineRadiusTopright),
CSS_PROPERTY_PARSE_FUNCTION |
CSS_PROPERTY_VALUE_NONNEGATIVE |
- CSS_PROPERTY_STORES_CALC |
- CSS_PROPERTY_GETCS_NEEDS_LAYOUT_FLUSH,
+ CSS_PROPERTY_STORES_CALC,
"",
0,
nullptr,
offsetof(nsStyleOutline, mOutlineRadius),
eStyleAnimType_Corner_TopRight)
CSS_PROP_OUTLINE(
outline-style,
outline_style,
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -3064,38 +3064,38 @@ nsComputedDOMStyle::DoGetBorderTopColors
{
return GetBorderColorsFor(NS_SIDE_TOP);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetBorderBottomLeftRadius()
{
return GetEllipseRadii(StyleBorder()->mBorderRadius,
- NS_CORNER_BOTTOM_LEFT, true);
+ NS_CORNER_BOTTOM_LEFT);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetBorderBottomRightRadius()
{
return GetEllipseRadii(StyleBorder()->mBorderRadius,
- NS_CORNER_BOTTOM_RIGHT, true);
+ NS_CORNER_BOTTOM_RIGHT);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetBorderTopLeftRadius()
{
return GetEllipseRadii(StyleBorder()->mBorderRadius,
- NS_CORNER_TOP_LEFT, true);
+ NS_CORNER_TOP_LEFT);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetBorderTopRightRadius()
{
return GetEllipseRadii(StyleBorder()->mBorderRadius,
- NS_CORNER_TOP_RIGHT, true);
+ NS_CORNER_TOP_RIGHT);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetBorderTopWidth()
{
return GetBorderWidthFor(NS_SIDE_TOP);
}
@@ -3323,86 +3323,59 @@ nsComputedDOMStyle::DoGetOutlineOffset()
val->SetAppUnits(StyleOutline()->mOutlineOffset);
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOutlineRadiusBottomLeft()
{
return GetEllipseRadii(StyleOutline()->mOutlineRadius,
- NS_CORNER_BOTTOM_LEFT, false);
+ NS_CORNER_BOTTOM_LEFT);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOutlineRadiusBottomRight()
{
return GetEllipseRadii(StyleOutline()->mOutlineRadius,
- NS_CORNER_BOTTOM_RIGHT, false);
+ NS_CORNER_BOTTOM_RIGHT);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOutlineRadiusTopLeft()
{
return GetEllipseRadii(StyleOutline()->mOutlineRadius,
- NS_CORNER_TOP_LEFT, false);
+ NS_CORNER_TOP_LEFT);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOutlineRadiusTopRight()
{
return GetEllipseRadii(StyleOutline()->mOutlineRadius,
- NS_CORNER_TOP_RIGHT, false);
+ NS_CORNER_TOP_RIGHT);
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOutlineColor()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
SetValueFromComplexColor(val, StyleOutline()->mOutlineColor);
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::GetEllipseRadii(const nsStyleCorners& aRadius,
- uint8_t aFullCorner,
- bool aIsBorder) // else outline
-{
- nsStyleCoord radiusX, radiusY;
- if (mInnerFrame && aIsBorder) {
- nscoord radii[8];
- mInnerFrame->GetBorderRadii(radii);
- radiusX.SetCoordValue(radii[NS_FULL_TO_HALF_CORNER(aFullCorner, false)]);
- radiusY.SetCoordValue(radii[NS_FULL_TO_HALF_CORNER(aFullCorner, true)]);
- } else {
- radiusX = aRadius.Get(NS_FULL_TO_HALF_CORNER(aFullCorner, false));
- radiusY = aRadius.Get(NS_FULL_TO_HALF_CORNER(aFullCorner, true));
-
- if (mInnerFrame) {
- // We need to convert to absolute coordinates before doing the
- // equality check below.
- nscoord v;
-
- v = StyleCoordToNSCoord(radiusX,
- &nsComputedDOMStyle::GetFrameBorderRectWidth,
- 0, true);
- radiusX.SetCoordValue(v);
-
- v = StyleCoordToNSCoord(radiusY,
- &nsComputedDOMStyle::GetFrameBorderRectHeight,
- 0, true);
- radiusY.SetCoordValue(v);
- }
- }
+ uint8_t aFullCorner)
+{
+ nsStyleCoord radiusX = aRadius.Get(NS_FULL_TO_HALF_CORNER(aFullCorner, false));
+ nsStyleCoord radiusY = aRadius.Get(NS_FULL_TO_HALF_CORNER(aFullCorner, true));
// for compatibility, return a single value if X and Y are equal
if (radiusX == radiusY) {
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
-
SetValueToCoord(val, radiusX, true);
-
return val.forget();
}
RefPtr<nsDOMCSSValueList> valueList = GetROCSSValueList(false);
RefPtr<nsROCSSPrimitiveValue> valX = new nsROCSSPrimitiveValue;
RefPtr<nsROCSSPrimitiveValue> valY = new nsROCSSPrimitiveValue;
--- a/layout/style/nsComputedDOMStyle.h
+++ b/layout/style/nsComputedDOMStyle.h
@@ -145,18 +145,17 @@ private:
#define STYLE_STRUCT(name_, checkdata_cb_) \
const nsStyle##name_ * Style##name_() { \
return mStyleContext->Style##name_(); \
}
#include "nsStyleStructList.h"
#undef STYLE_STRUCT
already_AddRefed<CSSValue> GetEllipseRadii(const nsStyleCorners& aRadius,
- uint8_t aFullCorner,
- bool aIsBorder); // else outline
+ uint8_t aFullCorner);
already_AddRefed<CSSValue> GetOffsetWidthFor(mozilla::css::Side aSide);
already_AddRefed<CSSValue> GetAbsoluteOffset(mozilla::css::Side aSide);
already_AddRefed<CSSValue> GetRelativeOffset(mozilla::css::Side aSide);
already_AddRefed<CSSValue> GetStickyOffset(mozilla::css::Side aSide);