OLD | NEW |
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, 2008, 2010 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2007 Apple Inc. All rights reserved. | 4 * Copyright (C) 2007 Apple Inc. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 DEFINE_STATIC_LOCAL(const AtomicString, defaultValue, ("text/css", AtomicStr
ing::ConstructFromLiteral)); | 124 DEFINE_STATIC_LOCAL(const AtomicString, defaultValue, ("text/css", AtomicStr
ing::ConstructFromLiteral)); |
125 const AtomicString& n = fastGetAttribute(SVGNames::contentStyleTypeAttr); | 125 const AtomicString& n = fastGetAttribute(SVGNames::contentStyleTypeAttr); |
126 return n.isNull() ? defaultValue : n; | 126 return n.isNull() ? defaultValue : n; |
127 } | 127 } |
128 | 128 |
129 void SVGSVGElement::setContentStyleType(const AtomicString& type) | 129 void SVGSVGElement::setContentStyleType(const AtomicString& type) |
130 { | 130 { |
131 setAttribute(SVGNames::contentStyleTypeAttr, type); | 131 setAttribute(SVGNames::contentStyleTypeAttr, type); |
132 } | 132 } |
133 | 133 |
134 FloatRect SVGSVGElement::viewport() const | 134 SVGRect SVGSVGElement::viewport() const |
135 { | 135 { |
136 // FIXME: This method doesn't follow the spec and is basically untested. Par
ent documents are not considered here. | 136 // FIXME: This method doesn't follow the spec and is basically untested. Par
ent documents are not considered here. |
137 // As we have no test coverage for this, we're going to disable it completly
for now. | 137 // As we have no test coverage for this, we're going to disable it completly
for now. |
138 return FloatRect(); | 138 return SVGRect(); |
139 } | 139 } |
140 | 140 |
141 float SVGSVGElement::pixelUnitToMillimeterX() const | 141 float SVGSVGElement::pixelUnitToMillimeterX() const |
142 { | 142 { |
143 // 2.54 / cssPixelsPerInch gives CM. | 143 // 2.54 / cssPixelsPerInch gives CM. |
144 return (2.54f / cssPixelsPerInch) * 10.0f; | 144 return (2.54f / cssPixelsPerInch) * 10.0f; |
145 } | 145 } |
146 | 146 |
147 float SVGSVGElement::pixelUnitToMillimeterY() const | 147 float SVGSVGElement::pixelUnitToMillimeterY() const |
148 { | 148 { |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 void SVGSVGElement::unsuspendRedrawAll() | 320 void SVGSVGElement::unsuspendRedrawAll() |
321 { | 321 { |
322 // FIXME: Implement me (see bug 11275) | 322 // FIXME: Implement me (see bug 11275) |
323 } | 323 } |
324 | 324 |
325 void SVGSVGElement::forceRedraw() | 325 void SVGSVGElement::forceRedraw() |
326 { | 326 { |
327 // FIXME: Implement me (see bug 11275) | 327 // FIXME: Implement me (see bug 11275) |
328 } | 328 } |
329 | 329 |
330 PassRefPtr<NodeList> SVGSVGElement::collectIntersectionOrEnclosureList(const Flo
atRect& rect, SVGElement* referenceElement, CollectIntersectionOrEnclosure colle
ct) const | 330 PassRefPtr<NodeList> SVGSVGElement::collectIntersectionOrEnclosureList(const SVG
Rect& rect, SVGElement* referenceElement, CollectIntersectionOrEnclosure collect
) const |
331 { | 331 { |
332 Vector<RefPtr<Node> > nodes; | 332 Vector<RefPtr<Node> > nodes; |
333 Element* element = ElementTraversal::next(referenceElement ? referenceElemen
t : this); | 333 Element* element = ElementTraversal::next(referenceElement ? referenceElemen
t : this); |
334 while (element) { | 334 while (element) { |
335 if (element->isSVGElement()) { | 335 if (element->isSVGElement()) { |
336 SVGElement* svgElement = toSVGElement(element); | 336 SVGElement* svgElement = toSVGElement(element); |
337 if (collect == CollectIntersectionList) { | 337 if (collect == CollectIntersectionList) { |
338 if (checkIntersection(svgElement, rect)) | 338 if (checkIntersection(svgElement, rect)) |
339 nodes.append(element); | 339 nodes.append(element); |
340 } else { | 340 } else { |
341 if (checkEnclosure(svgElement, rect)) | 341 if (checkEnclosure(svgElement, rect)) |
342 nodes.append(element); | 342 nodes.append(element); |
343 } | 343 } |
344 } | 344 } |
345 | 345 |
346 element = ElementTraversal::next(element, referenceElement ? referenceEl
ement : this); | 346 element = ElementTraversal::next(element, referenceElement ? referenceEl
ement : this); |
347 } | 347 } |
348 return StaticNodeList::adopt(nodes); | 348 return StaticNodeList::adopt(nodes); |
349 } | 349 } |
350 | 350 |
351 PassRefPtr<NodeList> SVGSVGElement::getIntersectionList(const FloatRect& rect, S
VGElement* referenceElement) const | 351 PassRefPtr<NodeList> SVGSVGElement::getIntersectionList(const SVGRect& rect, SVG
Element* referenceElement) const |
352 { | 352 { |
353 return collectIntersectionOrEnclosureList(rect, referenceElement, CollectInt
ersectionList); | 353 return collectIntersectionOrEnclosureList(rect, referenceElement, CollectInt
ersectionList); |
354 } | 354 } |
355 | 355 |
356 PassRefPtr<NodeList> SVGSVGElement::getEnclosureList(const FloatRect& rect, SVGE
lement* referenceElement) const | 356 PassRefPtr<NodeList> SVGSVGElement::getEnclosureList(const SVGRect& rect, SVGEle
ment* referenceElement) const |
357 { | 357 { |
358 return collectIntersectionOrEnclosureList(rect, referenceElement, CollectEnc
losureList); | 358 return collectIntersectionOrEnclosureList(rect, referenceElement, CollectEnc
losureList); |
359 } | 359 } |
360 | 360 |
361 bool SVGSVGElement::checkIntersection(SVGElement* element, const FloatRect& rect
) const | 361 bool SVGSVGElement::checkIntersection(SVGElement* element, const SVGRect& rect)
const |
362 { | 362 { |
363 if (!element) | 363 if (!element) |
364 return false; | 364 return false; |
365 return RenderSVGModelObject::checkIntersection(element->renderer(), rect); | 365 return RenderSVGModelObject::checkIntersection(element->renderer(), rect); |
366 } | 366 } |
367 | 367 |
368 bool SVGSVGElement::checkEnclosure(SVGElement* element, const FloatRect& rect) c
onst | 368 bool SVGSVGElement::checkEnclosure(SVGElement* element, const SVGRect& rect) con
st |
369 { | 369 { |
370 if (!element) | 370 if (!element) |
371 return false; | 371 return false; |
372 return RenderSVGModelObject::checkEnclosure(element->renderer(), rect); | 372 return RenderSVGModelObject::checkEnclosure(element->renderer(), rect); |
373 } | 373 } |
374 | 374 |
375 void SVGSVGElement::deselectAll() | 375 void SVGSVGElement::deselectAll() |
376 { | 376 { |
377 if (Frame* frame = document()->frame()) | 377 if (Frame* frame = document()->frame()) |
378 frame->selection()->clear(); | 378 frame->selection()->clear(); |
(...skipping 17 matching lines...) Expand all Loading... |
396 SVGPoint SVGSVGElement::createSVGPoint() | 396 SVGPoint SVGSVGElement::createSVGPoint() |
397 { | 397 { |
398 return SVGPoint(); | 398 return SVGPoint(); |
399 } | 399 } |
400 | 400 |
401 SVGMatrix SVGSVGElement::createSVGMatrix() | 401 SVGMatrix SVGSVGElement::createSVGMatrix() |
402 { | 402 { |
403 return SVGMatrix(); | 403 return SVGMatrix(); |
404 } | 404 } |
405 | 405 |
406 FloatRect SVGSVGElement::createSVGRect() | 406 SVGRect SVGSVGElement::createSVGRect() |
407 { | 407 { |
408 return FloatRect(); | 408 return SVGRect(); |
409 } | 409 } |
410 | 410 |
411 SVGTransform SVGSVGElement::createSVGTransform() | 411 SVGTransform SVGSVGElement::createSVGTransform() |
412 { | 412 { |
413 return SVGTransform(SVGTransform::SVG_TRANSFORM_MATRIX); | 413 return SVGTransform(SVGTransform::SVG_TRANSFORM_MATRIX); |
414 } | 414 } |
415 | 415 |
416 SVGTransform SVGSVGElement::createSVGTransformFromMatrix(const SVGMatrix& matrix
) | 416 SVGTransform SVGSVGElement::createSVGTransformFromMatrix(const SVGMatrix& matrix
) |
417 { | 417 { |
418 return SVGTransform(static_cast<const AffineTransform&>(matrix)); | 418 return SVGTransform(static_cast<const AffineTransform&>(matrix)); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 | 537 |
538 bool SVGSVGElement::selfHasRelativeLengths() const | 538 bool SVGSVGElement::selfHasRelativeLengths() const |
539 { | 539 { |
540 return xCurrentValue().isRelative() | 540 return xCurrentValue().isRelative() |
541 || yCurrentValue().isRelative() | 541 || yCurrentValue().isRelative() |
542 || widthCurrentValue().isRelative() | 542 || widthCurrentValue().isRelative() |
543 || heightCurrentValue().isRelative() | 543 || heightCurrentValue().isRelative() |
544 || hasAttribute(SVGNames::viewBoxAttr); | 544 || hasAttribute(SVGNames::viewBoxAttr); |
545 } | 545 } |
546 | 546 |
547 FloatRect SVGSVGElement::currentViewBoxRect() const | 547 SVGRect SVGSVGElement::currentViewBoxRect() const |
548 { | 548 { |
549 if (m_useCurrentView) | 549 if (m_useCurrentView) |
550 return m_viewSpec ? m_viewSpec->viewBoxCurrentValue() : FloatRect(); | 550 return m_viewSpec ? m_viewSpec->viewBoxCurrentValue() : SVGRect(); |
551 | 551 |
552 FloatRect useViewBox = viewBoxCurrentValue(); | 552 FloatRect useViewBox = viewBoxCurrentValue(); |
553 if (!useViewBox.isEmpty()) | 553 if (!useViewBox.isEmpty()) |
554 return useViewBox; | 554 return useViewBox; |
555 if (!renderer() || !renderer()->isSVGRoot()) | 555 if (!renderer() || !renderer()->isSVGRoot()) |
556 return FloatRect(); | 556 return SVGRect(); |
557 if (!toRenderSVGRoot(renderer())->isEmbeddedThroughSVGImage()) | 557 if (!toRenderSVGRoot(renderer())->isEmbeddedThroughSVGImage()) |
558 return FloatRect(); | 558 return SVGRect(); |
559 | 559 |
560 Length intrinsicWidth = this->intrinsicWidth(); | 560 Length intrinsicWidth = this->intrinsicWidth(); |
561 Length intrinsicHeight = this->intrinsicHeight(); | 561 Length intrinsicHeight = this->intrinsicHeight(); |
562 if (!intrinsicWidth.isFixed() || !intrinsicHeight.isFixed()) | 562 if (!intrinsicWidth.isFixed() || !intrinsicHeight.isFixed()) |
563 return FloatRect(); | 563 return SVGRect(); |
564 | 564 |
565 // If no viewBox is specified but non-relative width/height values, then we | 565 // If no viewBox is specified but non-relative width/height values, then we |
566 // should always synthesize a viewBox if we're embedded through a SVGImage.
| 566 // should always synthesize a viewBox if we're embedded through a SVGImage.
|
567 return FloatRect(FloatPoint(), FloatSize(floatValueForLength(intrinsicWidth,
0), floatValueForLength(intrinsicHeight, 0))); | 567 return SVGRect(FloatPoint(), FloatSize(floatValueForLength(intrinsicWidth, 0
), floatValueForLength(intrinsicHeight, 0))); |
568 } | 568 } |
569 | 569 |
570 FloatSize SVGSVGElement::currentViewportSize() const | 570 FloatSize SVGSVGElement::currentViewportSize() const |
571 { | 571 { |
572 Length intrinsicWidth = this->intrinsicWidth(); | 572 Length intrinsicWidth = this->intrinsicWidth(); |
573 Length intrinsicHeight = this->intrinsicHeight(); | 573 Length intrinsicHeight = this->intrinsicHeight(); |
574 if (intrinsicWidth.isFixed() && intrinsicHeight.isFixed()) | 574 if (intrinsicWidth.isFixed() && intrinsicHeight.isFixed()) |
575 return FloatSize(floatValueForLength(intrinsicWidth, 0), floatValueForLe
ngth(intrinsicHeight, 0)); | 575 return FloatSize(floatValueForLength(intrinsicWidth, 0), floatValueForLe
ngth(intrinsicHeight, 0)); |
576 | 576 |
577 if (!renderer()) | 577 if (!renderer()) |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 continue; | 768 continue; |
769 | 769 |
770 Element* element = toElement(node); | 770 Element* element = toElement(node); |
771 if (element->getIdAttribute() == id) | 771 if (element->getIdAttribute() == id) |
772 return element; | 772 return element; |
773 } | 773 } |
774 return 0; | 774 return 0; |
775 } | 775 } |
776 | 776 |
777 } | 777 } |
OLD | NEW |