Chromium Code Reviews| Index: third_party/WebKit/Source/core/observer/ResizeObservation.cpp |
| diff --git a/third_party/WebKit/Source/core/observer/ResizeObservation.cpp b/third_party/WebKit/Source/core/observer/ResizeObservation.cpp |
| index 0781e2a05b1fde1757ace6aafe663d3caf355522..a3c0e41e785aaf757a7ec13ce47e9bf280cbaf8c 100644 |
| --- a/third_party/WebKit/Source/core/observer/ResizeObservation.cpp |
| +++ b/third_party/WebKit/Source/core/observer/ResizeObservation.cpp |
| @@ -4,18 +4,54 @@ |
| #include "core/observer/ResizeObservation.h" |
| -#include "core/dom/Element.h" |
| +#include "core/layout/LayoutBox.h" |
| #include "core/observer/ResizeObserver.h" |
| +#include "core/svg/SVGElement.h" |
| +#include "core/svg/SVGGraphicsElement.h" |
| namespace blink { |
| ResizeObservation::ResizeObservation(Element* target, ResizeObserver* observer) |
| : m_target(target) |
| , m_observer(observer) |
| + , m_observationSize(0, 0) |
| { |
| DCHECK(m_target); |
| } |
| +void ResizeObservation::setObservationSize(const LayoutSize& size) |
| +{ |
| + m_observationSize = size; |
| +} |
| + |
| +bool ResizeObservation::observationSizeOutOfSync() const |
| +{ |
| + return m_observationSize != ResizeObservation::getTargetSize(m_target); |
| +} |
| + |
| +size_t ResizeObservation::targetDepth() |
| +{ |
| + unsigned depth = 0; |
| + for (Element* parent = m_target; parent; parent = parent->parentElement()) |
| + ++depth; |
| + return depth; |
| +} |
| + |
| +LayoutSize ResizeObservation::getTargetSize(Element* target) // static |
| +{ |
| + if (target) { |
| + if (target->isSVGElement() && toSVGElement(target)->isSVGGraphicsElement()) { |
| + SVGGraphicsElement& svg = toSVGGraphicsElement(*target); |
| + return LayoutSize(svg.getBBox().size()); |
|
eae
2016/07/22 20:22:33
You probably want roundedLayoutSize(svg.getBBox().
|
| + } |
| + LayoutBox* layout = target->layoutBox(); |
| + if (layout) |
| + return layout->contentSize(); |
| + } |
| + return LayoutSize(); |
| +} |
| + |
| + |
| DEFINE_TRACE(ResizeObservation) |
| { |
| visitor->trace(m_target); |