Chromium Code Reviews| 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 "core/paint/SVGShapePainter.h" | 5 #include "core/paint/SVGShapePainter.h" |
| 6 | 6 |
| 7 #include "core/layout/svg/LayoutSVGResourceMarker.h" | 7 #include "core/layout/svg/LayoutSVGResourceMarker.h" |
| 8 #include "core/layout/svg/LayoutSVGShape.h" | 8 #include "core/layout/svg/LayoutSVGShape.h" |
| 9 #include "core/layout/svg/SVGLayoutSupport.h" | 9 #include "core/layout/svg/SVGLayoutSupport.h" |
| 10 #include "core/layout/svg/SVGMarkerData.h" | 10 #include "core/layout/svg/SVGMarkerData.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 44 } | 44 } |
| 45 | 45 |
| 46 void SVGShapePainter::paint(const PaintInfo& paintInfo) { | 46 void SVGShapePainter::paint(const PaintInfo& paintInfo) { |
| 47 if (paintInfo.phase != PaintPhaseForeground || | 47 if (paintInfo.phase != PaintPhaseForeground || |
| 48 m_layoutSVGShape.style()->visibility() != EVisibility::Visible || | 48 m_layoutSVGShape.style()->visibility() != EVisibility::Visible || |
| 49 m_layoutSVGShape.isShapeEmpty()) | 49 m_layoutSVGShape.isShapeEmpty()) |
| 50 return; | 50 return; |
| 51 | 51 |
| 52 FloatRect boundingBox = | 52 FloatRect boundingBox = |
| 53 m_layoutSVGShape.paintInvalidationRectInLocalSVGCoordinates(); | 53 m_layoutSVGShape.paintInvalidationRectInLocalSVGCoordinates(); |
| 54 if (!paintInfo.cullRect().intersectsCullRect( | |
| 55 m_layoutSVGShape.localSVGTransform(), boundingBox)) | |
| 56 return; | |
| 57 | 54 |
| 58 PaintInfo paintInfoBeforeFiltering(paintInfo); | 55 PaintInfo paintInfoBeforeFiltering(paintInfo); |
| 59 // Shapes cannot have children so do not call updateCullRect. | 56 // Shapes cannot have children so do not call updateCullRect. |
| 60 SVGTransformContext transformContext(paintInfoBeforeFiltering.context, | 57 SVGTransformContext transformContext(paintInfoBeforeFiltering.context, |
| 61 m_layoutSVGShape, | 58 m_layoutSVGShape, |
| 62 m_layoutSVGShape.localSVGTransform()); | 59 m_layoutSVGShape.localSVGTransform()); |
| 63 { | 60 { |
| 64 SVGPaintContext paintContext(m_layoutSVGShape, paintInfoBeforeFiltering); | 61 SVGPaintContext paintContext(m_layoutSVGShape, paintInfoBeforeFiltering); |
| 65 if (paintContext.applyClipMaskAndFilterIfNecessary() && | 62 if (paintContext.applyClipMaskAndFilterIfNecessary() && |
| 66 !LayoutObjectDrawingRecorder::useCachedDrawingIfPossible( | 63 !LayoutObjectDrawingRecorder::useCachedDrawingIfPossible( |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 127 paintMarkers(paintContext.paintInfo(), boundingBox); | 124 paintMarkers(paintContext.paintInfo(), boundingBox); |
| 128 break; | 125 break; |
| 129 default: | 126 default: |
| 130 ASSERT_NOT_REACHED(); | 127 ASSERT_NOT_REACHED(); |
| 131 break; | 128 break; |
| 132 } | 129 } |
| 133 } | 130 } |
| 134 } | 131 } |
| 135 } | 132 } |
| 136 | 133 |
| 134 if (!paintInfo.cullRect().intersectsCullRect( | |
|
fs
2016/10/31 09:59:22
This does not look like the right fix. Here you're
hyunjunekim2
2016/10/31 13:18:30
I will check it for the right fix.
| |
| 135 m_layoutSVGShape.localSVGTransform(), boundingBox)) | |
| 136 return; | |
| 137 | |
| 137 if (m_layoutSVGShape.style()->outlineWidth()) { | 138 if (m_layoutSVGShape.style()->outlineWidth()) { |
| 138 PaintInfo outlinePaintInfo(paintInfoBeforeFiltering); | 139 PaintInfo outlinePaintInfo(paintInfoBeforeFiltering); |
| 139 outlinePaintInfo.phase = PaintPhaseSelfOutlineOnly; | 140 outlinePaintInfo.phase = PaintPhaseSelfOutlineOnly; |
| 140 ObjectPainter(m_layoutSVGShape) | 141 ObjectPainter(m_layoutSVGShape) |
| 141 .paintOutline(outlinePaintInfo, LayoutPoint(boundingBox.location())); | 142 .paintOutline(outlinePaintInfo, LayoutPoint(boundingBox.location())); |
| 142 } | 143 } |
| 143 } | 144 } |
| 144 | 145 |
| 145 class PathWithTemporaryWindingRule { | 146 class PathWithTemporaryWindingRule { |
| 146 public: | 147 public: |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 247 marker.markerTransformation(position.origin, position.angle, | 248 marker.markerTransformation(position.origin, position.angle, |
| 248 strokeWidth)); | 249 strokeWidth)); |
| 249 Optional<FloatClipRecorder> clipRecorder; | 250 Optional<FloatClipRecorder> clipRecorder; |
| 250 if (SVGLayoutSupport::isOverflowHidden(&marker)) | 251 if (SVGLayoutSupport::isOverflowHidden(&marker)) |
| 251 clipRecorder.emplace(paintInfo.context, marker, paintInfo.phase, | 252 clipRecorder.emplace(paintInfo.context, marker, paintInfo.phase, |
| 252 marker.viewport()); | 253 marker.viewport()); |
| 253 SVGContainerPainter(marker).paint(paintInfo); | 254 SVGContainerPainter(marker).paint(paintInfo); |
| 254 } | 255 } |
| 255 | 256 |
| 256 } // namespace blink | 257 } // namespace blink |
| OLD | NEW |