void StyleBuilderFunctions::applyValueCSSPropertyWebkitWritingMode(StyleResolverState& state, CSSValue* value) { state.setWritingMode(*toCSSPrimitiveValue(value)); }
void StyleBuilderFunctions::applyInitialCSSPropertyWebkitTextEmphasisStyle(StyleResolverState& state) { state.style()->setTextEmphasisFill(RenderStyle::initialTextEmphasisFill()); state.style()->setTextEmphasisMark(RenderStyle::initialTextEmphasisMark()); state.style()->setTextEmphasisCustomMark(RenderStyle::initialTextEmphasisCustomMark()); }
void StyleBuilderFunctions::applyValueCSSPropertyWebkitTextOrientation(StyleResolverState& state, CSSValue* value) { if (value->isPrimitiveValue()) state.setTextOrientation(*toCSSPrimitiveValue(value)); }
void StyleBuilderFunctions::applyValueCSSPropertyTransform(StyleResolverState& state, CSSValue* value) { TransformOperations operations; TransformBuilder::createTransformOperations(value, state.cssToLengthConversionData(), operations); state.style()->setTransform(operations); }
void StyleBuilderFunctions::applyValueCSSPropertyWebkitBorderImage(StyleResolverState& state, CSSValue* value) { NinePieceImage image; state.styleMap().mapNinePieceImage(state.style(), CSSPropertyWebkitBorderImage, value, image); state.style()->setBorderImage(image); }
void StyleBuilderFunctions::applyInheritCSSPropertyOutlineStyle(StyleResolverState& state) { state.style()->setOutlineStyleIsAuto(state.parentStyle()->outlineStyleIsAuto()); state.style()->setOutlineStyle(state.parentStyle()->outlineStyle()); }
void StyleBuilderFunctions::applyInheritCSSPropertyTextIndent(StyleResolverState& state) { state.style()->setTextIndent(state.parentStyle()->textIndent()); state.style()->setTextIndentLine(state.parentStyle()->textIndentLine()); state.style()->setTextIndentType(state.parentStyle()->textIndentType()); }
// FIXME: Generate this function. void AnimatedStyleBuilder::applyProperty(CSSPropertyID property, StyleResolverState& state, const AnimatableValue* value) { ASSERT(CSSAnimations::isAnimatableProperty(property)); if (value->isUnknown()) { StyleBuilder::applyProperty(property, state, toAnimatableUnknown(value)->toCSSValue().get()); return; } RenderStyle* style = state.style(); switch (property) { case CSSPropertyBackgroundColor: style->setBackgroundColor(toAnimatableColor(value)->color()); style->setVisitedLinkBackgroundColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBackgroundImage: setOnFillLayers<CSSPropertyBackgroundImage>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyBackgroundPositionX: setOnFillLayers<CSSPropertyBackgroundPositionX>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyBackgroundPositionY: setOnFillLayers<CSSPropertyBackgroundPositionY>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyBackgroundSize: setOnFillLayers<CSSPropertyBackgroundSize>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyBaselineShift: style->setBaselineShiftValue(toAnimatableSVGLength(value)->toSVGLength()); return; case CSSPropertyBorderBottomColor: style->setBorderBottomColor(toAnimatableColor(value)->color()); style->setVisitedLinkBorderBottomColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBorderBottomLeftRadius: style->setBorderBottomLeftRadius(animatableValueToLengthSize(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderBottomRightRadius: style->setBorderBottomRightRadius(animatableValueToLengthSize(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderBottomWidth: style->setBorderBottomWidth(animatableValueRoundClampTo<unsigned>(value)); return; case CSSPropertyBorderImageOutset: style->setBorderImageOutset(animatableValueToBorderImageLengthBox(value, state)); return; case CSSPropertyBorderImageSlice: style->setBorderImageSlices(animatableValueToLengthBox(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderImageSource: style->setBorderImageSource(state.styleImage(property, toAnimatableImage(value)->toCSSValue())); return; case CSSPropertyBorderImageWidth: style->setBorderImageWidth(animatableValueToBorderImageLengthBox(value, state)); return; case CSSPropertyBorderLeftColor: style->setBorderLeftColor(toAnimatableColor(value)->color()); style->setVisitedLinkBorderLeftColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBorderLeftWidth: style->setBorderLeftWidth(animatableValueRoundClampTo<unsigned>(value)); return; case CSSPropertyBorderRightColor: style->setBorderRightColor(toAnimatableColor(value)->color()); style->setVisitedLinkBorderRightColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBorderRightWidth: style->setBorderRightWidth(animatableValueRoundClampTo<unsigned>(value)); return; case CSSPropertyBorderTopColor: style->setBorderTopColor(toAnimatableColor(value)->color()); style->setVisitedLinkBorderTopColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBorderTopLeftRadius: style->setBorderTopLeftRadius(animatableValueToLengthSize(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderTopRightRadius: style->setBorderTopRightRadius(animatableValueToLengthSize(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderTopWidth: style->setBorderTopWidth(animatableValueRoundClampTo<unsigned>(value)); return; case CSSPropertyBottom: style->setBottom(animatableValueToLength(value, state)); return; case CSSPropertyBoxShadow: case CSSPropertyWebkitBoxShadow: style->setBoxShadow(toAnimatableShadow(value)->shadowList()); return; case CSSPropertyClip: style->setClip(animatableValueToLengthBox(value, state)); style->setHasClip(true); return; case CSSPropertyColor: style->setColor(toAnimatableColor(value)->color()); style->setVisitedLinkColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyFillOpacity: style->setFillOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyFill: { const AnimatableSVGPaint* svgPaint = toAnimatableSVGPaint(value); style->accessSVGStyle()->setFillPaint(svgPaint->paintType(), svgPaint->color(), svgPaint->uri(), true, false); style->accessSVGStyle()->setFillPaint(svgPaint->visitedLinkPaintType(), svgPaint->visitedLinkColor(), svgPaint->visitedLinkURI(), false, true); } return; case CSSPropertyFlexGrow: style->setFlexGrow(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0)); return; case CSSPropertyFlexShrink: style->setFlexShrink(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0)); return; case CSSPropertyFlexBasis: style->setFlexBasis(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyFloodColor: style->setFloodColor(toAnimatableColor(value)->color()); return; case CSSPropertyFloodOpacity: style->setFloodOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyFontSize: style->setFontSize(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0)); return; case CSSPropertyFontWeight: style->setFontWeight(animatableValueToFontWeight(value)); return; case CSSPropertyHeight: style->setHeight(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyLeft: style->setLeft(animatableValueToLength(value, state)); return; case CSSPropertyLightingColor: style->setLightingColor(toAnimatableColor(value)->color()); return; case CSSPropertyLineHeight: if (value->isLength()) style->setLineHeight(animatableValueToLength(value, state, ValueRangeNonNegative)); else style->setLineHeight(Length(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0), Percent)); return; case CSSPropertyListStyleImage: style->setListStyleImage(state.styleImage(property, toAnimatableImage(value)->toCSSValue())); return; case CSSPropertyLetterSpacing: style->setLetterSpacing(clampTo<float>(toAnimatableDouble(value)->toDouble())); return; case CSSPropertyMarginBottom: style->setMarginBottom(animatableValueToLength(value, state)); return; case CSSPropertyMarginLeft: style->setMarginLeft(animatableValueToLength(value, state)); return; case CSSPropertyMarginRight: style->setMarginRight(animatableValueToLength(value, state)); return; case CSSPropertyMarginTop: style->setMarginTop(animatableValueToLength(value, state)); return; case CSSPropertyMaxHeight: style->setMaxHeight(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyMaxWidth: style->setMaxWidth(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyMinHeight: style->setMinHeight(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyMinWidth: style->setMinWidth(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyObjectPosition: style->setObjectPosition(animatableValueToLengthPoint(value, state)); return; case CSSPropertyOpacity: // Avoiding a value of 1 forces a layer to be created. style->setOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, nextafterf(1, 0))); return; case CSSPropertyOrphans: style->setOrphans(animatableValueRoundClampTo<unsigned short>(value, 1)); return; case CSSPropertyOutlineColor: style->setOutlineColor(toAnimatableColor(value)->color()); style->setVisitedLinkOutlineColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyOutlineOffset: style->setOutlineOffset(animatableValueRoundClampTo<int>(value)); return; case CSSPropertyOutlineWidth: style->setOutlineWidth(animatableValueRoundClampTo<unsigned short>(value)); return; case CSSPropertyPaddingBottom: style->setPaddingBottom(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyPaddingLeft: style->setPaddingLeft(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyPaddingRight: style->setPaddingRight(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyPaddingTop: style->setPaddingTop(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyRight: style->setRight(animatableValueToLength(value, state)); return; case CSSPropertyStrokeWidth: style->setStrokeWidth(animatableValueToNonNegativeSVGLength(value)); return; case CSSPropertyStopColor: style->setStopColor(toAnimatableColor(value)->color()); return; case CSSPropertyStopOpacity: style->setStopOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyStrokeDasharray: style->setStrokeDashArray(toAnimatableStrokeDasharrayList(value)->toSVGLengthList()); return; case CSSPropertyStrokeDashoffset: style->setStrokeDashOffset(toAnimatableSVGLength(value)->toSVGLength()); return; case CSSPropertyStrokeMiterlimit: style->setStrokeMiterLimit(clampTo<float>(toAnimatableDouble(value)->toDouble(), 1)); return; case CSSPropertyStrokeOpacity: style->setStrokeOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyStroke: { const AnimatableSVGPaint* svgPaint = toAnimatableSVGPaint(value); style->accessSVGStyle()->setStrokePaint(svgPaint->paintType(), svgPaint->color(), svgPaint->uri(), true, false); style->accessSVGStyle()->setStrokePaint(svgPaint->visitedLinkPaintType(), svgPaint->visitedLinkColor(), svgPaint->visitedLinkURI(), false, true); } return; case CSSPropertyTextDecorationColor: style->setTextDecorationColor(toAnimatableColor(value)->color()); style->setVisitedLinkTextDecorationColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyTextIndent: style->setTextIndent(animatableValueToLength(value, state)); return; case CSSPropertyTextShadow: style->setTextShadow(toAnimatableShadow(value)->shadowList()); return; case CSSPropertyTop: style->setTop(animatableValueToLength(value, state)); return; case CSSPropertyWebkitBackgroundSize: setOnFillLayers<CSSPropertyWebkitBackgroundSize>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyWebkitBorderHorizontalSpacing: style->setHorizontalBorderSpacing(animatableValueRoundClampTo<unsigned short>(value)); return; case CSSPropertyWebkitBorderVerticalSpacing: style->setVerticalBorderSpacing(animatableValueRoundClampTo<unsigned short>(value)); return; case CSSPropertyWebkitClipPath: style->setClipPath(toAnimatableClipPathOperation(value)->clipPathOperation()); return; case CSSPropertyWebkitColumnCount: style->setColumnCount(animatableValueRoundClampTo<unsigned short>(value, 1)); return; case CSSPropertyWebkitColumnGap: style->setColumnGap(clampTo(toAnimatableDouble(value)->toDouble(), 0)); return; case CSSPropertyWebkitColumnRuleColor: style->setColumnRuleColor(toAnimatableColor(value)->color()); style->setVisitedLinkColumnRuleColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyWebkitColumnWidth: style->setColumnWidth(clampTo(toAnimatableDouble(value)->toDouble(), std::numeric_limits<float>::epsilon())); return; case CSSPropertyWebkitColumnRuleWidth: style->setColumnRuleWidth(animatableValueRoundClampTo<unsigned short>(value)); return; case CSSPropertyWebkitFilter: style->setFilter(toAnimatableFilterOperations(value)->operations()); return; case CSSPropertyWebkitMaskBoxImageOutset: style->setMaskBoxImageOutset(animatableValueToBorderImageLengthBox(value, state)); return; case CSSPropertyWebkitMaskBoxImageSlice: style->setMaskBoxImageSlices(animatableValueToLengthBox(toAnimatableLengthBoxAndBool(value)->box(), state, ValueRangeNonNegative)); style->setMaskBoxImageSlicesFill(toAnimatableLengthBoxAndBool(value)->flag()); return; case CSSPropertyWebkitMaskBoxImageSource: style->setMaskBoxImageSource(state.styleImage(property, toAnimatableImage(value)->toCSSValue())); return; case CSSPropertyWebkitMaskBoxImageWidth: style->setMaskBoxImageWidth(animatableValueToBorderImageLengthBox(value, state)); return; case CSSPropertyWebkitMaskImage: setOnFillLayers<CSSPropertyWebkitMaskImage>(style->accessMaskLayers(), value, state); return; case CSSPropertyWebkitMaskPositionX: setOnFillLayers<CSSPropertyWebkitMaskPositionX>(style->accessMaskLayers(), value, state); return; case CSSPropertyWebkitMaskPositionY: setOnFillLayers<CSSPropertyWebkitMaskPositionY>(style->accessMaskLayers(), value, state); return; case CSSPropertyWebkitMaskSize: setOnFillLayers<CSSPropertyWebkitMaskSize>(style->accessMaskLayers(), value, state); return; case CSSPropertyPerspective: style->setPerspective(clampTo<float>(toAnimatableDouble(value)->toDouble())); return; case CSSPropertyPerspectiveOrigin: { ASSERT(RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled()); const AnimatableLengthPoint* animatableLengthPoint = toAnimatableLengthPoint(value); style->setPerspectiveOriginX(animatableValueToLength(animatableLengthPoint->x(), state)); style->setPerspectiveOriginY(animatableValueToLength(animatableLengthPoint->y(), state)); return; } case CSSPropertyWebkitPerspectiveOriginX: ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled()); style->setPerspectiveOriginX(animatableValueToLength(value, state)); return; case CSSPropertyWebkitPerspectiveOriginY: ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled()); style->setPerspectiveOriginY(animatableValueToLength(value, state)); return; case CSSPropertyShapeOutside: style->setShapeOutside(toAnimatableShapeValue(value)->shapeValue()); return; case CSSPropertyShapeMargin: style->setShapeMargin(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyShapeImageThreshold: style->setShapeImageThreshold(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyWebkitTextStrokeColor: style->setTextStrokeColor(toAnimatableColor(value)->color()); style->setVisitedLinkTextStrokeColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyTransform: { const TransformOperations& operations = toAnimatableTransform(value)->transformOperations(); // FIXME: This normalization (handling of 'none') should be performed at input in AnimatableValueFactory. style->setTransform(operations.size() ? operations : TransformOperations(true)); return; } case CSSPropertyTransformOrigin: { ASSERT(RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled()); const AnimatableLengthPoint3D* animatableLengthPoint3D = toAnimatableLengthPoint3D(value); style->setTransformOriginX(animatableValueToLength(animatableLengthPoint3D->x(), state)); style->setTransformOriginY(animatableValueToLength(animatableLengthPoint3D->y(), state)); style->setTransformOriginZ(clampTo<float>(toAnimatableDouble(animatableLengthPoint3D->z())->toDouble())); return; } case CSSPropertyWebkitTransformOriginX: ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled()); style->setTransformOriginX(animatableValueToLength(value, state)); return; case CSSPropertyWebkitTransformOriginY: ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled()); style->setTransformOriginY(animatableValueToLength(value, state)); return; case CSSPropertyWebkitTransformOriginZ: ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled()); style->setTransformOriginZ(toAnimatableDouble(value)->toDouble()); return; case CSSPropertyWidows: style->setWidows(animatableValueRoundClampTo<unsigned short>(value, 1)); return; case CSSPropertyWidth: style->setWidth(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyWordSpacing: style->setWordSpacing(clampTo<float>(toAnimatableDouble(value)->toDouble())); return; case CSSPropertyVerticalAlign: style->setVerticalAlignLength(animatableValueToLength(value, state)); return; case CSSPropertyVisibility: style->setVisibility(toAnimatableVisibility(value)->visibility()); return; case CSSPropertyZIndex: style->setZIndex(animatableValueRoundClampTo<int>(value)); return; case CSSPropertyZoom: style->setZoom(clampTo<float>(toAnimatableDouble(value)->toDouble(), std::numeric_limits<float>::denorm_min())); return; default: ASSERT_NOT_REACHED(); } }
static Length convertToLength(const StyleResolverState& state, CSSPrimitiveValue* value) { if (!value) return Length(0, Fixed); return value->convertToLength(state.cssToLengthConversionData()); }
void StyleBuilderFunctions::applyValueCSSPropertyListStyleImage(StyleResolverState& state, CSSValue* value) { state.style()->setListStyleImage(state.styleImage(CSSPropertyListStyleImage, value)); }
void StyleBuilderFunctions::applyValueCSSPropertySize(StyleResolverState& state, CSSValue* value) { state.style()->resetPageSizeType(); Length width; Length height; PageSizeType pageSizeType = PAGE_SIZE_AUTO; CSSValueListInspector inspector(value); switch (inspector.length()) { case 2: { // <length>{2} | <page-size> <orientation> if (!inspector.first()->isPrimitiveValue() || !inspector.second()->isPrimitiveValue()) return; CSSPrimitiveValue* first = toCSSPrimitiveValue(inspector.first()); CSSPrimitiveValue* second = toCSSPrimitiveValue(inspector.second()); if (first->isLength()) { // <length>{2} if (!second->isLength()) return; width = first->computeLength<Length>(state.cssToLengthConversionData()); height = second->computeLength<Length>(state.cssToLengthConversionData()); } else { // <page-size> <orientation> // The value order is guaranteed. See BisonCSSParser::parseSizeParameter. if (!getPageSizeFromName(first, second, width, height)) return; } pageSizeType = PAGE_SIZE_RESOLVED; break; } case 1: { // <length> | auto | <page-size> | [ portrait | landscape] if (!inspector.first()->isPrimitiveValue()) return; CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(inspector.first()); if (primitiveValue->isLength()) { // <length> pageSizeType = PAGE_SIZE_RESOLVED; width = height = primitiveValue->computeLength<Length>(state.cssToLengthConversionData()); } else { switch (primitiveValue->getValueID()) { case 0: return; case CSSValueAuto: pageSizeType = PAGE_SIZE_AUTO; break; case CSSValuePortrait: pageSizeType = PAGE_SIZE_AUTO_PORTRAIT; break; case CSSValueLandscape: pageSizeType = PAGE_SIZE_AUTO_LANDSCAPE; break; default: // <page-size> pageSizeType = PAGE_SIZE_RESOLVED; if (!getPageSizeFromName(primitiveValue, 0, width, height)) return; } } break; } default: return; } state.style()->setPageSizeType(pageSizeType); state.style()->setPageSize(LengthSize(width, height)); }
void StyleBuilderFunctions::applyInheritCSSPropertyCursor(StyleResolverState& state) { state.style()->setCursor(state.parentStyle()->cursor()); state.style()->setCursorList(state.parentStyle()->cursors()); }
void StyleBuilderFunctions::applyInitialCSSPropertyCursor(StyleResolverState& state) { state.style()->clearCursorList(); state.style()->setCursor(RenderStyle::initialCursor()); }
void StyleBuilderFunctions::applyInheritCSSPropertyColor(StyleResolverState& state) { Color color = state.parentStyle()->color(); state.style()->setColor(color); }
void StyleBuilderFunctions::applyValueCSSPropertyFontSize(StyleResolverState& state, CSSValue* value) { state.fontBuilder().setFontSizeValue(value, state.parentStyle()); }
// FIXME: Generate this function. void AnimatedStyleBuilder::applyProperty(CSSPropertyID property, StyleResolverState& state, const AnimatableValue* value) { ASSERT(CSSPropertyMetadata::isInterpolableProperty(property)); if (value->isUnknown()) { StyleBuilder::applyProperty(property, state, toAnimatableUnknown(value)->toCSSValue().get()); return; } ComputedStyle* style = state.style(); switch (property) { case CSSPropertyBackgroundColor: style->setBackgroundColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkBackgroundColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBackgroundImage: setOnFillLayers<CSSPropertyBackgroundImage>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyBackgroundPositionX: setOnFillLayers<CSSPropertyBackgroundPositionX>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyBackgroundPositionY: setOnFillLayers<CSSPropertyBackgroundPositionY>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyBackgroundSize: setOnFillLayers<CSSPropertyBackgroundSize>(style->accessBackgroundLayers(), value, state); return; case CSSPropertyBaselineShift: style->accessSVGStyle().setBaselineShift(BS_LENGTH); style->accessSVGStyle().setBaselineShiftValue(animatableValueToLength(value, state)); return; case CSSPropertyBorderBottomColor: style->setBorderBottomColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkBorderBottomColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBorderBottomLeftRadius: style->setBorderBottomLeftRadius(animatableValueToLengthSize(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderBottomRightRadius: style->setBorderBottomRightRadius(animatableValueToLengthSize(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderBottomWidth: style->setBorderBottomWidth(animatableLineWidthClamp<unsigned>(value)); return; case CSSPropertyBorderImageOutset: style->setBorderImageOutset(animatableValueToBorderImageLengthBox(value, state)); return; case CSSPropertyBorderImageSlice: style->setBorderImageSlices(animatableValueToLengthBox(toAnimatableLengthBoxAndBool(value)->box(), state, ValueRangeNonNegative)); style->setBorderImageSlicesFill(toAnimatableLengthBoxAndBool(value)->flag()); return; case CSSPropertyBorderImageSource: style->setBorderImageSource(state.styleImage(property, *toAnimatableImage(value)->toCSSValue())); return; case CSSPropertyBorderImageWidth: style->setBorderImageWidth(animatableValueToBorderImageLengthBox(value, state)); return; case CSSPropertyBorderLeftColor: style->setBorderLeftColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkBorderLeftColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBorderLeftWidth: style->setBorderLeftWidth(animatableLineWidthClamp<unsigned>(value)); return; case CSSPropertyBorderRightColor: style->setBorderRightColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkBorderRightColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBorderRightWidth: style->setBorderRightWidth(animatableLineWidthClamp<unsigned>(value)); return; case CSSPropertyBorderTopColor: style->setBorderTopColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkBorderTopColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyBorderTopLeftRadius: style->setBorderTopLeftRadius(animatableValueToLengthSize(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderTopRightRadius: style->setBorderTopRightRadius(animatableValueToLengthSize(value, state, ValueRangeNonNegative)); return; case CSSPropertyBorderTopWidth: style->setBorderTopWidth(animatableLineWidthClamp<unsigned>(value)); return; case CSSPropertyBottom: style->setBottom(animatableValueToLength(value, state)); return; case CSSPropertyBoxShadow: style->setBoxShadow(toAnimatableShadow(value)->shadowList()); return; case CSSPropertyClip: style->setClip(animatableValueToLengthBox(value, state)); return; case CSSPropertyColor: style->setColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyFillOpacity: style->setFillOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyFill: { const AnimatableSVGPaint* svgPaint = toAnimatableSVGPaint(value); style->accessSVGStyle().setFillPaint(svgPaint->paintType(), svgPaint->getColor(), svgPaint->uri(), true, false); style->accessSVGStyle().setFillPaint(svgPaint->visitedLinkPaintType(), svgPaint->visitedLinkColor(), svgPaint->visitedLinkURI(), false, true); } return; case CSSPropertyFlexGrow: style->setFlexGrow(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0)); return; case CSSPropertyFlexShrink: style->setFlexShrink(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0)); return; case CSSPropertyFlexBasis: style->setFlexBasis(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyFloodColor: style->setFloodColor(toAnimatableColor(value)->getColor()); return; case CSSPropertyFloodOpacity: style->setFloodOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyFontSize: state.fontBuilder().setSize(animatableValueToFontSize(value)); return; case CSSPropertyFontSizeAdjust: state.fontBuilder().setSizeAdjust(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0)); return; case CSSPropertyFontStretch: state.fontBuilder().setStretch(animatableValueToFontStretch(value)); return; case CSSPropertyFontWeight: state.fontBuilder().setWeight(animatableValueToFontWeight(value)); return; case CSSPropertyHeight: style->setHeight(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyLeft: style->setLeft(animatableValueToLength(value, state)); return; case CSSPropertyLightingColor: style->setLightingColor(toAnimatableColor(value)->getColor()); return; case CSSPropertyLineHeight: if (value->isLength()) style->setLineHeight(animatableValueToLength(value, state, ValueRangeNonNegative)); else style->setLineHeight(Length(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0), Percent)); return; case CSSPropertyListStyleImage: style->setListStyleImage(state.styleImage(property, *toAnimatableImage(value)->toCSSValue())); return; case CSSPropertyLetterSpacing: style->setLetterSpacing(clampTo<float>(toAnimatableDouble(value)->toDouble())); return; case CSSPropertyMarginBottom: style->setMarginBottom(animatableValueToLength(value, state)); return; case CSSPropertyMarginLeft: style->setMarginLeft(animatableValueToLength(value, state)); return; case CSSPropertyMarginRight: style->setMarginRight(animatableValueToLength(value, state)); return; case CSSPropertyMarginTop: style->setMarginTop(animatableValueToLength(value, state)); return; case CSSPropertyMaxHeight: style->setMaxHeight(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyMaxWidth: style->setMaxWidth(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyMinHeight: style->setMinHeight(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyMinWidth: style->setMinWidth(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyObjectPosition: style->setObjectPosition(animatableValueToLengthPoint(value, state)); return; case CSSPropertyOpacity: // Avoiding a value of 1 forces a layer to be created. style->setOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, nextafterf(1, 0))); return; case CSSPropertyOrphans: style->setOrphans(clampTo<short>(round(toAnimatableDouble(value)->toDouble()), 1)); return; case CSSPropertyOutlineColor: style->setOutlineColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkOutlineColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyOutlineOffset: style->setOutlineOffset(animatableValueClampTo<int>(value)); return; case CSSPropertyOutlineWidth: style->setOutlineWidth(animatableLineWidthClamp<unsigned short>(value)); return; case CSSPropertyPaddingBottom: style->setPaddingBottom(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyPaddingLeft: style->setPaddingLeft(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyPaddingRight: style->setPaddingRight(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyPaddingTop: style->setPaddingTop(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyRight: style->setRight(animatableValueToLength(value, state)); return; case CSSPropertyStrokeWidth: style->setStrokeWidth(animatableValueToUnzoomedLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyStopColor: style->setStopColor(toAnimatableColor(value)->getColor()); return; case CSSPropertyStopOpacity: style->setStopOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyStrokeDasharray: style->setStrokeDashArray(toAnimatableStrokeDasharrayList(value)->toSVGDashArray(style->effectiveZoom())); return; case CSSPropertyStrokeDashoffset: style->setStrokeDashOffset(animatableValueToLength(value, state)); return; case CSSPropertyStrokeMiterlimit: style->setStrokeMiterLimit(clampTo<float>(toAnimatableDouble(value)->toDouble(), 1)); return; case CSSPropertyStrokeOpacity: style->setStrokeOpacity(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyStroke: { const AnimatableSVGPaint* svgPaint = toAnimatableSVGPaint(value); style->accessSVGStyle().setStrokePaint(svgPaint->paintType(), svgPaint->getColor(), svgPaint->uri(), true, false); style->accessSVGStyle().setStrokePaint(svgPaint->visitedLinkPaintType(), svgPaint->visitedLinkColor(), svgPaint->visitedLinkURI(), false, true); } return; case CSSPropertyTextDecorationColor: style->setTextDecorationColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkTextDecorationColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyTextIndent: style->setTextIndent(animatableValueToLength(value, state)); return; case CSSPropertyTextShadow: style->setTextShadow(toAnimatableShadow(value)->shadowList()); return; case CSSPropertyTop: style->setTop(animatableValueToLength(value, state)); return; case CSSPropertyWebkitBorderHorizontalSpacing: style->setHorizontalBorderSpacing(animatableValueClampTo<unsigned short>(value)); return; case CSSPropertyWebkitBorderVerticalSpacing: style->setVerticalBorderSpacing(animatableValueClampTo<unsigned short>(value)); return; case CSSPropertyWebkitClipPath: style->setClipPath(toAnimatableClipPathOperation(value)->clipPathOperation()); return; case CSSPropertyColumnCount: style->setColumnCount(clampTo<unsigned short>(round(toAnimatableDouble(value)->toDouble()), 1)); return; case CSSPropertyColumnGap: style->setColumnGap(clampTo(toAnimatableDouble(value)->toDouble(), 0)); return; case CSSPropertyColumnRuleColor: style->setColumnRuleColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkColumnRuleColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyColumnWidth: style->setColumnWidth(clampTo(toAnimatableDouble(value)->toDouble(), std::numeric_limits<float>::epsilon())); return; case CSSPropertyColumnRuleWidth: style->setColumnRuleWidth(animatableLineWidthClamp<unsigned short>(value)); return; case CSSPropertyWebkitFilter: style->setFilter(toAnimatableFilterOperations(value)->operations()); return; case CSSPropertyBackdropFilter: style->setBackdropFilter(toAnimatableFilterOperations(value)->operations()); return; case CSSPropertyWebkitMaskBoxImageOutset: style->setMaskBoxImageOutset(animatableValueToBorderImageLengthBox(value, state)); return; case CSSPropertyWebkitMaskBoxImageSlice: style->setMaskBoxImageSlices(animatableValueToLengthBox(toAnimatableLengthBoxAndBool(value)->box(), state, ValueRangeNonNegative)); style->setMaskBoxImageSlicesFill(toAnimatableLengthBoxAndBool(value)->flag()); return; case CSSPropertyWebkitMaskBoxImageSource: style->setMaskBoxImageSource(state.styleImage(property, *toAnimatableImage(value)->toCSSValue())); return; case CSSPropertyWebkitMaskBoxImageWidth: style->setMaskBoxImageWidth(animatableValueToBorderImageLengthBox(value, state)); return; case CSSPropertyWebkitMaskImage: setOnFillLayers<CSSPropertyWebkitMaskImage>(style->accessMaskLayers(), value, state); return; case CSSPropertyWebkitMaskPositionX: setOnFillLayers<CSSPropertyWebkitMaskPositionX>(style->accessMaskLayers(), value, state); return; case CSSPropertyWebkitMaskPositionY: setOnFillLayers<CSSPropertyWebkitMaskPositionY>(style->accessMaskLayers(), value, state); return; case CSSPropertyWebkitMaskSize: setOnFillLayers<CSSPropertyWebkitMaskSize>(style->accessMaskLayers(), value, state); return; case CSSPropertyPerspective: style->setPerspective(value->isDouble() ? clampTo<float>(toAnimatableDouble(value)->toDouble()) : 0); return; case CSSPropertyPerspectiveOrigin: style->setPerspectiveOrigin(animatableValueToLengthPoint(value, state)); return; case CSSPropertyShapeOutside: style->setShapeOutside(toAnimatableShapeValue(value)->shapeValue()); return; case CSSPropertyShapeMargin: style->setShapeMargin(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyShapeImageThreshold: style->setShapeImageThreshold(clampTo<float>(toAnimatableDouble(value)->toDouble(), 0, 1)); return; case CSSPropertyWebkitTextStrokeColor: style->setTextStrokeColor(toAnimatableColor(value)->getColor()); style->setVisitedLinkTextStrokeColor(toAnimatableColor(value)->visitedLinkColor()); return; case CSSPropertyTransform: { const TransformOperations& operations = toAnimatableTransform(value)->transformOperations(); // FIXME: This normalization (handling of 'none') should be performed at input in AnimatableValueFactory. if (operations.size() == 0) { style->setTransform(TransformOperations(true)); return; } double sourceZoom = toAnimatableTransform(value)->zoom(); double destinationZoom = style->effectiveZoom(); style->setTransform(sourceZoom == destinationZoom ? operations : operations.zoom(destinationZoom / sourceZoom)); return; } case CSSPropertyTranslate: { TranslateTransformOperation* translate = toTranslateTransformOperation(animatableValueToTransformOperation(value, TransformOperation::Translate3D)); double sourceZoom = toAnimatableTransform(value)->zoom(); double destinationZoom = style->effectiveZoom(); style->setTranslate(sourceZoom == destinationZoom ? translate : translate->zoomTranslate(destinationZoom / sourceZoom)); return; } case CSSPropertyRotate: { style->setRotate(toRotateTransformOperation(animatableValueToTransformOperation(value, TransformOperation::Rotate3D))); return; } case CSSPropertyScale: { style->setScale(toScaleTransformOperation(animatableValueToTransformOperation(value, TransformOperation::Scale3D))); return; } case CSSPropertyTransformOrigin: style->setTransformOrigin(animatableValueToTransformOrigin(value, state)); return; case CSSPropertyMotionOffset: style->setMotionOffset(animatableValueToLength(value, state)); return; case CSSPropertyMotionRotation: style->setMotionRotation(StyleMotionRotation( toAnimatableDoubleAndBool(value)->toDouble(), toAnimatableDoubleAndBool(value)->flag() ? MotionRotationAuto : MotionRotationFixed)); return; case CSSPropertyWebkitPerspectiveOriginX: style->setPerspectiveOriginX(animatableValueToLength(value, state)); return; case CSSPropertyWebkitPerspectiveOriginY: style->setPerspectiveOriginY(animatableValueToLength(value, state)); return; case CSSPropertyWebkitTransformOriginX: style->setTransformOriginX(animatableValueToLength(value, state)); return; case CSSPropertyWebkitTransformOriginY: style->setTransformOriginY(animatableValueToLength(value, state)); return; case CSSPropertyWebkitTransformOriginZ: style->setTransformOriginZ(toAnimatableDouble(value)->toDouble()); return; case CSSPropertyWidows: style->setWidows(clampTo<short>(round(toAnimatableDouble(value)->toDouble()), 1)); return; case CSSPropertyWidth: style->setWidth(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyWordSpacing: style->setWordSpacing(clampTo<float>(toAnimatableDouble(value)->toDouble())); return; case CSSPropertyVerticalAlign: style->setVerticalAlignLength(animatableValueToLength(value, state)); return; case CSSPropertyVisibility: style->setVisibility(toAnimatableVisibility(value)->visibility()); return; case CSSPropertyZIndex: style->setZIndex(clampTo<int>(round(toAnimatableDouble(value)->toDouble()))); return; case CSSPropertyD: style->setD(toAnimatablePath(value)->path()); return; case CSSPropertyCx: style->setCx(animatableValueToLength(value, state)); return; case CSSPropertyCy: style->setCy(animatableValueToLength(value, state)); return; case CSSPropertyX: style->setX(animatableValueToLength(value, state)); return; case CSSPropertyY: style->setY(animatableValueToLength(value, state)); return; case CSSPropertyR: style->setR(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyRx: style->setRx(animatableValueToLength(value, state, ValueRangeNonNegative)); return; case CSSPropertyRy: style->setRy(animatableValueToLength(value, state, ValueRangeNonNegative)); return; default: ASSERT_NOT_REACHED(); } }
void StyleBuilderFunctions::applyInitialCSSPropertyOutlineStyle(StyleResolverState& state) { state.style()->setOutlineStyleIsAuto(RenderStyle::initialOutlineStyleIsAuto()); state.style()->setOutlineStyle(RenderStyle::initialBorderStyle()); }
FilterOperations FilterOperationResolver::createFilterOperations(StyleResolverState& state, const CSSValue& inValue) { FilterOperations operations; if (inValue.isPrimitiveValue()) { ASSERT(toCSSPrimitiveValue(inValue).getValueID() == CSSValueNone); return operations; } const CSSToLengthConversionData& conversionData = state.cssToLengthConversionData(); for (auto& currValue : toCSSValueList(inValue)) { const CSSFunctionValue* filterValue = toCSSFunctionValue(currValue.get()); FilterOperation::OperationType operationType = filterOperationForType(filterValue->functionType()); countFilterUse(operationType, state.document()); ASSERT(filterValue->length() <= 1); if (operationType == FilterOperation::REFERENCE) { const CSSSVGDocumentValue& svgDocumentValue = toCSSSVGDocumentValue(filterValue->item(0)); KURL url = state.document().completeURL(svgDocumentValue.url()); ReferenceFilterOperation* operation = ReferenceFilterOperation::create(svgDocumentValue.url(), AtomicString(url.fragmentIdentifier())); if (SVGURIReference::isExternalURIReference(svgDocumentValue.url(), state.document())) { if (!svgDocumentValue.loadRequested()) state.elementStyleResources().addPendingSVGDocument(operation, &svgDocumentValue); else if (svgDocumentValue.cachedSVGDocument()) ReferenceFilterBuilder::setDocumentResourceReference(operation, new DocumentResourceReference(svgDocumentValue.cachedSVGDocument())); } operations.operations().append(operation); continue; } const CSSPrimitiveValue* firstValue = filterValue->length() && filterValue->item(0).isPrimitiveValue() ? &toCSSPrimitiveValue(filterValue->item(0)) : nullptr; switch (filterValue->functionType()) { case CSSValueGrayscale: case CSSValueSepia: case CSSValueSaturate: { double amount = 1; if (filterValue->length() == 1) { amount = firstValue->getDoubleValue(); if (firstValue->isPercentage()) amount /= 100; } operations.operations().append(BasicColorMatrixFilterOperation::create(amount, operationType)); break; } case CSSValueHueRotate: { double angle = 0; if (filterValue->length() == 1) angle = firstValue->computeDegrees(); operations.operations().append(BasicColorMatrixFilterOperation::create(angle, operationType)); break; } case CSSValueInvert: case CSSValueBrightness: case CSSValueContrast: case CSSValueOpacity: { double amount = (filterValue->functionType() == CSSValueBrightness) ? 0 : 1; if (filterValue->length() == 1) { amount = firstValue->getDoubleValue(); if (firstValue->isPercentage()) amount /= 100; } operations.operations().append(BasicComponentTransferFilterOperation::create(amount, operationType)); break; } case CSSValueBlur: { Length stdDeviation = Length(0, Fixed); if (filterValue->length() >= 1) stdDeviation = firstValue->convertToLength(conversionData); operations.operations().append(BlurFilterOperation::create(stdDeviation)); break; } case CSSValueDropShadow: { const CSSShadowValue& item = toCSSShadowValue(filterValue->item(0)); IntPoint location(item.x->computeLength<int>(conversionData), item.y->computeLength<int>(conversionData)); int blur = item.blur ? item.blur->computeLength<int>(conversionData) : 0; Color shadowColor = Color::black; if (item.color) shadowColor = state.document().textLinkColors().colorFromCSSValue(*item.color, state.style()->color()); operations.operations().append(DropShadowFilterOperation::create(location, blur, shadowColor)); break; } default: ASSERT_NOT_REACHED(); break; } } return operations; }
void StyleBuilderFunctions::applyValueCSSPropertyOutlineStyle(StyleResolverState& state, CSSValue* value) { CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); state.style()->setOutlineStyleIsAuto(*primitiveValue); state.style()->setOutlineStyle(*primitiveValue); }
bool FilterOperationResolver::createFilterOperations(CSSValue* inValue, const CSSToLengthConversionData& unadjustedConversionData, FilterOperations& outOperations, StyleResolverState& state) { ASSERT(outOperations.isEmpty()); if (!inValue) return false; if (inValue->isPrimitiveValue()) { CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(inValue); if (primitiveValue->getValueID() == CSSValueNone) return true; } if (!inValue->isValueList()) return false; float zoomFactor = unadjustedConversionData.zoom() * state.elementStyleResources().deviceScaleFactor(); const CSSToLengthConversionData& conversionData = unadjustedConversionData.copyWithAdjustedZoom(zoomFactor); FilterOperations operations; for (CSSValueListIterator i = inValue; i.hasMore(); i.advance()) { CSSValue* currValue = i.value(); if (!currValue->isFilterValue()) continue; CSSFilterValue* filterValue = toCSSFilterValue(i.value()); FilterOperation::OperationType operationType = filterOperationForType(filterValue->operationType()); if (operationType == FilterOperation::VALIDATED_CUSTOM) { // ValidatedCustomFilterOperation is not supposed to end up in the RenderStyle. ASSERT_NOT_REACHED(); continue; } if (operationType == FilterOperation::CUSTOM) { RefPtr<CustomFilterOperation> operation = createCustomFilterOperation(filterValue, state); if (!operation) return false; operations.operations().append(operation); continue; } if (operationType == FilterOperation::REFERENCE) { if (filterValue->length() != 1) continue; CSSValue* argument = filterValue->itemWithoutBoundsCheck(0); if (!argument->isSVGDocumentValue()) continue; CSSSVGDocumentValue* svgDocumentValue = toCSSSVGDocumentValue(argument); KURL url = state.document().completeURL(svgDocumentValue->url()); RefPtr<ReferenceFilterOperation> operation = ReferenceFilterOperation::create(svgDocumentValue->url(), url.fragmentIdentifier()); if (SVGURIReference::isExternalURIReference(svgDocumentValue->url(), state.document())) { if (!svgDocumentValue->loadRequested()) state.elementStyleResources().addPendingSVGDocument(operation.get(), svgDocumentValue); else if (svgDocumentValue->cachedSVGDocument()) ReferenceFilterBuilder::setDocumentResourceReference(operation.get(), adoptPtr(new DocumentResourceReference(svgDocumentValue->cachedSVGDocument()))); } operations.operations().append(operation); continue; } // Check that all parameters are primitive values, with the // exception of drop shadow which has a CSSShadowValue parameter. if (operationType != FilterOperation::DROP_SHADOW) { bool haveNonPrimitiveValue = false; for (unsigned j = 0; j < filterValue->length(); ++j) { if (!filterValue->itemWithoutBoundsCheck(j)->isPrimitiveValue()) { haveNonPrimitiveValue = true; break; } } if (haveNonPrimitiveValue) continue; } CSSPrimitiveValue* firstValue = filterValue->length() && filterValue->itemWithoutBoundsCheck(0)->isPrimitiveValue() ? toCSSPrimitiveValue(filterValue->itemWithoutBoundsCheck(0)) : 0; switch (filterValue->operationType()) { case CSSFilterValue::GrayscaleFilterOperation: case CSSFilterValue::SepiaFilterOperation: case CSSFilterValue::SaturateFilterOperation: { double amount = 1; if (filterValue->length() == 1) { amount = firstValue->getDoubleValue(); if (firstValue->isPercentage()) amount /= 100; } operations.operations().append(BasicColorMatrixFilterOperation::create(amount, operationType)); break; } case CSSFilterValue::HueRotateFilterOperation: { double angle = 0; if (filterValue->length() == 1) angle = firstValue->computeDegrees(); operations.operations().append(BasicColorMatrixFilterOperation::create(angle, operationType)); break; } case CSSFilterValue::InvertFilterOperation: case CSSFilterValue::BrightnessFilterOperation: case CSSFilterValue::ContrastFilterOperation: case CSSFilterValue::OpacityFilterOperation: { double amount = (filterValue->operationType() == CSSFilterValue::BrightnessFilterOperation) ? 0 : 1; if (filterValue->length() == 1) { amount = firstValue->getDoubleValue(); if (firstValue->isPercentage()) amount /= 100; } operations.operations().append(BasicComponentTransferFilterOperation::create(amount, operationType)); break; } case CSSFilterValue::BlurFilterOperation: { Length stdDeviation = Length(0, Fixed); if (filterValue->length() >= 1) stdDeviation = firstValue->convertToLength<FixedConversion | PercentConversion>(conversionData); if (stdDeviation.isUndefined()) return false; operations.operations().append(BlurFilterOperation::create(stdDeviation)); break; } case CSSFilterValue::DropShadowFilterOperation: { if (filterValue->length() != 1) return false; CSSValue* cssValue = filterValue->itemWithoutBoundsCheck(0); if (!cssValue->isShadowValue()) continue; CSSShadowValue* item = toCSSShadowValue(cssValue); IntPoint location(item->x->computeLength<int>(conversionData), item->y->computeLength<int>(conversionData)); int blur = item->blur ? item->blur->computeLength<int>(conversionData) : 0; Color shadowColor; if (item->color) shadowColor = state.document().textLinkColors().colorFromPrimitiveValue(item->color.get(), state.style()->color()); operations.operations().append(DropShadowFilterOperation::create(location, blur, shadowColor.isValid() ? shadowColor : Color::transparent)); break; } case CSSFilterValue::UnknownFilterOperation: default: ASSERT_NOT_REACHED(); break; } } outOperations = operations; return true; }
void StyleBuilderFunctions::applyInitialCSSPropertyTextIndent(StyleResolverState& state) { state.style()->setTextIndent(RenderStyle::initialTextIndent()); state.style()->setTextIndentLine(RenderStyle::initialTextIndentLine()); state.style()->setTextIndentType(RenderStyle::initialTextIndentType()); }
void StyleBuilderFunctions::applyValueCSSPropertyDirection(StyleResolverState& state, CSSValue* value) { state.style()->setDirection(*toCSSPrimitiveValue(value)); }
void StyleBuilderFunctions::applyInitialCSSPropertyWebkitAspectRatio(StyleResolverState& state) { state.style()->setHasAspectRatio(RenderStyle::initialHasAspectRatio()); state.style()->setAspectRatioDenominator(RenderStyle::initialAspectRatioDenominator()); state.style()->setAspectRatioNumerator(RenderStyle::initialAspectRatioNumerator()); }
void StyleBuilderFunctions::applyValueCSSPropertyFontFamily(StyleResolverState& state, CSSValue* value) { state.fontBuilder().setFontFamilyValue(value); }
void StyleBuilderFunctions::applyValueCSSPropertyFilter(StyleResolverState& state, CSSValue* value) { FilterOperations operations; if (FilterOperationResolver::createFilterOperations(value, state.cssToLengthConversionData(), operations, state)) state.style()->setFilter(operations); }
void StyleBuilderFunctions::applyInitialCSSPropertyFontSize(StyleResolverState& state) { state.fontBuilder().setFontSizeInitial(); }
void StyleBuilderFunctions::applyInheritCSSPropertyWebkitTextEmphasisStyle(StyleResolverState& state) { state.style()->setTextEmphasisFill(state.parentStyle()->textEmphasisFill()); state.style()->setTextEmphasisMark(state.parentStyle()->textEmphasisMark()); state.style()->setTextEmphasisCustomMark(state.parentStyle()->textEmphasisCustomMark()); }
void StyleBuilderFunctions::applyInheritCSSPropertyFontSize(StyleResolverState& state) { state.fontBuilder().setFontSizeInherit(state.parentFontDescription()); }
void StyleBuilderFunctions::applyInitialCSSPropertyColor(StyleResolverState& state) { Color color = RenderStyle::initialColor(); state.style()->setColor(color); }
void StyleBuilderFunctions::applyValueCSSPropertyWebkitAppRegion(StyleResolverState& state, CSSValue* value) { const CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); state.style()->setDraggableRegionMode(primitiveValue->getValueID() == CSSValueDrag ? DraggableRegionDrag : DraggableRegionNoDrag); state.document().setHasAnnotatedRegions(true); }