| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> |
| 4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. |
| 5 * Copyright (C) 2011 Dirk Schulze <krit@webkit.org> | 5 * Copyright (C) 2011 Dirk Schulze <krit@webkit.org> |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 { | 222 { |
| 223 ASSERT(context); | 223 ASSERT(context); |
| 224 | 224 |
| 225 AffineTransform contentTransformation; | 225 AffineTransform contentTransformation; |
| 226 if (clipPathUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { | 226 if (clipPathUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { |
| 227 contentTransformation.translate(targetBoundingBox.x(), targetBoundingBox
.y()); | 227 contentTransformation.translate(targetBoundingBox.x(), targetBoundingBox
.y()); |
| 228 contentTransformation.scaleNonUniform(targetBoundingBox.width(), targetB
oundingBox.height()); | 228 contentTransformation.scaleNonUniform(targetBoundingBox.width(), targetB
oundingBox.height()); |
| 229 context->concatCTM(contentTransformation); | 229 context->concatCTM(contentTransformation); |
| 230 } | 230 } |
| 231 | 231 |
| 232 if (!m_clipContentDisplayList) | 232 if (!m_clipContentDisplayList) { |
| 233 createDisplayList(context, contentTransformation); | 233 SubtreeContentTransformScope contentTransformScope(contentTransformation
); |
| 234 createDisplayList(context); |
| 235 } |
| 234 | 236 |
| 235 ASSERT(m_clipContentDisplayList); | 237 ASSERT(m_clipContentDisplayList); |
| 236 context->drawDisplayList(m_clipContentDisplayList.get()); | 238 context->drawDisplayList(m_clipContentDisplayList.get()); |
| 237 } | 239 } |
| 238 | 240 |
| 239 void RenderSVGResourceClipper::createDisplayList(GraphicsContext* context, | 241 void RenderSVGResourceClipper::createDisplayList(GraphicsContext* context) |
| 240 const AffineTransform& contentTransformation) | |
| 241 { | 242 { |
| 242 ASSERT(context); | 243 ASSERT(context); |
| 243 ASSERT(frame()); | 244 ASSERT(frame()); |
| 244 | 245 |
| 245 // Using strokeBoundingBox (instead of paintInvalidationRectInLocalCoordinat
es) to avoid the intersection | 246 // Using strokeBoundingBox (instead of paintInvalidationRectInLocalCoordinat
es) to avoid the intersection |
| 246 // with local clips/mask, which may yield incorrect results when mixing obje
ctBoundingBox and | 247 // with local clips/mask, which may yield incorrect results when mixing obje
ctBoundingBox and |
| 247 // userSpaceOnUse units (http://crbug.com/294900). | 248 // userSpaceOnUse units (http://crbug.com/294900). |
| 248 FloatRect bounds = strokeBoundingBox(); | 249 FloatRect bounds = strokeBoundingBox(); |
| 249 context->beginRecording(bounds); | 250 context->beginRecording(bounds); |
| 250 | 251 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 278 | 279 |
| 279 // Only shapes, paths and texts are allowed for clipping. | 280 // Only shapes, paths and texts are allowed for clipping. |
| 280 if (!renderer->isSVGShape() && !renderer->isSVGText()) | 281 if (!renderer->isSVGShape() && !renderer->isSVGText()) |
| 281 continue; | 282 continue; |
| 282 | 283 |
| 283 context->setFillRule(newClipRule); | 284 context->setFillRule(newClipRule); |
| 284 | 285 |
| 285 if (isUseElement) | 286 if (isUseElement) |
| 286 renderer = childElement->renderer(); | 287 renderer = childElement->renderer(); |
| 287 | 288 |
| 288 SVGRenderingContext::renderSubtree(context, renderer, contentTransformat
ion); | 289 SVGRenderingContext::renderSubtree(context, renderer); |
| 289 } | 290 } |
| 290 | 291 |
| 291 frame()->view()->setPaintBehavior(oldBehavior); | 292 frame()->view()->setPaintBehavior(oldBehavior); |
| 292 | 293 |
| 293 m_clipContentDisplayList = context->endRecording(); | 294 m_clipContentDisplayList = context->endRecording(); |
| 294 } | 295 } |
| 295 | 296 |
| 296 void RenderSVGResourceClipper::calculateClipContentPaintInvalidationRect() | 297 void RenderSVGResourceClipper::calculateClipContentPaintInvalidationRect() |
| 297 { | 298 { |
| 298 // This is a rough heuristic to appraise the clip size and doesn't consider
clip on clip. | 299 // This is a rough heuristic to appraise the clip size and doesn't consider
clip on clip. |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 AffineTransform transform; | 359 AffineTransform transform; |
| 359 transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); | 360 transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); |
| 360 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h
eight()); | 361 transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.h
eight()); |
| 361 return transform.mapRect(m_clipBoundaries); | 362 return transform.mapRect(m_clipBoundaries); |
| 362 } | 363 } |
| 363 | 364 |
| 364 return m_clipBoundaries; | 365 return m_clipBoundaries; |
| 365 } | 366 } |
| 366 | 367 |
| 367 } | 368 } |
| OLD | NEW |