OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> | 2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> |
3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. | 3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. |
4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 | 67 |
68 Frame* frame = m_page->mainFrame(); | 68 Frame* frame = m_page->mainFrame(); |
69 SVGSVGElement* rootElement = static_cast<SVGDocument*>(frame->document())->r
ootElement(); | 69 SVGSVGElement* rootElement = static_cast<SVGDocument*>(frame->document())->r
ootElement(); |
70 if (!rootElement) | 70 if (!rootElement) |
71 return; | 71 return; |
72 RenderSVGRoot* renderer = toRenderSVGRoot(rootElement->renderer()); | 72 RenderSVGRoot* renderer = toRenderSVGRoot(rootElement->renderer()); |
73 if (!renderer) | 73 if (!renderer) |
74 return; | 74 return; |
75 | 75 |
76 FrameView* view = frameView(); | 76 FrameView* view = frameView(); |
77 view->resize(this->size()); | 77 view->resize(this->containerSize()); |
78 | 78 |
79 renderer->setContainerSize(size); | 79 renderer->setContainerSize(size); |
80 } | 80 } |
81 | 81 |
82 IntSize SVGImage::size() const | 82 IntSize SVGImage::containerSize() const |
83 { | 83 { |
84 if (!m_page) | 84 if (!m_page) |
85 return IntSize(); | 85 return IntSize(); |
86 Frame* frame = m_page->mainFrame(); | 86 Frame* frame = m_page->mainFrame(); |
87 SVGSVGElement* rootElement = static_cast<SVGDocument*>(frame->document())->r
ootElement(); | 87 SVGSVGElement* rootElement = static_cast<SVGDocument*>(frame->document())->r
ootElement(); |
88 if (!rootElement) | 88 if (!rootElement) |
89 return IntSize(); | 89 return IntSize(); |
90 | 90 |
91 RenderSVGRoot* renderer = toRenderSVGRoot(rootElement->renderer()); | 91 RenderSVGRoot* renderer = toRenderSVGRoot(rootElement->renderer()); |
92 if (!renderer) | 92 if (!renderer) |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 FloatSize scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRec
t.height()); | 185 FloatSize scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRec
t.height()); |
186 | 186 |
187 // We can only draw the entire frame, clipped to the rect we want. So comput
e where the top left | 187 // We can only draw the entire frame, clipped to the rect we want. So comput
e where the top left |
188 // of the image would be if we were drawing without clipping, and translate
accordingly. | 188 // of the image would be if we were drawing without clipping, and translate
accordingly. |
189 FloatSize topLeftOffset(srcRect.location().x() * scale.width(), srcRect.loca
tion().y() * scale.height()); | 189 FloatSize topLeftOffset(srcRect.location().x() * scale.width(), srcRect.loca
tion().y() * scale.height()); |
190 FloatPoint destOffset = dstRect.location() - topLeftOffset; | 190 FloatPoint destOffset = dstRect.location() - topLeftOffset; |
191 | 191 |
192 context->translate(destOffset.x(), destOffset.y()); | 192 context->translate(destOffset.x(), destOffset.y()); |
193 context->scale(scale); | 193 context->scale(scale); |
194 | 194 |
195 view->resize(size()); | 195 view->resize(containerSize()); |
196 | 196 |
197 if (view->needsLayout()) | 197 if (view->needsLayout()) |
198 view->layout(); | 198 view->layout(); |
199 | 199 |
200 view->paint(context, IntRect(0, 0, view->width(), view->height())); | 200 view->paint(context, IntRect(0, 0, view->width(), view->height())); |
201 | 201 |
202 if (compositeOp != CompositeSourceOver) | 202 if (compositeOp != CompositeSourceOver) |
203 context->endTransparencyLayer(); | 203 context->endTransparencyLayer(); |
204 | 204 |
205 stateSaver.restore(); | 205 stateSaver.restore(); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 loader->forceSandboxFlags(SandboxAll); | 329 loader->forceSandboxFlags(SandboxAll); |
330 | 330 |
331 frame->view()->setCanHaveScrollbars(false); // SVG Images will always sy
nthesize a viewBox, if it's not available, and thus never see scrollbars. | 331 frame->view()->setCanHaveScrollbars(false); // SVG Images will always sy
nthesize a viewBox, if it's not available, and thus never see scrollbars. |
332 frame->view()->setTransparent(true); // SVG Images are transparent. | 332 frame->view()->setTransparent(true); // SVG Images are transparent. |
333 | 333 |
334 ASSERT(loader->activeDocumentLoader()); // DocumentLoader should have be
en created by frame->init(). | 334 ASSERT(loader->activeDocumentLoader()); // DocumentLoader should have be
en created by frame->init(). |
335 loader->activeDocumentLoader()->writer()->setMIMEType("image/svg+xml"); | 335 loader->activeDocumentLoader()->writer()->setMIMEType("image/svg+xml"); |
336 loader->activeDocumentLoader()->writer()->begin(KURL()); // create the e
mpty document | 336 loader->activeDocumentLoader()->writer()->begin(KURL()); // create the e
mpty document |
337 loader->activeDocumentLoader()->writer()->addData(data()->data(), data()
->size()); | 337 loader->activeDocumentLoader()->writer()->addData(data()->data(), data()
->size()); |
338 loader->activeDocumentLoader()->writer()->end(); | 338 loader->activeDocumentLoader()->writer()->end(); |
| 339 |
| 340 // Set the intrinsic size before a container size is available. |
| 341 m_intrinsicSize = containerSize(); |
339 } | 342 } |
340 | 343 |
341 return m_page; | 344 return m_page; |
342 } | 345 } |
343 | 346 |
344 String SVGImage::filenameExtension() const | 347 String SVGImage::filenameExtension() const |
345 { | 348 { |
346 return "svg"; | 349 return "svg"; |
347 } | 350 } |
348 | 351 |
349 void SVGImage::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const | 352 void SVGImage::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const |
350 { | 353 { |
351 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResou
rceImage); | 354 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResou
rceImage); |
352 Image::reportMemoryUsage(memoryObjectInfo); | 355 Image::reportMemoryUsage(memoryObjectInfo); |
353 info.addMember(m_chromeClient, "chromeClient"); | 356 info.addMember(m_chromeClient, "chromeClient"); |
354 info.addMember(m_page, "page"); | 357 info.addMember(m_page, "page"); |
355 } | 358 } |
356 | 359 |
357 } | 360 } |
358 | 361 |
359 #endif // ENABLE(SVG) | 362 #endif // ENABLE(SVG) |
OLD | NEW |