Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(509)

Side by Side Diff: third_party/WebKit/Source/core/paint/SVGShapePainter.cpp

Issue 2753013004: Apply SVG styles paint-order, stroke-linejoin, and stroke-linecap on DOM text
Patch Set: Apply SVG styles paint-order, stroke-linejoin, and stroke-linecap on DOM text Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 paintContext.paintInfo().phase)) { 66 paintContext.paintInfo().phase)) {
67 LayoutObjectDrawingRecorder recorder( 67 LayoutObjectDrawingRecorder recorder(
68 paintContext.paintInfo().context, m_layoutSVGShape, 68 paintContext.paintInfo().context, m_layoutSVGShape,
69 paintContext.paintInfo().phase, boundingBox); 69 paintContext.paintInfo().phase, boundingBox);
70 const SVGComputedStyle& svgStyle = m_layoutSVGShape.style()->svgStyle(); 70 const SVGComputedStyle& svgStyle = m_layoutSVGShape.style()->svgStyle();
71 71
72 bool shouldAntiAlias = svgStyle.shapeRendering() != SR_CRISPEDGES && 72 bool shouldAntiAlias = svgStyle.shapeRendering() != SR_CRISPEDGES &&
73 svgStyle.shapeRendering() != SR_OPTIMIZESPEED; 73 svgStyle.shapeRendering() != SR_OPTIMIZESPEED;
74 74
75 for (int i = 0; i < 3; i++) { 75 for (int i = 0; i < 3; i++) {
76 switch (svgStyle.paintOrderType(i)) { 76 switch (m_layoutSVGShape.style()->paintOrderType(i)) {
77 case PT_FILL: { 77 case PT_FILL: {
78 PaintFlags fillFlags; 78 PaintFlags fillFlags;
79 if (!SVGPaintContext::paintForLayoutObject( 79 if (!SVGPaintContext::paintForLayoutObject(
80 paintContext.paintInfo(), m_layoutSVGShape.styleRef(), 80 paintContext.paintInfo(), m_layoutSVGShape.styleRef(),
81 m_layoutSVGShape, ApplyToFillMode, fillFlags)) 81 m_layoutSVGShape, ApplyToFillMode, fillFlags))
82 break; 82 break;
83 fillFlags.setAntiAlias(shouldAntiAlias); 83 fillFlags.setAntiAlias(shouldAntiAlias);
84 fillShape(paintContext.paintInfo().context, fillFlags, 84 fillShape(paintContext.paintInfo().context, fillFlags,
85 fillRuleFromStyle(paintContext.paintInfo(), svgStyle)); 85 fillRuleFromStyle(paintContext.paintInfo(), svgStyle));
86 break; 86 break;
87 } 87 }
88 case PT_STROKE: 88 case PT_STROKE:
89 if (svgStyle.hasVisibleStroke()) { 89 if (m_layoutSVGShape.style()->hasVisibleStroke()) {
90 GraphicsContextStateSaver stateSaver( 90 GraphicsContextStateSaver stateSaver(
91 paintContext.paintInfo().context, false); 91 paintContext.paintInfo().context, false);
92 AffineTransform nonScalingTransform; 92 AffineTransform nonScalingTransform;
93 const AffineTransform* additionalPaintServerTransform = 0; 93 const AffineTransform* additionalPaintServerTransform = 0;
94 94
95 if (m_layoutSVGShape.hasNonScalingStroke()) { 95 if (m_layoutSVGShape.hasNonScalingStroke()) {
96 nonScalingTransform = 96 nonScalingTransform =
97 m_layoutSVGShape.nonScalingStrokeTransform(); 97 m_layoutSVGShape.nonScalingStrokeTransform();
98 if (!setupNonScalingStrokeContext(nonScalingTransform, 98 if (!setupNonScalingStrokeContext(nonScalingTransform,
99 stateSaver)) 99 stateSaver))
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 default: { 169 default: {
170 PathWithTemporaryWindingRule pathWithWinding(m_layoutSVGShape.path(), 170 PathWithTemporaryWindingRule pathWithWinding(m_layoutSVGShape.path(),
171 fillType); 171 fillType);
172 context.drawPath(pathWithWinding.getSkPath(), flags); 172 context.drawPath(pathWithWinding.getSkPath(), flags);
173 } 173 }
174 } 174 }
175 } 175 }
176 176
177 void SVGShapePainter::strokeShape(GraphicsContext& context, 177 void SVGShapePainter::strokeShape(GraphicsContext& context,
178 const PaintFlags& flags) { 178 const PaintFlags& flags) {
179 if (!m_layoutSVGShape.style()->svgStyle().hasVisibleStroke()) 179 if (!m_layoutSVGShape.style()->hasVisibleStroke())
180 return; 180 return;
181 181
182 switch (m_layoutSVGShape.geometryCodePath()) { 182 switch (m_layoutSVGShape.geometryCodePath()) {
183 case RectGeometryFastPath: 183 case RectGeometryFastPath:
184 context.drawRect(m_layoutSVGShape.objectBoundingBox(), flags); 184 context.drawRect(m_layoutSVGShape.objectBoundingBox(), flags);
185 break; 185 break;
186 case EllipseGeometryFastPath: 186 case EllipseGeometryFastPath:
187 context.drawOval(m_layoutSVGShape.objectBoundingBox(), flags); 187 context.drawOval(m_layoutSVGShape.objectBoundingBox(), flags);
188 break; 188 break;
189 default: 189 default:
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 marker.markerTransformation(position.origin, position.angle, 245 marker.markerTransformation(position.origin, position.angle,
246 strokeWidth)); 246 strokeWidth));
247 Optional<FloatClipRecorder> clipRecorder; 247 Optional<FloatClipRecorder> clipRecorder;
248 if (SVGLayoutSupport::isOverflowHidden(&marker)) 248 if (SVGLayoutSupport::isOverflowHidden(&marker))
249 clipRecorder.emplace(paintInfo.context, marker, paintInfo.phase, 249 clipRecorder.emplace(paintInfo.context, marker, paintInfo.phase,
250 marker.viewport()); 250 marker.viewport());
251 SVGContainerPainter(marker).paint(paintInfo); 251 SVGContainerPainter(marker).paint(paintInfo);
252 } 252 }
253 253
254 } // namespace blink 254 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp ('k') | third_party/WebKit/Source/core/style/ComputedStyle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698