18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG) 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSVGTextPath.h" 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "FloatQuad.h" 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "RenderBlock.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGInlineTextBox.h" 28f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "SVGNames.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGPathElement.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGRootInlineBox.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGTextPathElement.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGTransformList.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderSVGTextPath::RenderSVGTextPath(Node* n) 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : RenderSVGInline(n) 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_startOffset(0.0f) 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_exactAlignment(true) 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_stretchMethod(false) 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPath RenderSVGTextPath::layoutPath() const 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian SVGTextPathElement* textPathElement = static_cast<SVGTextPathElement*>(node()); 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String pathId = SVGURIReference::getTarget(textPathElement->href()); 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* targetElement = textPathElement->document()->getElementById(pathId); 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!targetElement || !targetElement->hasTagName(SVGNames::pathTag)) 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return Path(); 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SVGPathElement* pathElement = static_cast<SVGPathElement*>(targetElement); 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Path pathData; 55a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch pathElement->toPathData(pathData); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Spec: The transform attribute on the referenced 'path' element represents a 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // supplemental transformation relative to the current user coordinate system for 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the current 'text' element, including any adjustments to the current user coordinate 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // system due to a possible transform attribute on the current 'text' element. 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // http://www.w3.org/TR/SVG/text.html#TextPathElement 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pathData.transform(pathElement->animatedLocalTransform()); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return pathData; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfloat RenderSVGTextPath::startOffset() const 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return static_cast<SVGTextPathElement*>(node())->startOffset().valueAsPercentage(); 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderSVGTextPath::exactAlignment() const 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return static_cast<SVGTextPathElement*>(node())->spacing() == SVG_TEXTPATH_SPACINGTYPE_EXACT; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderSVGTextPath::stretchMethod() const 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return static_cast<SVGTextPathElement*>(node())->method() == SVG_TEXTPATH_METHODTYPE_STRETCH; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG) 83