637void RenderBoxModelObject::clipRoundedInnerRect(GraphicsContext * context, const LayoutRect& rect, const RoundedRect& clipRect)
638{
639 if (clipRect.isRenderable())
640 context->addRoundedRectClip(clipRect);
641 else {
642 // We create a rounded rect for each of the corners and clip it, while making sure we clip opposing corners together.
643 if (!clipRect.radii().topLeft().isEmpty() || !clipRect.radii().bottomRight().isEmpty()) {
644 LayoutRect topCorner(clipRect.rect().x(), clipRect.rect().y(), rect.maxX() - clipRect.rect().x(), rect.maxY() - clipRect.rect().y());
645 RoundedRect::Radii topCornerRadii;
646 topCornerRadii.setTopLeft(clipRect.radii().topLeft());
647 context->addRoundedRectClip(RoundedRect(topCorner, topCornerRadii));
648
649 LayoutRect bottomCorner(rect.x(), rect.y(), clipRect.rect().maxX() - rect.x(), clipRect.rect().maxY() - rect.y());
650 RoundedRect::Radii bottomCornerRadii;
651 bottomCornerRadii.setBottomRight(clipRect.radii().bottomRight());
652 context->addRoundedRectClip(RoundedRect(bottomCorner, bottomCornerRadii));
653 }
654 if (!clipRect.radii().topRight().isEmpty() || !clipRect.radii().bottomLeft().isEmpty()) {
655 LayoutRect topCorner(rect.x(), clipRect.rect().y(), clipRect.rect().maxX() - rect.x(), rect.maxY() - clipRect.rect().y());
656 RoundedRect::Radii topCornerRadii;
657 topCornerRadii.setTopRight(clipRect.radii().topRight());
658 context->addRoundedRectClip(RoundedRect(topCorner, topCornerRadii));
659
660 LayoutRect bottomCorner(clipRect.rect().x(), rect.y(), rect.maxX() - clipRect.rect().x(), clipRect.rect().maxY() - rect.y());
661 RoundedRect::Radii bottomCornerRadii;
662 bottomCornerRadii.setBottomLeft(clipRect.radii().bottomLeft());
663 context->addRoundedRectClip(RoundedRect(bottomCorner, bottomCornerRadii));
664 }
665 }
666}
667