OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "core/paint/BoxPainter.h" | 6 #include "core/paint/BoxPainter.h" |
7 | 7 |
8 #include "core/HTMLNames.h" | 8 #include "core/HTMLNames.h" |
9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
10 #include "core/html/HTMLFrameOwnerElement.h" | 10 #include "core/html/HTMLFrameOwnerElement.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 result.move(-layoutView->scrolledContentOffset()); | 74 result.move(-layoutView->scrolledContentOffset()); |
75 return result; | 75 return result; |
76 } | 76 } |
77 | 77 |
78 void BoxPainter::paintBoxDecorationBackgroundWithRect(const PaintInfo& paintInfo
, const LayoutPoint& paintOffset, const LayoutRect& paintRect) | 78 void BoxPainter::paintBoxDecorationBackgroundWithRect(const PaintInfo& paintInfo
, const LayoutPoint& paintOffset, const LayoutRect& paintRect) |
79 { | 79 { |
80 LayoutObjectDrawingRecorder recorder(paintInfo.context, m_layoutBox, Display
Item::BoxDecorationBackground, boundsForDrawingRecorder(paintOffset)); | 80 LayoutObjectDrawingRecorder recorder(paintInfo.context, m_layoutBox, Display
Item::BoxDecorationBackground, boundsForDrawingRecorder(paintOffset)); |
81 if (recorder.canUseCachedDrawing()) | 81 if (recorder.canUseCachedDrawing()) |
82 return; | 82 return; |
83 | 83 |
84 const LayoutStyle& style = m_layoutBox.styleRef(); | 84 const ComputedStyle& style = m_layoutBox.styleRef(); |
85 BoxDecorationData boxDecorationData(m_layoutBox, paintInfo.context); | 85 BoxDecorationData boxDecorationData(m_layoutBox, paintInfo.context); |
86 | 86 |
87 // FIXME: Should eventually give the theme control over whether the box shad
ow should paint, since controls could have | 87 // FIXME: Should eventually give the theme control over whether the box shad
ow should paint, since controls could have |
88 // custom shadows of their own. | 88 // custom shadows of their own. |
89 if (!m_layoutBox.boxShadowShouldBeAppliedToBackground(boxDecorationData.blee
dAvoidance())) | 89 if (!m_layoutBox.boxShadowShouldBeAppliedToBackground(boxDecorationData.blee
dAvoidance())) |
90 paintBoxShadow(paintInfo, paintRect, style, Normal); | 90 paintBoxShadow(paintInfo, paintRect, style, Normal); |
91 | 91 |
92 GraphicsContextStateSaver stateSaver(*paintInfo.context, false); | 92 GraphicsContextStateSaver stateSaver(*paintInfo.context, false); |
93 if (boxDecorationData.bleedAvoidance() == BackgroundBleedClipBackground) { | 93 if (boxDecorationData.bleedAvoidance() == BackgroundBleedClipBackground) { |
94 stateSaver.save(); | 94 stateSaver.save(); |
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
887 | 887 |
888 static LayoutUnit computeBorderImageSide(const BorderImageLength& borderSlice, L
ayoutUnit borderSide, LayoutUnit imageSide, LayoutUnit boxExtent) | 888 static LayoutUnit computeBorderImageSide(const BorderImageLength& borderSlice, L
ayoutUnit borderSide, LayoutUnit imageSide, LayoutUnit boxExtent) |
889 { | 889 { |
890 if (borderSlice.isNumber()) | 890 if (borderSlice.isNumber()) |
891 return borderSlice.number() * borderSide; | 891 return borderSlice.number() * borderSide; |
892 if (borderSlice.length().isAuto()) | 892 if (borderSlice.length().isAuto()) |
893 return imageSide; | 893 return imageSide; |
894 return valueForLength(borderSlice.length(), boxExtent); | 894 return valueForLength(borderSlice.length(), boxExtent); |
895 } | 895 } |
896 | 896 |
897 bool BoxPainter::paintNinePieceImage(LayoutBoxModelObject& obj, GraphicsContext*
graphicsContext, const LayoutRect& rect, const LayoutStyle& style, const NinePi
eceImage& ninePieceImage, SkXfermode::Mode op) | 897 bool BoxPainter::paintNinePieceImage(LayoutBoxModelObject& obj, GraphicsContext*
graphicsContext, const LayoutRect& rect, const ComputedStyle& style, const Nine
PieceImage& ninePieceImage, SkXfermode::Mode op) |
898 { | 898 { |
899 StyleImage* styleImage = ninePieceImage.image(); | 899 StyleImage* styleImage = ninePieceImage.image(); |
900 if (!styleImage) | 900 if (!styleImage) |
901 return false; | 901 return false; |
902 | 902 |
903 if (!styleImage->isLoaded()) | 903 if (!styleImage->isLoaded()) |
904 return true; // Never paint a nine-piece image incrementally, but don't
paint the fallback borders either. | 904 return true; // Never paint a nine-piece image incrementally, but don't
paint the fallback borders either. |
905 | 905 |
906 if (!styleImage->canRender(obj, style.effectiveZoom())) | 906 if (!styleImage->canRender(obj, style.effectiveZoom())) |
907 return false; | 907 return false; |
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1394 context->setShouldAntialias(antialias); | 1394 context->setShouldAntialias(antialias); |
1395 | 1395 |
1396 context->setStrokeStyle(SolidStroke); | 1396 context->setStrokeStyle(SolidStroke); |
1397 context->setStrokeColor(color); | 1397 context->setStrokeColor(color); |
1398 context->strokeRect(strokeRect, borderWidth); | 1398 context->strokeRect(strokeRect, borderWidth); |
1399 | 1399 |
1400 if (antialias != wasAntialias) | 1400 if (antialias != wasAntialias) |
1401 context->setShouldAntialias(wasAntialias); | 1401 context->setShouldAntialias(wasAntialias); |
1402 } | 1402 } |
1403 | 1403 |
1404 void BoxPainter::paintBorder(LayoutBoxModelObject& obj, const PaintInfo& info, c
onst LayoutRect& rect, const LayoutStyle& style, BackgroundBleedAvoidance bleedA
voidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge) | 1404 void BoxPainter::paintBorder(LayoutBoxModelObject& obj, const PaintInfo& info, c
onst LayoutRect& rect, const ComputedStyle& style, BackgroundBleedAvoidance blee
dAvoidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge) |
1405 { | 1405 { |
1406 GraphicsContext* graphicsContext = info.context; | 1406 GraphicsContext* graphicsContext = info.context; |
1407 // border-image is not affected by border-radius. | 1407 // border-image is not affected by border-radius. |
1408 if (paintNinePieceImage(obj, graphicsContext, rect, style, style.borderImage
())) | 1408 if (paintNinePieceImage(obj, graphicsContext, rect, style, style.borderImage
())) |
1409 return; | 1409 return; |
1410 | 1410 |
1411 BorderEdge edges[4]; | 1411 BorderEdge edges[4]; |
1412 style.getBorderEdgeInfo(edges, includeLogicalLeftEdge, includeLogicalRightEd
ge); | 1412 style.getBorderEdgeInfo(edges, includeLogicalLeftEdge, includeLogicalRightEd
ge); |
1413 FloatRoundedRect outerBorder = style.getRoundedBorderFor(rect, includeLogica
lLeftEdge, includeLogicalRightEdge); | 1413 FloatRoundedRect outerBorder = style.getRoundedBorderFor(rect, includeLogica
lLeftEdge, includeLogicalRightEdge); |
1414 FloatRoundedRect innerBorder = style.getRoundedInnerBorderFor(borderInnerRec
tAdjustedForBleedAvoidance(graphicsContext, rect, bleedAvoidance), includeLogica
lLeftEdge, includeLogicalRightEdge); | 1414 FloatRoundedRect innerBorder = style.getRoundedInnerBorderFor(borderInnerRec
tAdjustedForBleedAvoidance(graphicsContext, rect, bleedAvoidance), includeLogica
lLeftEdge, includeLogicalRightEdge); |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1584 } | 1584 } |
1585 | 1585 |
1586 static inline bool includesAdjacentEdges(BorderEdgeFlags flags) | 1586 static inline bool includesAdjacentEdges(BorderEdgeFlags flags) |
1587 { | 1587 { |
1588 return (flags & (TopBorderEdge | RightBorderEdge)) == (TopBorderEdge | Right
BorderEdge) | 1588 return (flags & (TopBorderEdge | RightBorderEdge)) == (TopBorderEdge | Right
BorderEdge) |
1589 || (flags & (RightBorderEdge | BottomBorderEdge)) == (RightBorderEdge |
BottomBorderEdge) | 1589 || (flags & (RightBorderEdge | BottomBorderEdge)) == (RightBorderEdge |
BottomBorderEdge) |
1590 || (flags & (BottomBorderEdge | LeftBorderEdge)) == (BottomBorderEdge |
LeftBorderEdge) | 1590 || (flags & (BottomBorderEdge | LeftBorderEdge)) == (BottomBorderEdge |
LeftBorderEdge) |
1591 || (flags & (LeftBorderEdge | TopBorderEdge)) == (LeftBorderEdge | TopBo
rderEdge); | 1591 || (flags & (LeftBorderEdge | TopBorderEdge)) == (LeftBorderEdge | TopBo
rderEdge); |
1592 } | 1592 } |
1593 | 1593 |
1594 void BoxPainter::paintTranslucentBorderSides(GraphicsContext* graphicsContext, c
onst LayoutStyle& style, const FloatRoundedRect& outerBorder, const FloatRounded
Rect& innerBorder, const IntPoint& innerBorderAdjustment, | 1594 void BoxPainter::paintTranslucentBorderSides(GraphicsContext* graphicsContext, c
onst ComputedStyle& style, const FloatRoundedRect& outerBorder, const FloatRound
edRect& innerBorder, const IntPoint& innerBorderAdjustment, |
1595 const BorderEdge edges[], BorderEdgeFlags edgesToDraw, BackgroundBleedAvoida
nce bleedAvoidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge, b
ool antialias) | 1595 const BorderEdge edges[], BorderEdgeFlags edgesToDraw, BackgroundBleedAvoida
nce bleedAvoidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge, b
ool antialias) |
1596 { | 1596 { |
1597 // willBeOverdrawn assumes that we draw in order: top, bottom, left, right. | 1597 // willBeOverdrawn assumes that we draw in order: top, bottom, left, right. |
1598 // This is different from BoxSide enum order. | 1598 // This is different from BoxSide enum order. |
1599 static const BoxSide paintOrder[] = { BSTop, BSBottom, BSLeft, BSRight }; | 1599 static const BoxSide paintOrder[] = { BSTop, BSBottom, BSLeft, BSRight }; |
1600 | 1600 |
1601 while (edgesToDraw) { | 1601 while (edgesToDraw) { |
1602 // Find undrawn edges sharing a color. | 1602 // Find undrawn edges sharing a color. |
1603 Color commonColor; | 1603 Color commonColor; |
1604 | 1604 |
(...skipping 30 matching lines...) Expand all Loading... |
1635 edgesToDraw &= ~commonColorEdgeSet; | 1635 edgesToDraw &= ~commonColorEdgeSet; |
1636 } | 1636 } |
1637 } | 1637 } |
1638 | 1638 |
1639 LayoutRect BoxPainter::borderInnerRectAdjustedForBleedAvoidance(GraphicsContext*
context, const LayoutRect& rect, BackgroundBleedAvoidance bleedAvoidance) | 1639 LayoutRect BoxPainter::borderInnerRectAdjustedForBleedAvoidance(GraphicsContext*
context, const LayoutRect& rect, BackgroundBleedAvoidance bleedAvoidance) |
1640 { | 1640 { |
1641 // We shrink the rectangle by one pixel on each side to make it fully overla
p the anti-aliased background border | 1641 // We shrink the rectangle by one pixel on each side to make it fully overla
p the anti-aliased background border |
1642 return (bleedAvoidance == BackgroundBleedBackgroundOverBorder) ? shrinkRectB
yOnePixel(context, rect) : rect; | 1642 return (bleedAvoidance == BackgroundBleedBackgroundOverBorder) ? shrinkRectB
yOnePixel(context, rect) : rect; |
1643 } | 1643 } |
1644 | 1644 |
1645 void BoxPainter::paintOneBorderSide(GraphicsContext* graphicsContext, const Layo
utStyle& style, const FloatRoundedRect& outerBorder, const FloatRoundedRect& inn
erBorder, | 1645 void BoxPainter::paintOneBorderSide(GraphicsContext* graphicsContext, const Comp
utedStyle& style, const FloatRoundedRect& outerBorder, const FloatRoundedRect& i
nnerBorder, |
1646 const FloatRect& sideRect, BoxSide side, BoxSide adjacentSide1, BoxSide adja
centSide2, const BorderEdge edges[], const Path* path, | 1646 const FloatRect& sideRect, BoxSide side, BoxSide adjacentSide1, BoxSide adja
centSide2, const BorderEdge edges[], const Path* path, |
1647 BackgroundBleedAvoidance bleedAvoidance, bool includeLogicalLeftEdge, bool i
ncludeLogicalRightEdge, bool antialias, const Color* overrideColor) | 1647 BackgroundBleedAvoidance bleedAvoidance, bool includeLogicalLeftEdge, bool i
ncludeLogicalRightEdge, bool antialias, const Color* overrideColor) |
1648 { | 1648 { |
1649 const BorderEdge& edgeToRender = edges[side]; | 1649 const BorderEdge& edgeToRender = edges[side]; |
1650 ASSERT(edgeToRender.width); | 1650 ASSERT(edgeToRender.width); |
1651 const BorderEdge& adjacentEdge1 = edges[adjacentSide1]; | 1651 const BorderEdge& adjacentEdge1 = edges[adjacentSide1]; |
1652 const BorderEdge& adjacentEdge2 = edges[adjacentSide2]; | 1652 const BorderEdge& adjacentEdge2 = edges[adjacentSide2]; |
1653 | 1653 |
1654 bool mitreAdjacentSide1 = joinRequiresMitre(side, adjacentSide1, edges, !ant
ialias); | 1654 bool mitreAdjacentSide1 = joinRequiresMitre(side, adjacentSide1, edges, !ant
ialias); |
1655 bool mitreAdjacentSide2 = joinRequiresMitre(side, adjacentSide2, edges, !ant
ialias); | 1655 bool mitreAdjacentSide2 = joinRequiresMitre(side, adjacentSide2, edges, !ant
ialias); |
(...skipping 26 matching lines...) Expand all Loading... |
1682 // Since we clipped, no need to draw with a mitre. | 1682 // Since we clipped, no need to draw with a mitre. |
1683 mitreAdjacentSide1 = false; | 1683 mitreAdjacentSide1 = false; |
1684 mitreAdjacentSide2 = false; | 1684 mitreAdjacentSide2 = false; |
1685 } | 1685 } |
1686 | 1686 |
1687 ObjectPainter::drawLineForBoxSide(graphicsContext, sideRect.x(), sideRec
t.y(), sideRect.maxX(), sideRect.maxY(), side, colorToPaint, edgeToRender.border
Style(), | 1687 ObjectPainter::drawLineForBoxSide(graphicsContext, sideRect.x(), sideRec
t.y(), sideRect.maxX(), sideRect.maxY(), side, colorToPaint, edgeToRender.border
Style(), |
1688 mitreAdjacentSide1 ? adjacentEdge1.width : 0, mitreAdjacentSide2 ? a
djacentEdge2.width : 0, antialias); | 1688 mitreAdjacentSide1 ? adjacentEdge1.width : 0, mitreAdjacentSide2 ? a
djacentEdge2.width : 0, antialias); |
1689 } | 1689 } |
1690 } | 1690 } |
1691 | 1691 |
1692 void BoxPainter::paintBorderSides(GraphicsContext* graphicsContext, const Layout
Style& style, const FloatRoundedRect& outerBorder, const FloatRoundedRect& inner
Border, | 1692 void BoxPainter::paintBorderSides(GraphicsContext* graphicsContext, const Comput
edStyle& style, const FloatRoundedRect& outerBorder, const FloatRoundedRect& inn
erBorder, |
1693 const IntPoint& innerBorderAdjustment, const BorderEdge edges[], BorderEdgeF
lags edgeSet, BackgroundBleedAvoidance bleedAvoidance, | 1693 const IntPoint& innerBorderAdjustment, const BorderEdge edges[], BorderEdgeF
lags edgeSet, BackgroundBleedAvoidance bleedAvoidance, |
1694 bool includeLogicalLeftEdge, bool includeLogicalRightEdge, bool antialias, c
onst Color* overrideColor) | 1694 bool includeLogicalLeftEdge, bool includeLogicalRightEdge, bool antialias, c
onst Color* overrideColor) |
1695 { | 1695 { |
1696 bool renderRadii = outerBorder.isRounded(); | 1696 bool renderRadii = outerBorder.isRounded(); |
1697 | 1697 |
1698 Path roundedPath; | 1698 Path roundedPath; |
1699 if (renderRadii) | 1699 if (renderRadii) |
1700 roundedPath.addRoundedRect(outerBorder); | 1700 roundedPath.addRoundedRect(outerBorder); |
1701 | 1701 |
1702 // The inner border adjustment for bleed avoidance mode BackgroundBleedBackg
roundOverBorder | 1702 // The inner border adjustment for bleed avoidance mode BackgroundBleedBackg
roundOverBorder |
(...skipping 28 matching lines...) Expand all Loading... |
1731 if (edges[BSRight].shouldRender() && includesEdge(edgeSet, BSRight)) { | 1731 if (edges[BSRight].shouldRender() && includesEdge(edgeSet, BSRight)) { |
1732 FloatRect sideRect = outerBorder.rect(); | 1732 FloatRect sideRect = outerBorder.rect(); |
1733 sideRect.shiftXEdgeTo(sideRect.maxX() - edges[BSRight].width - innerBord
erAdjustment.x()); | 1733 sideRect.shiftXEdgeTo(sideRect.maxX() - edges[BSRight].width - innerBord
erAdjustment.x()); |
1734 | 1734 |
1735 bool usePath = renderRadii && (borderStyleHasInnerDetail(edges[BSRight].
borderStyle()) || borderWillArcInnerEdge(innerBorder.radii().bottomRight(), inne
rBorder.radii().topRight())); | 1735 bool usePath = renderRadii && (borderStyleHasInnerDetail(edges[BSRight].
borderStyle()) || borderWillArcInnerEdge(innerBorder.radii().bottomRight(), inne
rBorder.radii().topRight())); |
1736 paintOneBorderSide(graphicsContext, style, outerBorder, innerBorder, sid
eRect, BSRight, BSTop, BSBottom, edges, usePath ? &roundedPath : 0, bleedAvoidan
ce, includeLogicalLeftEdge, includeLogicalRightEdge, antialias, overrideColor); | 1736 paintOneBorderSide(graphicsContext, style, outerBorder, innerBorder, sid
eRect, BSRight, BSTop, BSBottom, edges, usePath ? &roundedPath : 0, bleedAvoidan
ce, includeLogicalLeftEdge, includeLogicalRightEdge, antialias, overrideColor); |
1737 } | 1737 } |
1738 } | 1738 } |
1739 | 1739 |
1740 void BoxPainter::drawBoxSideFromPath(GraphicsContext* graphicsContext, const Lay
outRect& borderRect, const Path& borderPath, const BorderEdge edges[], | 1740 void BoxPainter::drawBoxSideFromPath(GraphicsContext* graphicsContext, const Lay
outRect& borderRect, const Path& borderPath, const BorderEdge edges[], |
1741 float thickness, float drawThickness, BoxSide side, const LayoutStyle& style
, Color color, EBorderStyle borderStyle, BackgroundBleedAvoidance bleedAvoidance
, | 1741 float thickness, float drawThickness, BoxSide side, const ComputedStyle& sty
le, Color color, EBorderStyle borderStyle, BackgroundBleedAvoidance bleedAvoidan
ce, |
1742 bool includeLogicalLeftEdge, bool includeLogicalRightEdge) | 1742 bool includeLogicalLeftEdge, bool includeLogicalRightEdge) |
1743 { | 1743 { |
1744 if (thickness <= 0) | 1744 if (thickness <= 0) |
1745 return; | 1745 return; |
1746 | 1746 |
1747 if (borderStyle == DOUBLE && thickness < 3) | 1747 if (borderStyle == DOUBLE && thickness < 3) |
1748 borderStyle = SOLID; | 1748 borderStyle = SOLID; |
1749 | 1749 |
1750 switch (borderStyle) { | 1750 switch (borderStyle) { |
1751 case BNONE: | 1751 case BNONE: |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1882 break; | 1882 break; |
1883 default: | 1883 default: |
1884 break; | 1884 break; |
1885 } | 1885 } |
1886 | 1886 |
1887 graphicsContext->setStrokeStyle(NoStroke); | 1887 graphicsContext->setStrokeStyle(NoStroke); |
1888 graphicsContext->setFillColor(color); | 1888 graphicsContext->setFillColor(color); |
1889 graphicsContext->drawRect(pixelSnappedIntRect(borderRect)); | 1889 graphicsContext->drawRect(pixelSnappedIntRect(borderRect)); |
1890 } | 1890 } |
1891 | 1891 |
1892 void BoxPainter::paintBoxShadow(const PaintInfo& info, const LayoutRect& paintRe
ct, const LayoutStyle& style, ShadowStyle shadowStyle, bool includeLogicalLeftEd
ge, bool includeLogicalRightEdge) | 1892 void BoxPainter::paintBoxShadow(const PaintInfo& info, const LayoutRect& paintRe
ct, const ComputedStyle& style, ShadowStyle shadowStyle, bool includeLogicalLeft
Edge, bool includeLogicalRightEdge) |
1893 { | 1893 { |
1894 // FIXME: Deal with border-image. Would be great to use border-image as a ma
sk. | 1894 // FIXME: Deal with border-image. Would be great to use border-image as a ma
sk. |
1895 GraphicsContext* context = info.context; | 1895 GraphicsContext* context = info.context; |
1896 if (!style.boxShadow()) | 1896 if (!style.boxShadow()) |
1897 return; | 1897 return; |
1898 FloatRoundedRect border = (shadowStyle == Inset) ? style.getRoundedInnerBord
erFor(paintRect, includeLogicalLeftEdge, includeLogicalRightEdge) | 1898 FloatRoundedRect border = (shadowStyle == Inset) ? style.getRoundedInnerBord
erFor(paintRect, includeLogicalLeftEdge, includeLogicalRightEdge) |
1899 : style.getRoundedBorderFor(paintRect, includeLogicalLeftEdge, includeLo
gicalRightEdge); | 1899 : style.getRoundedBorderFor(paintRect, includeLogicalLeftEdge, includeLo
gicalRightEdge); |
1900 | 1900 |
1901 bool hasBorderRadius = style.hasBorderRadius(); | 1901 bool hasBorderRadius = style.hasBorderRadius(); |
1902 bool isHorizontal = style.isHorizontalWritingMode(); | 1902 bool isHorizontal = style.isHorizontalWritingMode(); |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2202 | 2202 |
2203 FloatPoint secondQuad[4]; | 2203 FloatPoint secondQuad[4]; |
2204 secondQuad[0] = quad[0]; | 2204 secondQuad[0] = quad[0]; |
2205 secondQuad[1] = FloatPoint(quad[0].x() - r1 * cx, quad[0].y() - r1 * cy); | 2205 secondQuad[1] = FloatPoint(quad[0].x() - r1 * cx, quad[0].y() - r1 * cy); |
2206 secondQuad[2] = quad[2]; | 2206 secondQuad[2] = quad[2]; |
2207 secondQuad[3] = quad[3]; | 2207 secondQuad[3] = quad[3]; |
2208 graphicsContext->clipPolygon(4, secondQuad, !secondEdgeMatches); | 2208 graphicsContext->clipPolygon(4, secondQuad, !secondEdgeMatches); |
2209 } | 2209 } |
2210 | 2210 |
2211 } // namespace blink | 2211 } // namespace blink |
OLD | NEW |