OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> |
3 * Copyright (C) 2004, 2005, 2008 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2008 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2005, 2007 Eric Seidel <eric@webkit.org> | 4 * Copyright (C) 2005, 2007 Eric Seidel <eric@webkit.org> |
5 * Copyright (C) 2009 Google, Inc. | 5 * Copyright (C) 2009 Google, Inc. |
6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
8 * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com> | 8 * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com> |
9 * Copyright (C) 2011 Renata Hodovan <reni@webkit.org> | 9 * Copyright (C) 2011 Renata Hodovan <reni@webkit.org> |
10 * Copyright (C) 2011 University of Szeged | 10 * Copyright (C) 2011 University of Szeged |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 RenderSVGResourceSolidColor* fallbackResource = RenderSVGResource::s
haredSolidPaintingResource(); | 228 RenderSVGResourceSolidColor* fallbackResource = RenderSVGResource::s
haredSolidPaintingResource(); |
229 if (fallbackResource->applyResource(this, style, context, ApplyToStr
okeMode)) | 229 if (fallbackResource->applyResource(this, style, context, ApplyToStr
okeMode)) |
230 fallbackResource->postApplyResource(this, context, ApplyToStroke
Mode, 0, this); | 230 fallbackResource->postApplyResource(this, context, ApplyToStroke
Mode, 0, this); |
231 } | 231 } |
232 } | 232 } |
233 } | 233 } |
234 | 234 |
235 void RenderSVGShape::paint(PaintInfo& paintInfo, const LayoutPoint&) | 235 void RenderSVGShape::paint(PaintInfo& paintInfo, const LayoutPoint&) |
236 { | 236 { |
237 ANNOTATE_GRAPHICS_CONTEXT(paintInfo, this); | 237 ANNOTATE_GRAPHICS_CONTEXT(paintInfo, this); |
| 238 if (paintInfo.context->paintingDisabled() |
| 239 || paintInfo.phase != PaintPhaseForeground |
| 240 || style()->visibility() == HIDDEN |
| 241 || isShapeEmpty()) |
| 242 return; |
238 | 243 |
239 if (paintInfo.context->paintingDisabled() || style()->visibility() == HIDDEN
|| isShapeEmpty()) | |
240 return; | |
241 FloatRect boundingBox = repaintRectInLocalCoordinates(); | 244 FloatRect boundingBox = repaintRectInLocalCoordinates(); |
242 if (!SVGRenderSupport::paintInfoIntersectsRepaintRect(boundingBox, m_localTr
ansform, paintInfo)) | 245 if (!SVGRenderSupport::paintInfoIntersectsRepaintRect(boundingBox, m_localTr
ansform, paintInfo)) |
243 return; | 246 return; |
244 | 247 |
245 PaintInfo childPaintInfo(paintInfo); | 248 PaintInfo childPaintInfo(paintInfo); |
246 bool drawsOutline = style()->outlineWidth() && (childPaintInfo.phase == Pain
tPhaseOutline || childPaintInfo.phase == PaintPhaseSelfOutline); | |
247 if (drawsOutline || childPaintInfo.phase == PaintPhaseForeground) { | |
248 GraphicsContextStateSaver stateSaver(*childPaintInfo.context); | |
249 childPaintInfo.applyTransform(m_localTransform); | |
250 | 249 |
251 if (childPaintInfo.phase == PaintPhaseForeground) { | 250 GraphicsContextStateSaver stateSaver(*childPaintInfo.context); |
252 SVGRenderingContext renderingContext(this, childPaintInfo); | 251 childPaintInfo.applyTransform(m_localTransform); |
253 | 252 |
254 if (renderingContext.isRenderingPrepared()) { | 253 SVGRenderingContext renderingContext(this, childPaintInfo); |
255 const SVGRenderStyle* svgStyle = style()->svgStyle(); | |
256 if (svgStyle->shapeRendering() == SR_CRISPEDGES) | |
257 childPaintInfo.context->setShouldAntialias(false); | |
258 | 254 |
259 for (int i = 0; i < 3; i++) { | 255 if (renderingContext.isRenderingPrepared()) { |
260 switch (svgStyle->paintOrderType(i)) { | 256 const SVGRenderStyle* svgStyle = style()->svgStyle(); |
261 case PT_FILL: | 257 if (svgStyle->shapeRendering() == SR_CRISPEDGES) |
262 fillShape(this->style(), childPaintInfo.context); | 258 childPaintInfo.context->setShouldAntialias(false); |
263 break; | |
264 case PT_STROKE: | |
265 if (svgStyle->hasVisibleStroke()) { | |
266 GraphicsContextStateSaver stateSaver(*childPaintInfo
.context, false); | |
267 AffineTransform nonScalingTransform; | |
268 | 259 |
269 if (hasNonScalingStroke()) { | 260 for (int i = 0; i < 3; i++) { |
270 AffineTransform nonScalingTransform = nonScaling
StrokeTransform(); | 261 switch (svgStyle->paintOrderType(i)) { |
271 if (!setupNonScalingStrokeContext(nonScalingTran
sform, stateSaver)) | 262 case PT_FILL: |
272 return; | 263 fillShape(this->style(), childPaintInfo.context); |
273 } | 264 break; |
| 265 case PT_STROKE: |
| 266 if (svgStyle->hasVisibleStroke()) { |
| 267 GraphicsContextStateSaver stateSaver(*childPaintInfo.context
, false); |
| 268 AffineTransform nonScalingTransform; |
274 | 269 |
275 strokeShape(this->style(), childPaintInfo.context); | 270 if (hasNonScalingStroke()) { |
276 } | 271 AffineTransform nonScalingTransform = nonScalingStrokeTr
ansform(); |
277 break; | 272 if (!setupNonScalingStrokeContext(nonScalingTransform, s
tateSaver)) |
278 case PT_MARKERS: | 273 return; |
279 if (!m_markerPositions.isEmpty()) | |
280 drawMarkers(childPaintInfo); | |
281 break; | |
282 default: | |
283 ASSERT_NOT_REACHED(); | |
284 break; | |
285 } | 274 } |
| 275 |
| 276 strokeShape(this->style(), childPaintInfo.context); |
286 } | 277 } |
| 278 break; |
| 279 case PT_MARKERS: |
| 280 if (!m_markerPositions.isEmpty()) |
| 281 drawMarkers(childPaintInfo); |
| 282 break; |
| 283 default: |
| 284 ASSERT_NOT_REACHED(); |
| 285 break; |
287 } | 286 } |
288 } | 287 } |
| 288 } |
289 | 289 |
290 if (drawsOutline) | 290 if (style()->outlineWidth()) |
291 paintOutline(childPaintInfo, IntRect(boundingBox)); | 291 paintOutline(childPaintInfo, IntRect(boundingBox)); |
292 } | |
293 } | 292 } |
294 | 293 |
295 // This method is called from inside paintOutline() since we call paintOutline() | 294 // This method is called from inside paintOutline() since we call paintOutline() |
296 // while transformed to our coord system, return local coords | 295 // while transformed to our coord system, return local coords |
297 void RenderSVGShape::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint
&, const RenderLayerModelObject*) | 296 void RenderSVGShape::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint
&, const RenderLayerModelObject*) |
298 { | 297 { |
299 IntRect rect = enclosingIntRect(repaintRectInLocalCoordinates()); | 298 IntRect rect = enclosingIntRect(repaintRectInLocalCoordinates()); |
300 if (!rect.isEmpty()) | 299 if (!rect.isEmpty()) |
301 rects.append(rect); | 300 rects.append(rect); |
302 } | 301 } |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 return; | 457 return; |
459 | 458 |
460 ASSERT(m_path); | 459 ASSERT(m_path); |
461 | 460 |
462 SVGMarkerData markerData(m_markerPositions); | 461 SVGMarkerData markerData(m_markerPositions); |
463 m_path->apply(&markerData, SVGMarkerData::updateFromPathElement); | 462 m_path->apply(&markerData, SVGMarkerData::updateFromPathElement); |
464 markerData.pathIsDone(); | 463 markerData.pathIsDone(); |
465 } | 464 } |
466 | 465 |
467 } | 466 } |
OLD | NEW |