OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 * Library General Public License for more details. | 12 * Library General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU Library General Public License | 14 * You should have received a copy of the GNU Library General Public License |
15 * along with this library; see the file COPYING.LIB. If not, write to | 15 * along with this library; see the file COPYING.LIB. If not, write to |
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
17 * Boston, MA 02110-1301, USA. | 17 * Boston, MA 02110-1301, USA. |
18 */ | 18 */ |
19 | 19 |
20 #include "config.h" | 20 #include "config.h" |
21 | |
22 #include "core/rendering/svg/RenderSVGResourceContainer.h" | 21 #include "core/rendering/svg/RenderSVGResourceContainer.h" |
23 | 22 |
24 #include "core/rendering/RenderLayer.h" | 23 #include "core/rendering/RenderLayer.h" |
25 #include "core/rendering/RenderView.h" | |
26 #include "core/rendering/svg/SVGRenderingContext.h" | |
27 #include "core/rendering/svg/SVGResourcesCache.h" | 24 #include "core/rendering/svg/SVGResourcesCache.h" |
28 #include "core/svg/SVGGraphicsElement.h" | |
29 | 25 |
30 #include "wtf/TemporaryChange.h" | 26 #include "wtf/TemporaryChange.h" |
31 | 27 |
32 namespace blink { | 28 namespace blink { |
33 | 29 |
34 static inline SVGDocumentExtensions& svgExtensionsFromElement(SVGElement* elemen
t) | 30 static inline SVGDocumentExtensions& svgExtensionsFromElement(SVGElement* elemen
t) |
35 { | 31 { |
36 ASSERT(element); | 32 ASSERT(element); |
37 return element->document().accessSVGExtensions(); | 33 return element->document().accessSVGExtensions(); |
38 } | 34 } |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 if (!renderer) | 219 if (!renderer) |
224 continue; | 220 continue; |
225 | 221 |
226 StyleDifference diff; | 222 StyleDifference diff; |
227 diff.setNeedsFullLayout(); | 223 diff.setNeedsFullLayout(); |
228 SVGResourcesCache::clientStyleChanged(renderer, diff, renderer->style())
; | 224 SVGResourcesCache::clientStyleChanged(renderer, diff, renderer->style())
; |
229 renderer->setNeedsLayoutAndFullPaintInvalidation(); | 225 renderer->setNeedsLayoutAndFullPaintInvalidation(); |
230 } | 226 } |
231 } | 227 } |
232 | 228 |
233 static bool shouldTransformOnTextPainting(RenderObject* object, AffineTransform&
resourceTransform) | |
234 { | |
235 ASSERT(object); | |
236 | |
237 // This method should only be called for RenderObjects that deal with text r
endering. Cmp. RenderObject.h's is*() methods. | |
238 ASSERT(object->isSVGText() || object->isSVGTextPath() || object->isSVGInline
()); | |
239 | |
240 // In text drawing, the scaling part of the graphics context CTM is removed,
compare SVGInlineTextBox::paintTextWithShadows. | |
241 // So, we use that scaling factor here, too, and then push it down to patter
n or gradient space | |
242 // in order to keep the pattern or gradient correctly scaled. | |
243 float scalingFactor = SVGRenderingContext::calculateScreenFontSizeScalingFac
tor(object); | |
244 if (scalingFactor == 1) | |
245 return false; | |
246 resourceTransform.scale(scalingFactor); | |
247 return true; | |
248 } | 229 } |
249 | |
250 AffineTransform RenderSVGResourceContainer::computeResourceSpaceTransform(Render
Object* object, const AffineTransform& baseTransform, const SVGRenderStyle& svgS
tyle, unsigned short resourceMode) | |
251 { | |
252 AffineTransform computedSpaceTransform = baseTransform; | |
253 if (resourceMode & ApplyToTextMode) { | |
254 // Depending on the font scaling factor, we may need to apply an | |
255 // additional transform (scale-factor) the paintserver, since text | |
256 // painting removes the scale factor from the context. (See | |
257 // SVGInlineTextBox::paintTextWithShadows.) | |
258 AffineTransform additionalTextTransformation; | |
259 if (shouldTransformOnTextPainting(object, additionalTextTransformation)) | |
260 computedSpaceTransform = additionalTextTransformation * computedSpac
eTransform; | |
261 } | |
262 if (resourceMode & ApplyToStrokeMode) { | |
263 // Non-scaling stroke needs to reset the transform back to the host tran
sform. | |
264 if (svgStyle.vectorEffect() == VE_NON_SCALING_STROKE) | |
265 computedSpaceTransform = transformOnNonScalingStroke(object, compute
dSpaceTransform); | |
266 } | |
267 return computedSpaceTransform; | |
268 } | |
269 | |
270 // FIXME: This does not belong here. | |
271 AffineTransform RenderSVGResourceContainer::transformOnNonScalingStroke(RenderOb
ject* object, const AffineTransform& resourceTransform) | |
272 { | |
273 if (!object->isSVGShape()) | |
274 return resourceTransform; | |
275 | |
276 SVGGraphicsElement* element = toSVGGraphicsElement(object->node()); | |
277 AffineTransform transform = element->getScreenCTM(SVGGraphicsElement::Disall
owStyleUpdate); | |
278 transform *= resourceTransform; | |
279 return transform; | |
280 } | |
281 | |
282 } | |
OLD | NEW |