diff options
author | Steve Block <steveblock@google.com> | 2010-04-27 16:31:00 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-05-11 14:42:12 +0100 |
commit | dcc8cf2e65d1aa555cce12431a16547e66b469ee (patch) | |
tree | 92a8d65cd5383bca9749f5327fb5e440563926e6 /WebCore/rendering/RenderWidget.cpp | |
parent | ccac38a6b48843126402088a309597e682f40fe6 (diff) | |
download | external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.zip external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.gz external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.bz2 |
Merge webkit.org at r58033 : Initial merge by git
Change-Id: If006c38561af287c50cd578d251629b51e4d8cd1
Diffstat (limited to 'WebCore/rendering/RenderWidget.cpp')
-rw-r--r-- | WebCore/rendering/RenderWidget.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/WebCore/rendering/RenderWidget.cpp b/WebCore/rendering/RenderWidget.cpp index f6f6da8..b03dcd6 100644 --- a/WebCore/rendering/RenderWidget.cpp +++ b/WebCore/rendering/RenderWidget.cpp @@ -1,7 +1,7 @@ /* * Copyright (C) 1999 Lars Knoll (knoll@kde.org) * Copyright (C) 2000 Dirk Mueller (mueller@kde.org) - * Copyright (C) 2004, 2006, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2004, 2006, 2009, 2010 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -151,13 +151,22 @@ RenderWidget::~RenderWidget() bool RenderWidget::setWidgetGeometry(const IntRect& frame) { ASSERT(!widgetHierarchyUpdateSuspendCount); - if (!node() || m_widget->frameRect() == frame) + if (!node()) return false; + IntRect clipRect = enclosingLayer()->childrenClipRect(); + bool clipChanged = m_clipRect != clipRect; + bool boundsChanged = m_widget->frameRect() != frame; + + if (!boundsChanged && !clipChanged) + return false; + + m_clipRect = clipRect; + RenderWidgetProtector protector(this); RefPtr<Node> protectedNode(node()); m_widget->setFrameRect(frame); - return true; + return boundsChanged; } void RenderWidget::setWidget(PassRefPtr<Widget> widget) @@ -304,7 +313,7 @@ void RenderWidget::deref(RenderArena *arena) void RenderWidget::updateWidgetPosition() { - if (!m_widget) + if (!m_widget || !node()) // Check the node in case destroy() has been called. return; // FIXME: This doesn't work correctly with transforms. @@ -327,6 +336,21 @@ void RenderWidget::updateWidgetPosition() #endif } +void RenderWidget::widgetPositionsUpdated() +{ + if (!m_widget) + return; + m_widget->widgetPositionsUpdated(); +} + +IntRect RenderWidget::windowClipRect() const +{ + if (!m_frameView) + return IntRect(); + + return intersection(m_frameView->contentsToWindow(m_clipRect), m_frameView->windowClipRect()); +} + void RenderWidget::setSelectionState(SelectionState state) { if (selectionState() != state) { |