OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "core/paint/BoxBorderPainter.h" | 5 #include "core/paint/BoxBorderPainter.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include "core/paint/BoxPainter.h" | 8 #include "core/paint/BoxPainter.h" |
9 #include "core/paint/ObjectPainter.h" | 9 #include "core/paint/ObjectPainter.h" |
10 #include "core/paint/PaintInfo.h" | 10 #include "core/paint/PaintInfo.h" |
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
731 borderInfo.opacityGroups[opacityGroupCount - index - 1]; | 731 borderInfo.opacityGroups[opacityGroupCount - index - 1]; |
732 | 732 |
733 // Adjust this group's paint opacity to account for ancestor transparency | 733 // Adjust this group's paint opacity to account for ancestor transparency |
734 // layers (needed in case we avoid creating a layer below). | 734 // layers (needed in case we avoid creating a layer below). |
735 unsigned paintAlpha = group.alpha / effectiveOpacity; | 735 unsigned paintAlpha = group.alpha / effectiveOpacity; |
736 DCHECK_LE(paintAlpha, 255u); | 736 DCHECK_LE(paintAlpha, 255u); |
737 | 737 |
738 // For the last (bottom) group, we can skip the layer even in the presence of | 738 // For the last (bottom) group, we can skip the layer even in the presence of |
739 // opacity iff it contains no adjecent edges (no in-group overdraw | 739 // opacity iff it contains no adjecent edges (no in-group overdraw |
740 // possibility). | 740 // possibility). |
741 bool needsLayer = | 741 bool needsLayer = group.alpha != 255 && |
742 group.alpha != 255 && (includesAdjacentEdges(group.edgeFlags) || | 742 (includesAdjacentEdges(group.edgeFlags) || |
743 (index + 1 < borderInfo.opacityGroups.size())); | 743 (index + 1 < borderInfo.opacityGroups.size())); |
744 | 744 |
745 if (needsLayer) { | 745 if (needsLayer) { |
746 const float groupOpacity = static_cast<float>(group.alpha) / 255; | 746 const float groupOpacity = static_cast<float>(group.alpha) / 255; |
747 DCHECK_LT(groupOpacity, effectiveOpacity); | 747 DCHECK_LT(groupOpacity, effectiveOpacity); |
748 | 748 |
749 context.beginLayer(groupOpacity / effectiveOpacity); | 749 context.beginLayer(groupOpacity / effectiveOpacity); |
750 effectiveOpacity = groupOpacity; | 750 effectiveOpacity = groupOpacity; |
751 | 751 |
752 // Group opacity is applied via a layer => we draw the members using opaque | 752 // Group opacity is applied via a layer => we draw the members using opaque |
753 // paint. | 753 // paint. |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
885 bool BoxBorderPainter::mitersRequireClipping(MiterType miter1, | 885 bool BoxBorderPainter::mitersRequireClipping(MiterType miter1, |
886 MiterType miter2, | 886 MiterType miter2, |
887 EBorderStyle style, | 887 EBorderStyle style, |
888 bool antialias) { | 888 bool antialias) { |
889 // Clipping is required if any of the present miters doesn't match the current | 889 // Clipping is required if any of the present miters doesn't match the current |
890 // AA mode. | 890 // AA mode. |
891 bool shouldClip = antialias ? miter1 == HardMiter || miter2 == HardMiter | 891 bool shouldClip = antialias ? miter1 == HardMiter || miter2 == HardMiter |
892 : miter1 == SoftMiter || miter2 == SoftMiter; | 892 : miter1 == SoftMiter || miter2 == SoftMiter; |
893 | 893 |
894 // Some styles require clipping for any type of miter. | 894 // Some styles require clipping for any type of miter. |
895 shouldClip = shouldClip || ((miter1 != NoMiter || miter2 != NoMiter) && | 895 shouldClip = shouldClip || |
896 styleRequiresClipPolygon(style)); | 896 ((miter1 != NoMiter || miter2 != NoMiter) && |
| 897 styleRequiresClipPolygon(style)); |
897 | 898 |
898 return shouldClip; | 899 return shouldClip; |
899 } | 900 } |
900 | 901 |
901 void BoxBorderPainter::paintOneBorderSide( | 902 void BoxBorderPainter::paintOneBorderSide( |
902 GraphicsContext& graphicsContext, | 903 GraphicsContext& graphicsContext, |
903 const FloatRect& sideRect, | 904 const FloatRect& sideRect, |
904 BoxSide side, | 905 BoxSide side, |
905 BoxSide adjacentSide1, | 906 BoxSide adjacentSide1, |
906 BoxSide adjacentSide2, | 907 BoxSide adjacentSide2, |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1294 FloatPoint secondQuad[4]; | 1295 FloatPoint secondQuad[4]; |
1295 secondQuad[0] = quad[0]; | 1296 secondQuad[0] = quad[0]; |
1296 secondQuad[1] = FloatPoint(quad[0].x() - r1 * cx, quad[0].y() - r1 * cy); | 1297 secondQuad[1] = FloatPoint(quad[0].x() - r1 * cx, quad[0].y() - r1 * cy); |
1297 secondQuad[2] = quad[2]; | 1298 secondQuad[2] = quad[2]; |
1298 secondQuad[3] = quad[3]; | 1299 secondQuad[3] = quad[3]; |
1299 clipQuad(graphicsContext, secondQuad, secondMiter == SoftMiter); | 1300 clipQuad(graphicsContext, secondQuad, secondMiter == SoftMiter); |
1300 } | 1301 } |
1301 } | 1302 } |
1302 | 1303 |
1303 } // namespace blink | 1304 } // namespace blink |
OLD | NEW |