void ShapeOutsideInfo::setReferenceBoxLogicalSize( LayoutSize newReferenceBoxLogicalSize) { bool isHorizontalWritingMode = m_layoutBox.containingBlock()->style()->isHorizontalWritingMode(); switch (referenceBox(*m_layoutBox.style()->shapeOutside())) { case MarginBox: if (isHorizontalWritingMode) newReferenceBoxLogicalSize.expand(m_layoutBox.marginWidth(), m_layoutBox.marginHeight()); else newReferenceBoxLogicalSize.expand(m_layoutBox.marginHeight(), m_layoutBox.marginWidth()); break; case BorderBox: break; case PaddingBox: if (isHorizontalWritingMode) newReferenceBoxLogicalSize.shrink(m_layoutBox.borderWidth(), m_layoutBox.borderHeight()); else newReferenceBoxLogicalSize.shrink(m_layoutBox.borderHeight(), m_layoutBox.borderWidth()); break; case ContentBox: if (isHorizontalWritingMode) newReferenceBoxLogicalSize.shrink(m_layoutBox.borderAndPaddingWidth(), m_layoutBox.borderAndPaddingHeight()); else newReferenceBoxLogicalSize.shrink(m_layoutBox.borderAndPaddingHeight(), m_layoutBox.borderAndPaddingWidth()); break; case BoxMissing: ASSERT_NOT_REACHED(); break; } newReferenceBoxLogicalSize.clampNegativeToZero(); if (m_referenceBoxLogicalSize == newReferenceBoxLogicalSize) return; markShapeAsDirty(); m_referenceBoxLogicalSize = newReferenceBoxLogicalSize; }