diff options
author | Ben Murdoch <benm@google.com> | 2010-10-22 13:02:20 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2010-10-26 15:21:41 +0100 |
commit | a94275402997c11dd2e778633dacf4b7e630a35d (patch) | |
tree | e66f56c67e3b01f22c9c23cd932271ee9ac558ed /WebCore/page/FrameView.cpp | |
parent | 09e26c78506587b3f5d930d7bc72a23287ffbec0 (diff) | |
download | external_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.zip external_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.tar.gz external_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.tar.bz2 |
Merge WebKit at r70209: Initial merge by Git
Change-Id: Id23a68efa36e9d1126bcce0b137872db00892c8e
Diffstat (limited to 'WebCore/page/FrameView.cpp')
-rw-r--r-- | WebCore/page/FrameView.cpp | 85 |
1 files changed, 65 insertions, 20 deletions
diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp index 9a4daa7..660cdfb 100644 --- a/WebCore/page/FrameView.cpp +++ b/WebCore/page/FrameView.cpp @@ -45,7 +45,7 @@ #include "HTMLFrameSetElement.h" #include "HTMLNames.h" #include "HTMLPlugInImageElement.h" -#include "InspectorTimelineAgent.h" +#include "InspectorInstrumentation.h" #include "OverflowEvent.h" #include "RenderEmbeddedObject.h" #include "RenderLayer.h" @@ -387,9 +387,9 @@ void FrameView::updateCanHaveScrollbars() ScrollbarMode vMode; scrollbarModes(hMode, vMode); if (hMode == ScrollbarAlwaysOff && vMode == ScrollbarAlwaysOff) - m_canHaveScrollbars = false; + setCanHaveScrollbars(false); else - m_canHaveScrollbars = true; + setCanHaveScrollbars(true); } PassRefPtr<Scrollbar> FrameView::createScrollbar(ScrollbarOrientation orientation) @@ -486,6 +486,58 @@ void FrameView::applyOverflowToViewport(RenderObject* o, ScrollbarMode& hMode, S m_viewportRenderer = o; } +void FrameView::calculateScrollbarModesForLayout(ScrollbarMode& hMode, ScrollbarMode& vMode) +{ + if (m_canHaveScrollbars) { + hMode = ScrollbarAuto; + vMode = ScrollbarAuto; + } else { + hMode = ScrollbarAlwaysOff; + vMode = ScrollbarAlwaysOff; + } + + if (!m_layoutRoot) { + Document* document = m_frame->document(); + Node* documentElement = document->documentElement(); + RenderObject* rootRenderer = documentElement ? documentElement->renderer() : 0; + Node* body = document->body(); + if (body && body->renderer()) { + if (body->hasTagName(framesetTag) && m_frame->settings() && !m_frame->settings()->frameFlatteningEnabled()) { + body->renderer()->setChildNeedsLayout(true); + vMode = ScrollbarAlwaysOff; + hMode = ScrollbarAlwaysOff; + } else if (body->hasTagName(bodyTag)) { + if (!m_firstLayout && m_size.height() != layoutHeight() && body->renderer()->enclosingBox()->stretchesToViewport()) + body->renderer()->setChildNeedsLayout(true); + // It's sufficient to just check the X overflow, + // since it's illegal to have visible in only one direction. + RenderObject* o = rootRenderer->style()->overflowX() == OVISIBLE && document->documentElement()->hasTagName(htmlTag) ? body->renderer() : rootRenderer; + applyOverflowToViewport(o, hMode, vMode); + } + } else if (rootRenderer) { +#if ENABLE(SVG) + if (documentElement->isSVGElement()) { + if (!m_firstLayout && (m_size.width() != layoutWidth() || m_size.height() != layoutHeight())) + rootRenderer->setChildNeedsLayout(true); + } else + applyOverflowToViewport(rootRenderer, hMode, vMode); +#else + applyOverflowToViewport(rootRenderer, hMode, vMode); +#endif + } +#ifdef INSTRUMENT_LAYOUT_SCHEDULING + if (m_firstLayout && !document->ownerElement()) + printf("Elapsed time before first layout: %d\n", document->elapsedTime()); +#endif + } + + HTMLFrameOwnerElement* owner = m_frame->ownerElement(); + if (owner && (owner->scrollingMode() == ScrollbarAlwaysOff)) { + hMode = ScrollbarAlwaysOff; + vMode = ScrollbarAlwaysOff; + } +} + #if USE(ACCELERATED_COMPOSITING) void FrameView::updateCompositingLayers() { @@ -626,10 +678,7 @@ void FrameView::layout(bool allowSubtree) if (isPainting()) return; -#if ENABLE(INSPECTOR) - if (InspectorTimelineAgent* timelineAgent = inspectorTimelineAgent()) - timelineAgent->willLayout(); -#endif + InspectorInstrumentationCookie cookie = InspectorInstrumentation::willLayout(m_frame.get()); if (!allowSubtree && m_layoutRoot) { m_layoutRoot->markContainingBlocksForLayout(false); @@ -683,6 +732,7 @@ void FrameView::layout(bool allowSubtree) ScrollbarMode hMode; ScrollbarMode vMode; +<<<<<<< HEAD if (m_canHaveScrollbars) { hMode = ScrollbarAuto; vMode = ScrollbarAuto; @@ -726,6 +776,10 @@ void FrameView::layout(bool allowSubtree) printf("Elapsed time before first layout: %d\n", document->elapsedTime()); #endif } +======= + + calculateScrollbarModesForLayout(hMode, vMode); +>>>>>>> webkit.org at r70209 m_doFullRepaint = !subtree && (m_firstLayout || toRenderView(root)->printing()); @@ -860,10 +914,7 @@ void FrameView::layout(bool allowSubtree) ASSERT(m_enqueueEvents); } -#if ENABLE(INSPECTOR) - if (InspectorTimelineAgent* timelineAgent = inspectorTimelineAgent()) - timelineAgent->didLayout(); -#endif + InspectorInstrumentation::didLayout(cookie); m_nestedLayoutCount--; } @@ -1970,10 +2021,7 @@ void FrameView::paintContents(GraphicsContext* p, const IntRect& rect) if (!frame()) return; -#if ENABLE(INSPECTOR) - if (InspectorTimelineAgent* timelineAgent = inspectorTimelineAgent()) - timelineAgent->willPaint(rect); -#endif + InspectorInstrumentationCookie cookie = InspectorInstrumentation::willPaint(m_frame.get(), rect); Document* document = frame()->document(); @@ -1993,7 +2041,7 @@ void FrameView::paintContents(GraphicsContext* p, const IntRect& rect) fillWithRed = true; if (fillWithRed) - p->fillRect(rect, Color(0xFF, 0, 0), DeviceColorSpace); + p->fillRect(rect, Color(0xFF, 0, 0), ColorSpaceDeviceRGB); #endif bool isTopLevelPainter = !sCurrentPaintTimeStamp; @@ -2047,10 +2095,7 @@ void FrameView::paintContents(GraphicsContext* p, const IntRect& rect) if (isTopLevelPainter) sCurrentPaintTimeStamp = 0; -#if ENABLE(INSPECTOR) - if (InspectorTimelineAgent* timelineAgent = inspectorTimelineAgent()) - timelineAgent->didPaint(); -#endif + InspectorInstrumentation::didPaint(cookie); } void FrameView::setPaintBehavior(PaintBehavior behavior) |