15f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian/* 25f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (c) 2009, Google Inc. All rights reserved. 35f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 45f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Redistribution and use in source and binary forms, with or without 55f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * modification, are permitted provided that the following conditions are 65f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * met: 75f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 85f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * * Redistributions of source code must retain the above copyright 95f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * notice, this list of conditions and the following disclaimer. 105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * * Redistributions in binary form must reproduce the above 115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * copyright notice, this list of conditions and the following disclaimer 125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * in the documentation and/or other materials provided with the 135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * distribution. 145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * * Neither the name of Google Inc. nor the names of its 155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * contributors may be used to endorse or promote products derived from 165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * this software without specific prior written permission. 175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian */ 305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "config.h" 325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#if ENABLE(SVG) 345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "RenderSVGModelObject.h" 355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 36ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "RenderSVGResource.h" 375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "SVGStyledElement.h" 385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace WebCore { 405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 415f1ab04193ad0130ca8204aadaceae083aca9881Feng QianRenderSVGModelObject::RenderSVGModelObject(SVGStyledElement* node) 425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian : RenderObject(node) 435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 465f1ab04193ad0130ca8204aadaceae083aca9881Feng QianIntRect RenderSVGModelObject::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) 475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 48ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return SVGRenderSupport::clippedOverflowRectForRepaint(this, repaintContainer); 495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid RenderSVGModelObject::computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed) 525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 53ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block SVGRenderSupport::computeRectForRepaint(this, repaintContainer, repaintRect, fixed); 545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid RenderSVGModelObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState& transformState) const 575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 58ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block SVGRenderSupport::mapLocalToContainer(this, repaintContainer, fixed, useTransforms, transformState); 595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian// Copied from RenderBox, this method likely requires further refactoring to work easily for both SVG and CSS Box Model content. 62ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block// FIXME: This may also need to move into SVGRenderSupport as the RenderBox version depends 635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian// on borderBoundingBox() which SVG RenderBox subclases (like SVGRenderBlock) do not implement. 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockIntRect RenderSVGModelObject::outlineBoundsForRepaint(RenderBoxModelObject* repaintContainer, IntPoint*) const 655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian IntRect box = enclosingIntRect(repaintRectInLocalCoordinates()); 675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian adjustRectForOutlineAndShadow(box); 685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian FloatQuad containerRelativeQuad = localToContainerQuad(FloatRect(box), repaintContainer); 705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return containerRelativeQuad.enclosingBoundingBox(); 715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 7306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenvoid RenderSVGModelObject::absoluteRects(Vector<IntRect>&, int, int) 745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 7506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // This code path should never be taken for SVG, as we're assuming useTransforms=true everywhere, absoluteQuads should be used. 7606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen ASSERT_NOT_REACHED(); 775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid RenderSVGModelObject::absoluteQuads(Vector<FloatQuad>& quads) 805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 8106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen quads.append(localToAbsoluteQuad(strokeBoundingBox())); 825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 84692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid RenderSVGModelObject::destroy() 85692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 86db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block SVGResourcesCache::clientDestroyed(this); 87692e5dbf12901edacf14812a6fae25462920af42Steve Block RenderObject::destroy(); 88692e5dbf12901edacf14812a6fae25462920af42Steve Block} 89692e5dbf12901edacf14812a6fae25462920af42Steve Block 905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid RenderSVGModelObject::styleWillChange(StyleDifference diff, const RenderStyle* newStyle) 915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (diff == StyleDifferenceLayout) 935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen setNeedsBoundariesUpdate(); 945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen RenderObject::styleWillChange(diff, newStyle); 955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 97967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid RenderSVGModelObject::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) 98967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 99967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch RenderObject::styleDidChange(diff, oldStyle); 100db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block SVGResourcesCache::clientStyleChanged(this, diff, style()); 101db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 102967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 103db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid RenderSVGModelObject::updateFromElement() 104db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 105db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block RenderObject::updateFromElement(); 106db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block SVGResourcesCache::clientUpdatedFromElement(this, style()); 107967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 108967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 1095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianbool RenderSVGModelObject::nodeAtPoint(const HitTestRequest&, HitTestResult&, int, int, int, int, HitTestAction) 1105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian ASSERT_NOT_REACHED(); 1125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return false; 1135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} // namespace WebCore 1165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif // ENABLE(SVG) 118