Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(724)

Side by Side Diff: Source/core/svg/SVGLengthContext.cpp

Issue 889563002: Make RenderObject::style() return a const object (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Updated patch after splitting Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Apple Inc. All rights reserved. 4 * Copyright (C) 2007 Apple Inc. All rights reserved.
5 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 5 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 float SVGLengthContext::convertValueFromPercentageToUserUnits(float value, SVGLe ngthMode mode, const FloatSize& viewportSize) 178 float SVGLengthContext::convertValueFromPercentageToUserUnits(float value, SVGLe ngthMode mode, const FloatSize& viewportSize)
179 { 179 {
180 return value * dimensionForLengthMode(mode, viewportSize); 180 return value * dimensionForLengthMode(mode, viewportSize);
181 } 181 }
182 182
183 float SVGLengthContext::convertValueFromPercentageToUserUnits(const SVGLength& v alue, const FloatSize& viewportSize) 183 float SVGLengthContext::convertValueFromPercentageToUserUnits(const SVGLength& v alue, const FloatSize& viewportSize)
184 { 184 {
185 return value.scaleByPercentage(dimensionForLengthMode(value.unitMode(), view portSize)); 185 return value.scaleByPercentage(dimensionForLengthMode(value.unitMode(), view portSize));
186 } 186 }
187 187
188 static inline LayoutStyle* layoutStyleForLengthResolving(const SVGElement* conte xt) 188 static inline const LayoutStyle* layoutStyleForLengthResolving(const SVGElement* context)
189 { 189 {
190 if (!context) 190 if (!context)
191 return 0; 191 return 0;
192 192
193 const ContainerNode* currentContext = context; 193 const ContainerNode* currentContext = context;
194 do { 194 do {
195 if (currentContext->renderer()) 195 if (currentContext->renderer())
196 return currentContext->renderer()->style(); 196 return currentContext->renderer()->style();
197 currentContext = currentContext->parentNode(); 197 currentContext = currentContext->parentNode();
198 } while (currentContext); 198 } while (currentContext);
199 199
200 // There must be at least a RenderSVGRoot renderer, carrying a style. 200 // There must be at least a RenderSVGRoot renderer, carrying a style.
201 ASSERT_NOT_REACHED(); 201 ASSERT_NOT_REACHED();
202 return 0; 202 return 0;
203 } 203 }
204 204
205 float SVGLengthContext::convertValueFromUserUnitsToEMS(float value) const 205 float SVGLengthContext::convertValueFromUserUnitsToEMS(float value) const
206 { 206 {
207 LayoutStyle* style = layoutStyleForLengthResolving(m_context); 207 const LayoutStyle* style = layoutStyleForLengthResolving(m_context);
208 if (!style) 208 if (!style)
209 return 0; 209 return 0;
210 210
211 float fontSize = style->specifiedFontSize(); 211 float fontSize = style->specifiedFontSize();
212 if (!fontSize) 212 if (!fontSize)
213 return 0; 213 return 0;
214 214
215 return value / fontSize; 215 return value / fontSize;
216 } 216 }
217 217
218 float SVGLengthContext::convertValueFromEMSToUserUnits(float value) const 218 float SVGLengthContext::convertValueFromEMSToUserUnits(float value) const
219 { 219 {
220 LayoutStyle* style = layoutStyleForLengthResolving(m_context); 220 const LayoutStyle* style = layoutStyleForLengthResolving(m_context);
221 if (!style) 221 if (!style)
222 return 0; 222 return 0;
223 return value * style->specifiedFontSize(); 223 return value * style->specifiedFontSize();
224 } 224 }
225 225
226 float SVGLengthContext::convertValueFromUserUnitsToEXS(float value) const 226 float SVGLengthContext::convertValueFromUserUnitsToEXS(float value) const
227 { 227 {
228 LayoutStyle* style = layoutStyleForLengthResolving(m_context); 228 const LayoutStyle* style = layoutStyleForLengthResolving(m_context);
229 if (!style) 229 if (!style)
230 return 0; 230 return 0;
231 231
232 // Use of ceil allows a pixel match to the W3Cs expected output of coords-un its-03-b.svg 232 // Use of ceil allows a pixel match to the W3Cs expected output of coords-un its-03-b.svg
233 // if this causes problems in real world cases maybe it would be best to rem ove this 233 // if this causes problems in real world cases maybe it would be best to rem ove this
234 float xHeight = ceilf(style->fontMetrics().xHeight()); 234 float xHeight = ceilf(style->fontMetrics().xHeight());
235 if (!xHeight) 235 if (!xHeight)
236 return 0; 236 return 0;
237 237
238 return value / xHeight; 238 return value / xHeight;
239 } 239 }
240 240
241 float SVGLengthContext::convertValueFromEXSToUserUnits(float value) const 241 float SVGLengthContext::convertValueFromEXSToUserUnits(float value) const
242 { 242 {
243 LayoutStyle* style = layoutStyleForLengthResolving(m_context); 243 const LayoutStyle* style = layoutStyleForLengthResolving(m_context);
244 if (!style) 244 if (!style)
245 return 0; 245 return 0;
246 246
247 // Use of ceil allows a pixel match to the W3Cs expected output of coords-un its-03-b.svg 247 // Use of ceil allows a pixel match to the W3Cs expected output of coords-un its-03-b.svg
248 // if this causes problems in real world cases maybe it would be best to rem ove this 248 // if this causes problems in real world cases maybe it would be best to rem ove this
249 return value * ceilf(style->fontMetrics().xHeight()); 249 return value * ceilf(style->fontMetrics().xHeight());
250 } 250 }
251 251
252 bool SVGLengthContext::determineViewport(FloatSize& viewportSize) const 252 bool SVGLengthContext::determineViewport(FloatSize& viewportSize) const
253 { 253 {
(...skipping 13 matching lines...) Expand all
267 267
268 const SVGSVGElement& svg = toSVGSVGElement(*viewportElement); 268 const SVGSVGElement& svg = toSVGSVGElement(*viewportElement);
269 viewportSize = svg.currentViewBoxRect().size(); 269 viewportSize = svg.currentViewBoxRect().size();
270 if (viewportSize.isEmpty()) 270 if (viewportSize.isEmpty())
271 viewportSize = svg.currentViewportSize(); 271 viewportSize = svg.currentViewportSize();
272 272
273 return true; 273 return true;
274 } 274 }
275 275
276 } 276 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698