void CSSToStyleMap::mapNinePieceImageSlice(CSSValue& value, NinePieceImage& image) { if (!is<CSSBorderImageSliceValue>(value)) return; // Retrieve the border image value. auto& borderImageSlice = downcast<CSSBorderImageSliceValue>(value); // Set up a length box to represent our image slices. LengthBox box; Quad* slices = borderImageSlice.slices(); if (slices->top()->isPercentage()) box.top() = Length(slices->top()->getDoubleValue(), Percent); else box.top() = Length(slices->top()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed); if (slices->bottom()->isPercentage()) box.bottom() = Length(slices->bottom()->getDoubleValue(), Percent); else box.bottom() = Length((int)slices->bottom()->getFloatValue(CSSPrimitiveValue::CSS_NUMBER), Fixed); if (slices->left()->isPercentage()) box.left() = Length(slices->left()->getDoubleValue(), Percent); else box.left() = Length(slices->left()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed); if (slices->right()->isPercentage()) box.right() = Length(slices->right()->getDoubleValue(), Percent); else box.right() = Length(slices->right()->getIntValue(CSSPrimitiveValue::CSS_NUMBER), Fixed); image.setImageSlices(box); // Set our fill mode. image.setFill(borderImageSlice.m_fill); }
static LayoutRect computeScrollSnapPortOrAreaRect(const LayoutRect& rect, const LengthBox& insetOrOutsetBox, InsetOrOutset insetOrOutset) { LayoutBoxExtent extents(valueForLength(insetOrOutsetBox.top(), rect.height()), valueForLength(insetOrOutsetBox.right(), rect.width()), valueForLength(insetOrOutsetBox.bottom(), rect.height()), valueForLength(insetOrOutsetBox.left(), rect.width())); auto snapPortOrArea(rect); if (insetOrOutset == InsetOrOutset::Inset) snapPortOrArea.contract(extents); else snapPortOrArea.expand(extents); return snapPortOrArea; }
bool positionedObjectMoved(const LengthBox& a, const LengthBox& b) { // If any unit types are different, then we can't guarantee // that this was just a movement. if (a.left().type() != b.left().type() || a.right().type() != b.right().type() || a.top().type() != b.top().type() || a.bottom().type() != b.bottom().type()) return false; // Only one unit can be non-auto in the horizontal direction and // in the vertical direction. Otherwise the adjustment of values // is changing the size of the box. if (!a.left().isIntrinsicOrAuto() && !a.right().isIntrinsicOrAuto()) return false; if (!a.top().isIntrinsicOrAuto() && !a.bottom().isIntrinsicOrAuto()) return false; // One of the units is fixed or percent in both directions and stayed // that way in the new style. Therefore all we are doing is moving. return true; }
explicit ClipAutos(const LengthBox& clip) : isAuto(false), isTopAuto(clip.top().isAuto()), isRightAuto(clip.right().isAuto()), isBottomAuto(clip.bottom().isAuto()), isLeftAuto(clip.left().isAuto()) {}
LengthBox CSSToStyleMap::mapNinePieceImageQuad(CSSValue& value) { if (!is<CSSPrimitiveValue>(value)) return LengthBox(); // Get our zoom value. CSSToLengthConversionData conversionData = useSVGZoomRules() ? m_resolver->state().cssToLengthConversionData().copyWithAdjustedZoom(1.0f) : m_resolver->state().cssToLengthConversionData(); // Retrieve the primitive value. auto& borderWidths = downcast<CSSPrimitiveValue>(value); // Set up a length box to represent our image slices. LengthBox box; // Defaults to 'auto' so we don't have to handle that explicitly below. Quad* slices = borderWidths.getQuadValue(); if (slices->top()->isNumber()) box.top() = Length(slices->top()->getIntValue(), Relative); else if (slices->top()->isPercentage()) box.top() = Length(slices->top()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); else if (slices->top()->getValueID() != CSSValueAuto) box.top() = slices->top()->computeLength<Length>(conversionData); if (slices->right()->isNumber()) box.right() = Length(slices->right()->getIntValue(), Relative); else if (slices->right()->isPercentage()) box.right() = Length(slices->right()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); else if (slices->right()->getValueID() != CSSValueAuto) box.right() = slices->right()->computeLength<Length>(conversionData); if (slices->bottom()->isNumber()) box.bottom() = Length(slices->bottom()->getIntValue(), Relative); else if (slices->bottom()->isPercentage()) box.bottom() = Length(slices->bottom()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); else if (slices->bottom()->getValueID() != CSSValueAuto) box.bottom() = slices->bottom()->computeLength<Length>(conversionData); if (slices->left()->isNumber()) box.left() = Length(slices->left()->getIntValue(), Relative); else if (slices->left()->isPercentage()) box.left() = Length(slices->left()->getDoubleValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); else if (slices->left()->getValueID() != CSSValueAuto) box.left() = slices->left()->computeLength<Length>(conversionData); return box; }