提交 c9e551fd 编写于 作者: E Elliott Sprehn

Remove more stuff from Widget.

This removes even more APIs from widget. This also removes some methods
that had been broken and made infinitely recursive on FrameView.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/684353002
上级 e000e532
......@@ -556,30 +556,6 @@ int Element::scrollHeight()
return 0;
}
IntRect Element::boundsInRootViewSpace()
{
document().updateLayoutIgnorePendingStylesheets();
FrameView* view = document().view();
if (!view)
return IntRect();
Vector<FloatQuad> quads;
// Get the bounding rectangle from the box model.
if (renderBoxModelObject())
renderBoxModelObject()->absoluteQuads(quads);
if (quads.isEmpty())
return IntRect();
IntRect result = quads[0].enclosingBoundingBox();
for (size_t i = 1; i < quads.size(); ++i)
result.unite(quads[i].enclosingBoundingBox());
result = view->contentsToRootView(result);
return result;
}
PassRefPtr<ClientRectList> Element::getClientRects()
{
document().updateLayoutIgnorePendingStylesheets();
......@@ -618,14 +594,6 @@ PassRefPtr<ClientRect> Element::getBoundingClientRect()
return ClientRect::create(result);
}
IntRect Element::screenRect() const
{
if (!renderer())
return IntRect();
// FIXME: this should probably respect transforms
return document().view()->contentsToScreen(renderer()->absoluteBoundingBoxRectIgnoringTransforms());
}
void Element::setAttribute(const AtomicString& localName, const AtomicString& value, ExceptionState& exceptionState)
{
if (!Document::isValidName(localName)) {
......
......@@ -158,14 +158,9 @@ public:
virtual int scrollWidth();
virtual int scrollHeight();
IntRect boundsInRootViewSpace();
PassRefPtr<ClientRectList> getClientRects();
PassRefPtr<ClientRect> getBoundingClientRect();
// Returns the absolute bounding box translated into screen coordinates:
IntRect screenRect() const;
virtual void didMoveToNewDocument(Document&) override;
void removeAttribute(const AtomicString& name);
......
......@@ -221,14 +221,6 @@ void FrameView::recalcOverflowAfterStyleChange()
renderView->recalcOverflowAfterStyleChange();
}
IntRect FrameView::contentsToScreen(const IntRect& rect) const
{
HostWindow* window = hostWindow();
if (!window)
return IntRect();
return window->rootViewToScreen(contentsToRootView(rect));
}
bool FrameView::scheduleAnimation()
{
if (HostWindow* window = hostWindow()) {
......
......@@ -203,15 +203,11 @@ public:
bool isSubtreeLayout() const { return !!m_layoutSubtreeRoot; }
// FIXME(sky): remove
IntRect contentsToScreen(const IntRect& rect) const;
IntPoint contentsToRootView(const IntPoint& contentsPoint) const { return convertToRootView(contentsPoint); }
IntRect contentsToRootView(const IntRect& contentsRect) const { return convertToRootView(contentsRect); }
IntRect rootViewToContents(const IntRect& rootViewRect) const { return convertFromRootView(rootViewRect); }
IntPoint windowToContents(const IntPoint& windowPoint) const { return convertFromContainingWindow(windowPoint); }
FloatPoint windowToContents(const FloatPoint& windowPoint) const { return convertFromContainingWindow(windowPoint); }
IntPoint contentsToWindow(const IntPoint& contentsPoint) const { return contentsToWindow(contentsPoint); }
IntRect windowToContents(const IntRect& windowRect) const { return convertFromContainingWindow(windowRect); }
IntRect contentsToWindow(const IntRect& contentsRect) const { return contentsToWindow(contentsRect); }
IntPoint windowToContents(const IntPoint& windowPoint) const { return windowPoint; }
IntPoint contentsToWindow(const IntPoint& contentsPoint) const { return contentsPoint; }
IntRect windowToContents(const IntRect& windowRect) const { return windowRect; }
IntRect contentsToWindow(const IntRect& contentsRect) const { return contentsRect; }
bool scheduleAnimation();
IntRect visibleContentRect(IncludeScrollbarsInRect = ExcludeScrollbars) const { return IntRect(IntPoint(), expandedIntSize(frameRect().size())); }
IntSize unscaledVisibleContentSize(IncludeScrollbarsInRect = ExcludeScrollbars) const { return frameRect().size(); }
......
......@@ -207,13 +207,11 @@ PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorParseHtmlEvent::beginD
static void localToPageQuad(const RenderObject& renderer, const LayoutRect& rect, FloatQuad* quad)
{
LocalFrame* frame = renderer.frame();
FrameView* view = frame->view();
FloatQuad absolute = renderer.localToAbsoluteQuad(FloatQuad(rect));
quad->setP1(view->contentsToRootView(roundedIntPoint(absolute.p1())));
quad->setP2(view->contentsToRootView(roundedIntPoint(absolute.p2())));
quad->setP3(view->contentsToRootView(roundedIntPoint(absolute.p3())));
quad->setP4(view->contentsToRootView(roundedIntPoint(absolute.p4())));
quad->setP1(roundedIntPoint(absolute.p1()));
quad->setP2(roundedIntPoint(absolute.p2()));
quad->setP3(roundedIntPoint(absolute.p3()));
quad->setP4(roundedIntPoint(absolute.p4()));
}
PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintEvent::data(RenderObject* renderer, const LayoutRect& clipRect, const GraphicsLayer* graphicsLayer)
......
......@@ -39,7 +39,6 @@ Widget::Widget()
Widget::~Widget()
{
ASSERT(!parent());
}
Widget* Widget::root() const
......@@ -52,116 +51,4 @@ Widget* Widget::root() const
return 0;
}
IntRect Widget::convertFromRootView(const IntRect& rootRect) const
{
if (const Widget* parentWidget = parent()) {
IntRect parentRect = parentWidget->convertFromRootView(rootRect);
return convertFromContainingView(parentRect);
}
return rootRect;
}
IntRect Widget::convertToRootView(const IntRect& localRect) const
{
if (const Widget* parentWidget = parent()) {
IntRect parentRect = convertToContainingView(localRect);
return parentWidget->convertToRootView(parentRect);
}
return localRect;
}
IntPoint Widget::convertFromRootView(const IntPoint& rootPoint) const
{
if (const Widget* parentWidget = parent()) {
IntPoint parentPoint = parentWidget->convertFromRootView(rootPoint);
return convertFromContainingView(parentPoint);
}
return rootPoint;
}
IntPoint Widget::convertToRootView(const IntPoint& localPoint) const
{
if (const Widget* parentWidget = parent()) {
IntPoint parentPoint = convertToContainingView(localPoint);
return parentWidget->convertToRootView(parentPoint);
}
return localPoint;
}
IntRect Widget::convertFromContainingWindow(const IntRect& windowRect) const
{
if (const Widget* parentWidget = parent()) {
IntRect parentRect = parentWidget->convertFromContainingWindow(windowRect);
return convertFromContainingView(parentRect);
}
return windowRect;
}
IntRect Widget::convertToContainingWindow(const IntRect& localRect) const
{
if (const Widget* parentWidget = parent()) {
IntRect parentRect = convertToContainingView(localRect);
return parentWidget->convertToContainingWindow(parentRect);
}
return localRect;
}
IntPoint Widget::convertFromContainingWindow(const IntPoint& windowPoint) const
{
if (const Widget* parentWidget = parent()) {
IntPoint parentPoint = parentWidget->convertFromContainingWindow(windowPoint);
return convertFromContainingView(parentPoint);
}
return windowPoint;
}
FloatPoint Widget::convertFromContainingWindow(const FloatPoint& windowPoint) const
{
// Widgets / windows are required to be IntPoint aligned, but we may need to convert
// FloatPoint values within them (eg. for event co-ordinates).
IntPoint flooredPoint = flooredIntPoint(windowPoint);
FloatPoint parentPoint = this->convertFromContainingWindow(flooredPoint);
FloatSize windowFraction = windowPoint - flooredPoint;
// Use linear interpolation handle any fractional value (eg. for iframes subject to a transform
// beyond just a simple translation).
// FIXME: Add FloatPoint variants of all co-ordinate space conversion APIs.
if (!windowFraction.isEmpty()) {
const int kFactor = 1000;
IntPoint parentLineEnd = this->convertFromContainingWindow(flooredPoint + roundedIntSize(windowFraction.scaledBy(kFactor)));
FloatSize parentFraction = (parentLineEnd - parentPoint).scaledBy(1.0f / kFactor);
parentPoint.move(parentFraction);
}
return parentPoint;
}
IntPoint Widget::convertToContainingWindow(const IntPoint& localPoint) const
{
if (const Widget* parentWidget = parent()) {
IntPoint parentPoint = convertToContainingView(localPoint);
return parentWidget->convertToContainingWindow(parentPoint);
}
return localPoint;
}
IntRect Widget::convertToContainingView(const IntRect& localRect) const
{
return localRect;
}
IntRect Widget::convertFromContainingView(const IntRect& parentRect) const
{
return parentRect;
}
IntPoint Widget::convertToContainingView(const IntPoint& localPoint) const
{
return localPoint;
}
IntPoint Widget::convertFromContainingView(const IntPoint& parentPoint) const
{
return parentPoint;
}
} // namespace blink
......@@ -70,32 +70,14 @@ public:
virtual bool isScrollbar() const { return false; }
virtual HostWindow* hostWindow() const { ASSERT_NOT_REACHED(); return 0; }
void setParent(Widget* parent) { m_parent = parent; }
Widget* parent() const { return m_parent; }
Widget* root() const;
IntRect convertToRootView(const IntRect&) const;
IntRect convertFromRootView(const IntRect&) const;
IntPoint convertToRootView(const IntPoint&) const;
IntPoint convertFromRootView(const IntPoint&) const;
// It is important for cross-platform code to realize that Mac has flipped coordinates. Therefore any code
// that tries to convert the location of a rect using the point-based convertFromContainingWindow will end
// up with an inaccurate rect. Always make sure to use the rect-based convertFromContainingWindow method
// when converting window rects.
IntRect convertToContainingWindow(const IntRect&) const;
IntRect convertFromContainingWindow(const IntRect&) const;
IntPoint convertToContainingWindow(const IntPoint&) const;
IntPoint convertFromContainingWindow(const IntPoint&) const;
FloatPoint convertFromContainingWindow(const FloatPoint&) const;
// Virtual methods to convert points to/from the containing ScrollView
virtual IntRect convertToContainingView(const IntRect&) const;
virtual IntRect convertFromContainingView(const IntRect&) const;
virtual IntPoint convertToContainingView(const IntPoint&) const;
virtual IntPoint convertFromContainingView(const IntPoint&) const;
virtual IntRect convertToContainingView(const IntRect& localRect) const { return localRect; }
virtual IntRect convertFromContainingView(const IntRect& localRect) const { return localRect; }
virtual IntPoint convertToContainingView(const IntPoint& localPoint) const { return localPoint; }
virtual IntPoint convertFromContainingView(const IntPoint& localPoint) const { return localPoint; }
private:
Widget* m_parent;
......
......@@ -136,25 +136,13 @@ public:
// Convert points and rects between the scrollbar and its containing view.
// The client needs to implement these in order to be aware of layout effects
// like CSS transforms.
virtual IntRect convertFromScrollbarToContainingView(const Scrollbar* scrollbar, const IntRect& scrollbarRect) const
{
return scrollbar->Widget::convertToContainingView(scrollbarRect);
}
virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntRect& parentRect) const
{
return scrollbar->Widget::convertFromContainingView(parentRect);
}
virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar* scrollbar, const IntPoint& scrollbarPoint) const
{
return scrollbar->Widget::convertToContainingView(scrollbarPoint);
}
virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntPoint& parentPoint) const
{
return scrollbar->Widget::convertFromContainingView(parentPoint);
}
virtual IntRect convertFromScrollbarToContainingView(const Scrollbar* scrollbar, const IntRect& scrollbarRect) const = 0;
virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntRect& parentRect) const = 0;
virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar* scrollbar, const IntPoint& scrollbarPoint) const = 0;
virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntPoint& parentPoint) const = 0;
virtual Scrollbar* horizontalScrollbar() const { return 0; }
virtual Scrollbar* verticalScrollbar() const { return 0; }
virtual Scrollbar* horizontalScrollbar() const = 0;
virtual Scrollbar* verticalScrollbar() const = 0;
// scrollPosition is relative to the scrollOrigin. i.e. If the page is RTL
// then scrollPosition will be negative.
......
......@@ -284,7 +284,7 @@ bool Scrollbar::gestureEvent(const PlatformGestureEvent& evt)
case PlatformEvent::GestureTapDown:
// FIXME(sky): Is setting the pressed part needed since we only have overlay scrollbars?
setPressedPart(NoPart);
m_pressedPos = orientation() == HorizontalScrollbar ? convertFromContainingWindow(evt.position()).x() : convertFromContainingWindow(evt.position()).y();
m_pressedPos = orientation() == HorizontalScrollbar ? convertFromContainingView(evt.position()).x() : convertFromContainingView(evt.position()).y();
return true;
case PlatformEvent::GestureTapDownCancel:
case PlatformEvent::GestureScrollBegin:
......@@ -330,14 +330,14 @@ void Scrollbar::mouseMoved(const PlatformMouseEvent& evt)
m_scrollableArea->scrollToOffsetWithoutAnimation(m_orientation, m_dragOrigin + m_scrollableArea->minimumScrollPosition(m_orientation));
} else {
moveThumb(m_orientation == HorizontalScrollbar ?
convertFromContainingWindow(evt.position()).x() :
convertFromContainingWindow(evt.position()).y());
convertFromContainingView(evt.position()).x() :
convertFromContainingView(evt.position()).y());
}
return;
}
if (m_pressedPart != NoPart)
m_pressedPos = orientation() == HorizontalScrollbar ? convertFromContainingWindow(evt.position()).x() : convertFromContainingWindow(evt.position()).y();
m_pressedPos = orientation() == HorizontalScrollbar ? convertFromContainingView(evt.position()).x() : convertFromContainingView(evt.position()).y();
// FIXME(sky): Cleanup this code now that part is always NoPart.
ScrollbarPart part = NoPart;
......@@ -396,7 +396,7 @@ void Scrollbar::mouseDown(const PlatformMouseEvent& evt)
// FIXME(sky): Do we still need setPressedPart now that we only set it to NoPart?
setPressedPart(NoPart);
int pressedPos = orientation() == HorizontalScrollbar ? convertFromContainingWindow(evt.position()).x() : convertFromContainingWindow(evt.position()).y();
int pressedPos = orientation() == HorizontalScrollbar ? convertFromContainingView(evt.position()).x() : convertFromContainingView(evt.position()).y();
if ((m_pressedPart == BackTrackPart || m_pressedPart == ForwardTrackPart) && shouldCenterOnThumb(evt)) {
setHoveredPart(ThumbPart);
......@@ -527,7 +527,7 @@ bool Scrollbar::shouldCenterOnThumb(const PlatformMouseEvent& evt)
bool Scrollbar::shouldSnapBackToDragOrigin(const PlatformMouseEvent& evt)
{
IntPoint mousePosition = convertFromContainingWindow(evt.position());
IntPoint mousePosition = convertFromContainingView(evt.position());
mousePosition.move(x(), y());
return blink::Platform::current()->scrollbarBehavior()->shouldSnapBackToDragOrigin(mousePosition, trackRect(), orientation() == HorizontalScrollbar);
}
......
......@@ -72,12 +72,6 @@ public:
// "Content-Language" header as a fallback.
BLINK_EXPORT WebString computeInheritedLanguage() const;
// Returns the bounds of the element in viewport space. The bounds
// have been adjusted to include any transformations. This view is
// also called the Root View in Blink.
// This function will update the layout if required.
BLINK_EXPORT WebRect boundsInViewportSpace();
// Returns the image contents of this element or a null WebImage
// if there isn't any.
BLINK_EXPORT WebImage imageContents();
......
......@@ -142,11 +142,6 @@ void WebElement::requestFullScreen()
{
}
WebRect WebElement::boundsInViewportSpace()
{
return unwrap<Element>()->boundsInRootViewSpace();
}
WebImage WebElement::imageContents()
{
if (isNull())
......
......@@ -81,7 +81,7 @@ PlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMo
// FIXME: Widget is always toplevel, unless it's a popup. We may be able
// to get rid of this once we abstract popups into a WebKit API.
m_position = widget->convertFromContainingWindow(
m_position = widget->convertFromContainingView(
IntPoint((e.x - offset.width()) / scale, (e.y - offset.height()) / scale));
m_globalPosition = IntPoint(e.globalX, e.globalY);
m_movementDelta = IntPoint(e.movementX / scale, e.movementY / scale);
......@@ -127,7 +127,7 @@ PlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMo
float scale = widgetInputEventsScaleFactor(widget);
IntSize offset = widgetInputEventsOffset(widget);
m_position = widget->convertFromContainingWindow(
m_position = widget->convertFromContainingView(
IntPoint((e.x - offset.width()) / scale, (e.y - offset.height()) / scale));
m_globalPosition = IntPoint(e.globalX, e.globalY);
m_deltaX = e.deltaX;
......@@ -245,7 +245,7 @@ PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const W
default:
ASSERT_NOT_REACHED();
}
m_position = widget->convertFromContainingWindow(
m_position = widget->convertFromContainingView(
IntPoint((e.x - offset.width()) / scale, (e.y - offset.height()) / scale));
m_globalPosition = IntPoint(e.globalX, e.globalY);
m_timestamp = e.timeStampSeconds;
......@@ -412,8 +412,8 @@ PlatformTouchPointBuilder::PlatformTouchPointBuilder(Widget* widget, const WebTo
m_state = toPlatformTouchPointState(point.state);
FloatPoint pos = (point.position - offset).scaledBy(scale);
IntPoint flooredPoint = flooredIntPoint(pos);
// This assumes convertFromContainingWindow does only translations, not scales.
m_pos = widget->convertFromContainingWindow(flooredPoint) + (pos - flooredPoint);
// This assumes convertFromContainingView does only translations, not scales.
m_pos = widget->convertFromContainingView(flooredPoint) + (pos - flooredPoint);
m_screenPos = FloatPoint(point.screenPosition.x, point.screenPosition.y);
m_radius = FloatSize(point.radiusX, point.radiusY).scaledBy(scale);
m_rotationAngle = point.rotationAngle;
......@@ -471,10 +471,8 @@ static void updateWebMouseEventFromCoreMouseEvent(const MouseRelatedEvent& event
webEvent.timeStampSeconds = event.timeStamp() / millisPerSecond;
webEvent.modifiers = getWebInputModifiers(event);
FrameView* view = toFrameView(widget.parent());
IntPoint windowPoint = IntPoint(event.absoluteLocation().x(), event.absoluteLocation().y());
if (view)
windowPoint = view->contentsToWindow(windowPoint);
windowPoint = widget.convertToContainingView(windowPoint);
webEvent.globalX = event.screenX();
webEvent.globalY = event.screenY();
webEvent.windowX = windowPoint.x();
......@@ -559,10 +557,8 @@ WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, const RenderObj
modifiers = getWebInputModifiers(event);
// The mouse event co-ordinates should be generated from the co-ordinates of the touch point.
FrameView* view = toFrameView(widget->parent());
IntPoint windowPoint = roundedIntPoint(touch->absoluteLocation());
if (view)
windowPoint = view->contentsToWindow(windowPoint);
windowPoint = widget->convertToContainingView(windowPoint);
IntPoint screenPoint = roundedIntPoint(touch->screenLocation());
globalX = screenPoint.x();
globalY = screenPoint.y();
......@@ -608,9 +604,7 @@ WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, const PlatformM
timeStampSeconds = event.timestamp();
// FIXME: Widget is always toplevel, unless it's a popup. We may be able
// to get rid of this once we abstract popups into a WebKit API.
IntPoint position = widget->convertToContainingWindow(event.position());
IntPoint position = event.position();
float scale = widgetInputEventsScaleFactor(widget);
position.scale(scale, scale);
x = position.x();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册