nsresult nsCSSFilterInstance::SetAttributesForDropShadow(FilterPrimitiveDescription& aDescr) { nsCSSShadowArray* shadows = mFilter.GetDropShadow(); if (!shadows || shadows->Length() != 1) { NS_NOTREACHED("Exactly one drop shadow should have been parsed."); return NS_ERROR_FAILURE; } nsCSSShadowItem* shadow = shadows->ShadowAt(0); // Set drop shadow blur radius. Size radiusInFilterSpace = BlurRadiusToFilterSpace(shadow->mRadius); aDescr.Attributes().Set(eDropShadowStdDeviation, radiusInFilterSpace); // Set offset. IntPoint offsetInFilterSpace = OffsetToFilterSpace(shadow->mXOffset, shadow->mYOffset); aDescr.Attributes().Set(eDropShadowOffset, offsetInFilterSpace); // Set color. If unspecified, use the CSS color property. nscolor shadowColor = shadow->mHasColor ? shadow->mColor : mTargetFrame->StyleColor()->mColor; aDescr.Attributes().Set(eDropShadowColor, ToAttributeColor(shadowColor)); return NS_OK; }
nsresult nsCSSFilterInstance::SetAttributesForSepia(FilterPrimitiveDescription& aDescr) { // Set color matrix type. aDescr.Attributes().Set(eColorMatrixType, (uint32_t)SVG_FECOLORMATRIX_TYPE_SEPIA); // Set color matrix values. const nsStyleCoord& styleValue = mFilter.GetFilterParameter(); float value = ClampFactor(styleValue.GetFactorOrPercentValue()); aDescr.Attributes().Set(eColorMatrixValues, &value, 1); return NS_OK; }
nsresult nsCSSFilterInstance::SetAttributesForHueRotate(FilterPrimitiveDescription& aDescr) { // Set color matrix type. aDescr.Attributes().Set(eColorMatrixType, (uint32_t)SVG_FECOLORMATRIX_TYPE_HUE_ROTATE); // Set color matrix values. const nsStyleCoord& styleValue = mFilter.GetFilterParameter(); float value = styleValue.GetAngleValueInDegrees(); aDescr.Attributes().Set(eColorMatrixValues, &value, 1); return NS_OK; }
nsresult nsCSSFilterInstance::SetAttributesForBlur(FilterPrimitiveDescription& aDescr) { const nsStyleCoord& radiusInFrameSpace = mFilter.GetFilterParameter(); if (radiusInFrameSpace.GetUnit() != eStyleUnit_Coord) { NS_NOTREACHED("unexpected unit"); return NS_ERROR_FAILURE; } Size radiusInFilterSpace = BlurRadiusToFilterSpace(radiusInFrameSpace.GetCoordValue()); aDescr.Attributes().Set(eGaussianBlurStdDeviation, radiusInFilterSpace); return NS_OK; }