18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Apple Computer, Inc. 3692e5dbf12901edacf14812a6fae25462920af42Steve Block * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> 4692e5dbf12901edacf14812a6fae25462920af42Steve Block * Copyright (C) Research In Motion Limited 2010. All rights reserved. 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG) 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSVGBlock.h" 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 27db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "RenderSVGResource.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGElement.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderSVGBlock::RenderSVGBlock(SVGElement* node) 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : RenderBlock(node) 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderSVGBlock::setStyle(PassRefPtr<RenderStyle> style) 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<RenderStyle> useStyle = style; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // SVG text layout code expects us to be a block-level style element. 42692e5dbf12901edacf14812a6fae25462920af42Steve Block if (useStyle->isDisplayInlineType()) { 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<RenderStyle> newStyle = RenderStyle::create(); 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newStyle->inheritFrom(useStyle.get()); 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newStyle->setDisplay(BLOCK); 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project useStyle = newStyle.release(); 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderBlock::setStyle(useStyle.release()); 50692e5dbf12901edacf14812a6fae25462920af42Steve Block} 51692e5dbf12901edacf14812a6fae25462920af42Steve Block 52692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid RenderSVGBlock::updateBoxModelInfoFromStyle() 53692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 54692e5dbf12901edacf14812a6fae25462920af42Steve Block RenderBlock::updateBoxModelInfoFromStyle(); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56692e5dbf12901edacf14812a6fae25462920af42Steve Block // RenderSVGlock, used by Render(SVGText|ForeignObject), is not allowed to call setHasOverflowClip(true). 57692e5dbf12901edacf14812a6fae25462920af42Steve Block // RenderBlock assumes a layer to be present when the overflow clip functionality is requested. Both 58692e5dbf12901edacf14812a6fae25462920af42Steve Block // Render(SVGText|ForeignObject) return 'false' on 'requiresLayer'. Fine for RenderSVGText. 59692e5dbf12901edacf14812a6fae25462920af42Steve Block // 60692e5dbf12901edacf14812a6fae25462920af42Steve Block // If we want to support overflow rules for <foreignObject> we can choose between two solutions: 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // a) make RenderSVGForeignObject require layers and SVG layer aware 62692e5dbf12901edacf14812a6fae25462920af42Steve Block // b) reactor overflow logic out of RenderLayer (as suggested by dhyatt), which is a large task 63692e5dbf12901edacf14812a6fae25462920af42Steve Block // 64692e5dbf12901edacf14812a6fae25462920af42Steve Block // Until this is resolved, disable overflow support. Opera/FF don't support it as well at the moment (Feb 2010). 65692e5dbf12901edacf14812a6fae25462920af42Steve Block // 66692e5dbf12901edacf14812a6fae25462920af42Steve Block // Note: This does NOT affect overflow handling on outer/inner <svg> elements - this is handled 67692e5dbf12901edacf14812a6fae25462920af42Steve Block // manually by RenderSVGRoot - which owns the documents enclosing root layer and thus works fine. 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setHasOverflowClip(false); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenvoid RenderSVGBlock::absoluteRects(Vector<IntRect>&, int, int) 7206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 7306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // This code path should never be taken for SVG, as we're assuming useTransforms=true everywhere, absoluteQuads should be used. 7406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen ASSERT_NOT_REACHED(); 7506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 76db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 77db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid RenderSVGBlock::destroy() 78db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 79db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block SVGResourcesCache::clientDestroyed(this); 80db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block RenderBlock::destroy(); 81db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 82db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 835ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid RenderSVGBlock::styleWillChange(StyleDifference diff, const RenderStyle* newStyle) 845ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (diff == StyleDifferenceLayout) 865ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen setNeedsBoundariesUpdate(); 875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen RenderBlock::styleWillChange(diff, newStyle); 885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 90db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid RenderSVGBlock::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) 91db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 92db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block RenderBlock::styleDidChange(diff, oldStyle); 93db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block SVGResourcesCache::clientStyleChanged(this, diff, style()); 94db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 95db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 96db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid RenderSVGBlock::updateFromElement() 97db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 98db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block RenderBlock::updateFromElement(); 99db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block SVGResourcesCache::clientUpdatedFromElement(this, style()); 100db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 101db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 104692e5dbf12901edacf14812a6fae25462920af42Steve Block#endif 105