Bug 1261754 - Part 4: Move image-rendering from nsStyleSVG to nsStyleVisibility. r=dholbert
MozReview-Commit-ID: 4ymaZI7ycFK
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -6161,17 +6161,17 @@ nsLayoutUtils::GetGraphicsFilterForFrame
Filter defaultFilter = Filter::GOOD;
nsStyleContext *sc;
if (nsCSSRendering::IsCanvasFrame(aForFrame)) {
nsCSSRendering::FindBackground(aForFrame, &sc);
} else {
sc = aForFrame->StyleContext();
}
- switch (sc->StyleSVG()->mImageRendering) {
+ switch (sc->StyleVisibility()->mImageRendering) {
case NS_STYLE_IMAGE_RENDERING_OPTIMIZESPEED:
return Filter::POINT;
case NS_STYLE_IMAGE_RENDERING_OPTIMIZEQUALITY:
return Filter::LINEAR;
case NS_STYLE_IMAGE_RENDERING_CRISPEDGES:
return Filter::POINT;
default:
return defaultFilter;
--- a/layout/style/nsCSSPropList.h
+++ b/layout/style/nsCSSPropList.h
@@ -4034,25 +4034,25 @@ CSS_PROP_SVGRESET(
flood_opacity,
FloodOpacity,
CSS_PROPERTY_PARSE_VALUE,
"",
VARIANT_HN,
nullptr,
offsetof(nsStyleSVGReset, mFloodOpacity),
eStyleAnimType_float)
-CSS_PROP_SVG(
+CSS_PROP_VISIBILITY(
image-rendering,
image_rendering,
ImageRendering,
CSS_PROPERTY_PARSE_VALUE,
"",
VARIANT_HK,
kImageRenderingKTable,
- offsetof(nsStyleSVG, mImageRendering),
+ offsetof(nsStyleVisibility, mImageRendering),
eStyleAnimType_EnumU8)
CSS_PROP_SVGRESET(
lighting-color,
lighting_color,
LightingColor,
CSS_PROPERTY_PARSE_VALUE,
"",
VARIANT_HC,
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -5726,17 +5726,17 @@ nsComputedDOMStyle::DoGetDominantBaselin
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetImageRendering()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
val->SetIdent(
- nsCSSProps::ValueToKeywordEnum(StyleSVG()->mImageRendering,
+ nsCSSProps::ValueToKeywordEnum(StyleVisibility()->mImageRendering,
nsCSSProps::kImageRenderingKTable));
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetShapeRendering()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -6389,16 +6389,23 @@ nsRuleNode::ComputeVisibilityData(void*
// pointer-events: enum, inherit, initial
SetDiscrete(*aRuleData->ValueForPointerEvents(), visibility->mPointerEvents,
conditions,
SETDSC_ENUMERATED | SETDSC_UNSET_INHERIT,
parentVisibility->mPointerEvents,
NS_STYLE_POINTER_EVENTS_AUTO, 0, 0, 0, 0);
+ // image-rendering: enum, inherit
+ SetDiscrete(*aRuleData->ValueForImageRendering(),
+ visibility->mImageRendering, conditions,
+ SETDSC_ENUMERATED | SETDSC_UNSET_INHERIT,
+ parentVisibility->mImageRendering,
+ NS_STYLE_IMAGE_RENDERING_AUTO, 0, 0, 0, 0);
+
// writing-mode: enum, inherit, initial
SetDiscrete(*aRuleData->ValueForWritingMode(), visibility->mWritingMode,
conditions,
SETDSC_ENUMERATED | SETDSC_UNSET_INHERIT,
parentVisibility->mWritingMode,
NS_STYLE_WRITING_MODE_HORIZONTAL_TB, 0, 0, 0, 0);
// text-orientation: enum, inherit, initial
@@ -9206,23 +9213,16 @@ nsRuleNode::ComputeSVGData(void* aStartS
// fill-rule: enum, inherit, initial
SetDiscrete(*aRuleData->ValueForFillRule(),
svg->mFillRule, conditions,
SETDSC_ENUMERATED | SETDSC_UNSET_INHERIT,
parentSVG->mFillRule,
NS_STYLE_FILL_RULE_NONZERO, 0, 0, 0, 0);
- // image-rendering: enum, inherit
- SetDiscrete(*aRuleData->ValueForImageRendering(),
- svg->mImageRendering, conditions,
- SETDSC_ENUMERATED | SETDSC_UNSET_INHERIT,
- parentSVG->mImageRendering,
- NS_STYLE_IMAGE_RENDERING_AUTO, 0, 0, 0, 0);
-
// marker-end: url, none, inherit
const nsCSSValue* markerEndValue = aRuleData->ValueForMarkerEnd();
if (eCSSUnit_URL == markerEndValue->GetUnit()) {
svg->mMarkerEnd = markerEndValue->GetURLValue();
} else if (eCSSUnit_None == markerEndValue->GetUnit() ||
eCSSUnit_Initial == markerEndValue->GetUnit()) {
svg->mMarkerEnd = nullptr;
} else if (eCSSUnit_Inherit == markerEndValue->GetUnit() ||
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -924,17 +924,16 @@ nsStyleSVG::nsStyleSVG(StyleStructContex
mStrokeMiterlimit = 4.0f;
mStrokeOpacity = 1.0f;
mStrokeDasharrayLength = 0;
mClipRule = NS_STYLE_FILL_RULE_NONZERO;
mColorInterpolation = NS_STYLE_COLOR_INTERPOLATION_SRGB;
mColorInterpolationFilters = NS_STYLE_COLOR_INTERPOLATION_LINEARRGB;
mFillRule = NS_STYLE_FILL_RULE_NONZERO;
- mImageRendering = NS_STYLE_IMAGE_RENDERING_AUTO;
mPaintOrder = NS_STYLE_PAINT_ORDER_NORMAL;
mShapeRendering = NS_STYLE_SHAPE_RENDERING_AUTO;
mStrokeLinecap = NS_STYLE_STROKE_LINECAP_BUTT;
mStrokeLinejoin = NS_STYLE_STROKE_LINEJOIN_MITER;
mTextAnchor = NS_STYLE_TEXT_ANCHOR_START;
mTextRendering = NS_STYLE_TEXT_RENDERING_AUTO;
mFillOpacitySource = eStyleSVGOpacitySource_Normal;
mStrokeOpacitySource = eStyleSVGOpacitySource_Normal;
@@ -978,17 +977,16 @@ nsStyleSVG::nsStyleSVG(const nsStyleSVG&
mFillOpacity = aSource.mFillOpacity;
mStrokeMiterlimit = aSource.mStrokeMiterlimit;
mStrokeOpacity = aSource.mStrokeOpacity;
mClipRule = aSource.mClipRule;
mColorInterpolation = aSource.mColorInterpolation;
mColorInterpolationFilters = aSource.mColorInterpolationFilters;
mFillRule = aSource.mFillRule;
- mImageRendering = aSource.mImageRendering;
mPaintOrder = aSource.mPaintOrder;
mShapeRendering = aSource.mShapeRendering;
mStrokeLinecap = aSource.mStrokeLinecap;
mStrokeLinejoin = aSource.mStrokeLinejoin;
mTextAnchor = aSource.mTextAnchor;
mTextRendering = aSource.mTextRendering;
mFillOpacitySource = aSource.mFillOpacitySource;
mStrokeOpacitySource = aSource.mStrokeOpacitySource;
@@ -1069,17 +1067,16 @@ nsChangeHint nsStyleSVG::CalcDifference(
return hint; // we don't add anything else below
}
if ( mStrokeDashoffset != aOther.mStrokeDashoffset ||
mClipRule != aOther.mClipRule ||
mColorInterpolation != aOther.mColorInterpolation ||
mColorInterpolationFilters != aOther.mColorInterpolationFilters ||
mFillRule != aOther.mFillRule ||
- mImageRendering != aOther.mImageRendering ||
mPaintOrder != aOther.mPaintOrder ||
mShapeRendering != aOther.mShapeRendering ||
mStrokeDasharrayLength != aOther.mStrokeDasharrayLength ||
mFillOpacitySource != aOther.mFillOpacitySource ||
mStrokeOpacitySource != aOther.mStrokeOpacitySource ||
mStrokeDasharrayFromObject != aOther.mStrokeDasharrayFromObject ||
mStrokeDashoffsetFromObject != aOther.mStrokeDashoffsetFromObject ||
mStrokeWidthFromObject != aOther.mStrokeWidthFromObject) {
@@ -3250,28 +3247,30 @@ nsStyleVisibility::nsStyleVisibility(Sty
uint32_t bidiOptions = aContext.GetBidi();
if (GET_BIDI_OPTION_DIRECTION(bidiOptions) == IBMBIDI_TEXTDIRECTION_RTL)
mDirection = NS_STYLE_DIRECTION_RTL;
else
mDirection = NS_STYLE_DIRECTION_LTR;
mVisible = NS_STYLE_VISIBILITY_VISIBLE;
mPointerEvents = NS_STYLE_POINTER_EVENTS_AUTO;
+ mImageRendering = NS_STYLE_IMAGE_RENDERING_AUTO;
mWritingMode = NS_STYLE_WRITING_MODE_HORIZONTAL_TB;
mTextOrientation = NS_STYLE_TEXT_ORIENTATION_MIXED;
mColorAdjust = NS_STYLE_COLOR_ADJUST_ECONOMY;
}
nsStyleVisibility::nsStyleVisibility(const nsStyleVisibility& aSource)
{
MOZ_COUNT_CTOR(nsStyleVisibility);
mImageOrientation = aSource.mImageOrientation;
mDirection = aSource.mDirection;
mVisible = aSource.mVisible;
mPointerEvents = aSource.mPointerEvents;
+ mImageRendering = aSource.mImageRendering;
mWritingMode = aSource.mWritingMode;
mTextOrientation = aSource.mTextOrientation;
mColorAdjust = aSource.mColorAdjust;
}
nsChangeHint nsStyleVisibility::CalcDifference(const nsStyleVisibility& aOther) const
{
nsChangeHint hint = nsChangeHint(0);
@@ -3299,16 +3298,19 @@ nsChangeHint nsStyleVisibility::CalcDiff
}
if (mPointerEvents != aOther.mPointerEvents) {
// nsSVGPathGeometryFrame's mRect depends on stroke _and_ on the value
// of pointer-events. See nsSVGPathGeometryFrame::ReflowSVG's use of
// GetHitTestFlags. (Only a reflow, no visual change.)
NS_UpdateHint(hint, nsChangeHint_NeedReflow);
NS_UpdateHint(hint, nsChangeHint_NeedDirtyReflow); // XXX remove me: bug 876085
}
+ if (mImageRendering != aOther.mImageRendering) {
+ hint |= nsChangeHint_RepaintFrame;
+ }
if (mColorAdjust != aOther.mColorAdjust) {
// color-adjust only affects media where dynamic changes can't happen.
NS_UpdateHint(hint, nsChangeHint_NeutralChange);
}
}
return hint;
}
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -2172,16 +2172,17 @@ struct nsStyleVisibility
nsChangeHint_ReflowChangesSizeOrPosition |
nsChangeHint_ClearAncestorIntrinsics;
}
nsStyleImageOrientation mImageOrientation; // [inherited]
uint8_t mDirection; // [inherited] see nsStyleConsts.h NS_STYLE_DIRECTION_*
uint8_t mVisible; // [inherited]
uint8_t mPointerEvents; // [inherited] see nsStyleConsts.h
+ uint8_t mImageRendering; // [inherited] see nsStyleConsts.h
uint8_t mWritingMode; // [inherited] see nsStyleConsts.h
uint8_t mTextOrientation; // [inherited] see nsStyleConsts.h
uint8_t mColorAdjust; // [inherited] see nsStyleConsts.h
bool IsVisible() const {
return (mVisible == NS_STYLE_VISIBILITY_VISIBLE);
}
@@ -3235,17 +3236,16 @@ struct nsStyleSVG
float mStrokeMiterlimit; // [inherited]
float mStrokeOpacity; // [inherited]
uint32_t mStrokeDasharrayLength;
uint8_t mClipRule; // [inherited]
uint8_t mColorInterpolation; // [inherited] see nsStyleConsts.h
uint8_t mColorInterpolationFilters; // [inherited] see nsStyleConsts.h
uint8_t mFillRule; // [inherited] see nsStyleConsts.h
- uint8_t mImageRendering; // [inherited] see nsStyleConsts.h
uint8_t mPaintOrder; // [inherited] see nsStyleConsts.h
uint8_t mShapeRendering; // [inherited] see nsStyleConsts.h
uint8_t mStrokeLinecap; // [inherited] see nsStyleConsts.h
uint8_t mStrokeLinejoin; // [inherited] see nsStyleConsts.h
uint8_t mTextAnchor; // [inherited] see nsStyleConsts.h
uint8_t mTextRendering; // [inherited] see nsStyleConsts.h
// In SVG glyphs, whether we inherit fill or stroke opacity from the outer