OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
5 * 2000 Dirk Mueller <mueller@kde.org> | 5 * 2000 Dirk Mueller <mueller@kde.org> |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * Copyright (C) 2009 Google Inc. All rights reserved. | 9 * Copyright (C) 2009 Google Inc. All rights reserved. |
10 * | 10 * |
(...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 // If the embedded SVG document appears the first time, the ownerRenderer ha
s already finished | 729 // If the embedded SVG document appears the first time, the ownerRenderer ha
s already finished |
730 // layout without knowing about the existence of the embedded SVG document,
because RenderReplaced | 730 // layout without knowing about the existence of the embedded SVG document,
because RenderReplaced |
731 // embeddedContentBox() returns 0, as long as the embedded document isn't lo
aded yet. Before | 731 // embeddedContentBox() returns 0, as long as the embedded document isn't lo
aded yet. Before |
732 // bothering to lay out the SVG document, mark the ownerRenderer needing lay
out and ask its | 732 // bothering to lay out the SVG document, mark the ownerRenderer needing lay
out and ask its |
733 // FrameView for a layout. After that the RenderEmbeddedObject (ownerRendere
r) carries the | 733 // FrameView for a layout. After that the RenderEmbeddedObject (ownerRendere
r) carries the |
734 // correct size, which RenderSVGRoot::computeReplacedLogicalWidth/Height rel
y on, when laying | 734 // correct size, which RenderSVGRoot::computeReplacedLogicalWidth/Height rel
y on, when laying |
735 // out for the first time, or when the RenderSVGRoot size has changed dynami
cally (eg. via <script>). | 735 // out for the first time, or when the RenderSVGRoot size has changed dynami
cally (eg. via <script>). |
736 RefPtr<FrameView> frameView = ownerRenderer->frame()->view(); | 736 RefPtr<FrameView> frameView = ownerRenderer->frame()->view(); |
737 | 737 |
738 // Mark the owner renderer as needing layout. | 738 // Mark the owner renderer as needing layout. |
739 ownerRenderer->setNeedsLayoutAndPrefWidthsRecalcAndFullRepaint(); | 739 ownerRenderer->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); |
740 | 740 |
741 // Synchronously enter layout, to layout the view containing the host object
/embed/iframe. | 741 // Synchronously enter layout, to layout the view containing the host object
/embed/iframe. |
742 ASSERT(frameView); | 742 ASSERT(frameView); |
743 frameView->layout(); | 743 frameView->layout(); |
744 } | 744 } |
745 | 745 |
746 void FrameView::performPreLayoutTasks() | 746 void FrameView::performPreLayoutTasks() |
747 { | 747 { |
748 TRACE_EVENT0("webkit", "FrameView::performPreLayoutTasks"); | 748 TRACE_EVENT0("webkit", "FrameView::performPreLayoutTasks"); |
749 lifecycle().advanceTo(DocumentLifecycle::InPreLayout); | 749 lifecycle().advanceTo(DocumentLifecycle::InPreLayout); |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 | 949 |
950 if (oldSize != m_size && !m_firstLayout) { | 950 if (oldSize != m_size && !m_firstLayout) { |
951 RenderBox* rootRenderer = document->documentElement() ? document
->documentElement()->renderBox() : 0; | 951 RenderBox* rootRenderer = document->documentElement() ? document
->documentElement()->renderBox() : 0; |
952 RenderBox* bodyRenderer = rootRenderer && document->body() ? doc
ument->body()->renderBox() : 0; | 952 RenderBox* bodyRenderer = rootRenderer && document->body() ? doc
ument->body()->renderBox() : 0; |
953 if (bodyRenderer && bodyRenderer->stretchesToViewport()) | 953 if (bodyRenderer && bodyRenderer->stretchesToViewport()) |
954 bodyRenderer->setChildNeedsLayout(); | 954 bodyRenderer->setChildNeedsLayout(); |
955 else if (rootRenderer && rootRenderer->stretchesToViewport()) | 955 else if (rootRenderer && rootRenderer->stretchesToViewport()) |
956 rootRenderer->setChildNeedsLayout(); | 956 rootRenderer->setChildNeedsLayout(); |
957 } | 957 } |
958 | 958 |
959 // We need to set m_doFullPaintInvalidation before triggering layout
as RenderObject::checkForRepaint | 959 // We need to set m_doFullPaintInvalidation before triggering layout
as RenderObject::checkForPaintInvalidation |
960 // checks the boolean to disable local paint invalidations. | 960 // checks the boolean to disable local paint invalidations. |
961 m_doFullPaintInvalidation |= renderView()->shouldDoFullRepaintForNex
tLayout(); | 961 m_doFullPaintInvalidation |= renderView()->shouldDoFullRepaintForNex
tLayout(); |
962 } | 962 } |
963 | 963 |
964 layer = rootForThisLayout->enclosingLayer(); | 964 layer = rootForThisLayout->enclosingLayer(); |
965 | 965 |
966 performLayout(rootForThisLayout, inSubtreeLayout); | 966 performLayout(rootForThisLayout, inSubtreeLayout); |
967 | 967 |
968 m_layoutSubtreeRoot = 0; | 968 m_layoutSubtreeRoot = 0; |
969 } // Reset m_layoutSchedulingEnabled to its previous value. | 969 } // Reset m_layoutSchedulingEnabled to its previous value. |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1037 ASSERT(!m_nestedLayoutCount); | 1037 ASSERT(!m_nestedLayoutCount); |
1038 | 1038 |
1039 TRACE_EVENT1("blink", "FrameView::invalidateTree", "root", TRACE_STR_COPY(ro
ot->debugName().ascii().data())); | 1039 TRACE_EVENT1("blink", "FrameView::invalidateTree", "root", TRACE_STR_COPY(ro
ot->debugName().ascii().data())); |
1040 | 1040 |
1041 // FIXME: really, we're in the paint invalidation phase here, and the compos
iting queries are legal. | 1041 // FIXME: really, we're in the paint invalidation phase here, and the compos
iting queries are legal. |
1042 // Until those states are fully fledged, I'll just disable the ASSERTS. | 1042 // Until those states are fully fledged, I'll just disable the ASSERTS. |
1043 DisableCompositingQueryAsserts compositingQueryAssertsDisabler; | 1043 DisableCompositingQueryAsserts compositingQueryAssertsDisabler; |
1044 | 1044 |
1045 RootLayoutStateScope rootLayoutStateScope(*root); | 1045 RootLayoutStateScope rootLayoutStateScope(*root); |
1046 | 1046 |
1047 root->invalidateTreeAfterLayout(*root->containerForRepaint()); | 1047 root->invalidateTreeAfterLayout(*root->containerForPaintInvalidation()); |
1048 | 1048 |
1049 // Invalidate the paint of the frameviews scrollbars if needed | 1049 // Invalidate the paint of the frameviews scrollbars if needed |
1050 if (hasVerticalBarDamage()) | 1050 if (hasVerticalBarDamage()) |
1051 invalidateRect(verticalBarDamage()); | 1051 invalidateRect(verticalBarDamage()); |
1052 if (hasHorizontalBarDamage()) | 1052 if (hasHorizontalBarDamage()) |
1053 invalidateRect(horizontalBarDamage()); | 1053 invalidateRect(horizontalBarDamage()); |
1054 resetScrollbarDamage(); | 1054 resetScrollbarDamage(); |
1055 } | 1055 } |
1056 | 1056 |
1057 DocumentLifecycle& FrameView::lifecycle() const | 1057 DocumentLifecycle& FrameView::lifecycle() const |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1300 return; | 1300 return; |
1301 | 1301 |
1302 ViewportConstrainedObjectSet::const_iterator end = m_viewportConstrainedObje
cts->end(); | 1302 ViewportConstrainedObjectSet::const_iterator end = m_viewportConstrainedObje
cts->end(); |
1303 for (ViewportConstrainedObjectSet::const_iterator it = m_viewportConstrained
Objects->begin(); it != end; ++it) { | 1303 for (ViewportConstrainedObjectSet::const_iterator it = m_viewportConstrained
Objects->begin(); it != end; ++it) { |
1304 RenderObject* renderer = *it; | 1304 RenderObject* renderer = *it; |
1305 RenderStyle* style = renderer->style(); | 1305 RenderStyle* style = renderer->style(); |
1306 if (widthChanged) { | 1306 if (widthChanged) { |
1307 if (style->width().isFixed() && (style->left().isAuto() || style->ri
ght().isAuto())) | 1307 if (style->width().isFixed() && (style->left().isAuto() || style->ri
ght().isAuto())) |
1308 renderer->setNeedsPositionedMovementLayout(); | 1308 renderer->setNeedsPositionedMovementLayout(); |
1309 else | 1309 else |
1310 renderer->setNeedsLayoutAndFullRepaint(); | 1310 renderer->setNeedsLayoutAndFullPaintInvalidation(); |
1311 } | 1311 } |
1312 if (heightChanged) { | 1312 if (heightChanged) { |
1313 if (style->height().isFixed() && (style->top().isAuto() || style->bo
ttom().isAuto())) | 1313 if (style->height().isFixed() && (style->top().isAuto() || style->bo
ttom().isAuto())) |
1314 renderer->setNeedsPositionedMovementLayout(); | 1314 renderer->setNeedsPositionedMovementLayout(); |
1315 else | 1315 else |
1316 renderer->setNeedsLayoutAndFullRepaint(); | 1316 renderer->setNeedsLayoutAndFullPaintInvalidation(); |
1317 } | 1317 } |
1318 } | 1318 } |
1319 } | 1319 } |
1320 | 1320 |
1321 bool FrameView::shouldPlaceVerticalScrollbarOnLeft() const | 1321 bool FrameView::shouldPlaceVerticalScrollbarOnLeft() const |
1322 { | 1322 { |
1323 // FIXME: Mainframe scrollbar placement should respect the embedding applica
tion RTL UI policy. | 1323 // FIXME: Mainframe scrollbar placement should respect the embedding applica
tion RTL UI policy. |
1324 // See crbug.com/249860. | 1324 // See crbug.com/249860. |
1325 if (m_frame->isMainFrame()) | 1325 if (m_frame->isMainFrame()) |
1326 return false; | 1326 return false; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1407 } | 1407 } |
1408 | 1408 |
1409 if (layer->hasAncestorWithFilterOutsets()) { | 1409 if (layer->hasAncestorWithFilterOutsets()) { |
1410 // If the fixed layer has a blur/drop-shadow filter applied on at le
ast one of its parents, we cannot | 1410 // If the fixed layer has a blur/drop-shadow filter applied on at le
ast one of its parents, we cannot |
1411 // scroll using the fast path, otherwise the outsets of the filter w
ill be moved around the page. | 1411 // scroll using the fast path, otherwise the outsets of the filter w
ill be moved around the page. |
1412 return false; | 1412 return false; |
1413 } | 1413 } |
1414 | 1414 |
1415 IntRect updateRect = pixelSnappedIntRect(layer->repainter().repaintRectI
ncludingNonCompositingDescendants()); | 1415 IntRect updateRect = pixelSnappedIntRect(layer->repainter().repaintRectI
ncludingNonCompositingDescendants()); |
1416 | 1416 |
1417 const RenderLayerModelObject* repaintContainer = layer->renderer()->cont
ainerForRepaint(); | 1417 const RenderLayerModelObject* repaintContainer = layer->renderer()->cont
ainerForPaintInvalidation(); |
1418 if (repaintContainer && !repaintContainer->isRenderView()) { | 1418 if (repaintContainer && !repaintContainer->isRenderView()) { |
1419 // If the fixed-position layer is contained by a composited layer th
at is not its containing block, | 1419 // If the fixed-position layer is contained by a composited layer th
at is not its containing block, |
1420 // then we have to invalidate that enclosing layer, not the RenderVi
ew. | 1420 // then we have to invalidate that enclosing layer, not the RenderVi
ew. |
1421 // FIXME: Why do we need to issue this invalidation? Won't the fixed
position element just scroll | 1421 // FIXME: Why do we need to issue this invalidation? Won't the fixed
position element just scroll |
1422 // with the enclosing layer. | 1422 // with the enclosing layer. |
1423 updateRect.moveBy(scrollPosition()); | 1423 updateRect.moveBy(scrollPosition()); |
1424 IntRect previousRect = updateRect; | 1424 IntRect previousRect = updateRect; |
1425 previousRect.move(scrollDelta); | 1425 previousRect.move(scrollDelta); |
1426 updateRect.unite(previousRect); | 1426 updateRect.unite(previousRect); |
1427 layer->renderer()->invalidatePaintUsingContainer(repaintContainer, u
pdateRect, InvalidationScroll); | 1427 layer->renderer()->invalidatePaintUsingContainer(repaintContainer, u
pdateRect, InvalidationScroll); |
(...skipping 1498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2926 // Dumping externalRepresentation(m_frame->renderer()).ascii() is a good tri
ck to see | 2926 // Dumping externalRepresentation(m_frame->renderer()).ascii() is a good tri
ck to see |
2927 // the state of things before and after the layout | 2927 // the state of things before and after the layout |
2928 if (RenderView* renderView = this->renderView()) { | 2928 if (RenderView* renderView = this->renderView()) { |
2929 float pageLogicalWidth = renderView->style()->isHorizontalWritingMode()
? pageSize.width() : pageSize.height(); | 2929 float pageLogicalWidth = renderView->style()->isHorizontalWritingMode()
? pageSize.width() : pageSize.height(); |
2930 float pageLogicalHeight = renderView->style()->isHorizontalWritingMode()
? pageSize.height() : pageSize.width(); | 2930 float pageLogicalHeight = renderView->style()->isHorizontalWritingMode()
? pageSize.height() : pageSize.width(); |
2931 | 2931 |
2932 LayoutUnit flooredPageLogicalWidth = static_cast<LayoutUnit>(pageLogical
Width); | 2932 LayoutUnit flooredPageLogicalWidth = static_cast<LayoutUnit>(pageLogical
Width); |
2933 LayoutUnit flooredPageLogicalHeight = static_cast<LayoutUnit>(pageLogica
lHeight); | 2933 LayoutUnit flooredPageLogicalHeight = static_cast<LayoutUnit>(pageLogica
lHeight); |
2934 renderView->setLogicalWidth(flooredPageLogicalWidth); | 2934 renderView->setLogicalWidth(flooredPageLogicalWidth); |
2935 renderView->setPageLogicalHeight(flooredPageLogicalHeight); | 2935 renderView->setPageLogicalHeight(flooredPageLogicalHeight); |
2936 renderView->setNeedsLayoutAndPrefWidthsRecalcAndFullRepaint(); | 2936 renderView->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); |
2937 forceLayout(); | 2937 forceLayout(); |
2938 | 2938 |
2939 // If we don't fit in the given page width, we'll lay out again. If we d
on't fit in the | 2939 // If we don't fit in the given page width, we'll lay out again. If we d
on't fit in the |
2940 // page width when shrunk, we will lay out at maximum shrink and clip ex
tra content. | 2940 // page width when shrunk, we will lay out at maximum shrink and clip ex
tra content. |
2941 // FIXME: We are assuming a shrink-to-fit printing implementation. A cr
opping | 2941 // FIXME: We are assuming a shrink-to-fit printing implementation. A cr
opping |
2942 // implementation should not do this! | 2942 // implementation should not do this! |
2943 bool horizontalWritingMode = renderView->style()->isHorizontalWritingMod
e(); | 2943 bool horizontalWritingMode = renderView->style()->isHorizontalWritingMod
e(); |
2944 const LayoutRect& documentRect = renderView->documentRect(); | 2944 const LayoutRect& documentRect = renderView->documentRect(); |
2945 LayoutUnit docLogicalWidth = horizontalWritingMode ? documentRect.width(
) : documentRect.height(); | 2945 LayoutUnit docLogicalWidth = horizontalWritingMode ? documentRect.width(
) : documentRect.height(); |
2946 if (docLogicalWidth > pageLogicalWidth) { | 2946 if (docLogicalWidth > pageLogicalWidth) { |
2947 FloatSize expectedPageSize(std::min<float>(documentRect.width().toFl
oat(), pageSize.width() * maximumShrinkFactor), std::min<float>(documentRect.hei
ght().toFloat(), pageSize.height() * maximumShrinkFactor)); | 2947 FloatSize expectedPageSize(std::min<float>(documentRect.width().toFl
oat(), pageSize.width() * maximumShrinkFactor), std::min<float>(documentRect.hei
ght().toFloat(), pageSize.height() * maximumShrinkFactor)); |
2948 FloatSize maxPageSize = m_frame->resizePageRectsKeepingRatio(FloatSi
ze(originalPageSize.width(), originalPageSize.height()), expectedPageSize); | 2948 FloatSize maxPageSize = m_frame->resizePageRectsKeepingRatio(FloatSi
ze(originalPageSize.width(), originalPageSize.height()), expectedPageSize); |
2949 pageLogicalWidth = horizontalWritingMode ? maxPageSize.width() : max
PageSize.height(); | 2949 pageLogicalWidth = horizontalWritingMode ? maxPageSize.width() : max
PageSize.height(); |
2950 pageLogicalHeight = horizontalWritingMode ? maxPageSize.height() : m
axPageSize.width(); | 2950 pageLogicalHeight = horizontalWritingMode ? maxPageSize.height() : m
axPageSize.width(); |
2951 | 2951 |
2952 flooredPageLogicalWidth = static_cast<LayoutUnit>(pageLogicalWidth); | 2952 flooredPageLogicalWidth = static_cast<LayoutUnit>(pageLogicalWidth); |
2953 flooredPageLogicalHeight = static_cast<LayoutUnit>(pageLogicalHeight
); | 2953 flooredPageLogicalHeight = static_cast<LayoutUnit>(pageLogicalHeight
); |
2954 renderView->setLogicalWidth(flooredPageLogicalWidth); | 2954 renderView->setLogicalWidth(flooredPageLogicalWidth); |
2955 renderView->setPageLogicalHeight(flooredPageLogicalHeight); | 2955 renderView->setPageLogicalHeight(flooredPageLogicalHeight); |
2956 renderView->setNeedsLayoutAndPrefWidthsRecalcAndFullRepaint(); | 2956 renderView->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidatio
n(); |
2957 forceLayout(); | 2957 forceLayout(); |
2958 | 2958 |
2959 const LayoutRect& updatedDocumentRect = renderView->documentRect(); | 2959 const LayoutRect& updatedDocumentRect = renderView->documentRect(); |
2960 LayoutUnit docLogicalHeight = horizontalWritingMode ? updatedDocumen
tRect.height() : updatedDocumentRect.width(); | 2960 LayoutUnit docLogicalHeight = horizontalWritingMode ? updatedDocumen
tRect.height() : updatedDocumentRect.width(); |
2961 LayoutUnit docLogicalTop = horizontalWritingMode ? updatedDocumentRe
ct.y() : updatedDocumentRect.x(); | 2961 LayoutUnit docLogicalTop = horizontalWritingMode ? updatedDocumentRe
ct.y() : updatedDocumentRect.x(); |
2962 LayoutUnit docLogicalRight = horizontalWritingMode ? updatedDocument
Rect.maxX() : updatedDocumentRect.maxY(); | 2962 LayoutUnit docLogicalRight = horizontalWritingMode ? updatedDocument
Rect.maxX() : updatedDocumentRect.maxY(); |
2963 LayoutUnit clippedLogicalLeft = 0; | 2963 LayoutUnit clippedLogicalLeft = 0; |
2964 if (!renderView->style()->isLeftToRightDirection()) | 2964 if (!renderView->style()->isLeftToRightDirection()) |
2965 clippedLogicalLeft = docLogicalRight - pageLogicalWidth; | 2965 clippedLogicalLeft = docLogicalRight - pageLogicalWidth; |
2966 LayoutRect overflow(clippedLogicalLeft, docLogicalTop, pageLogicalWi
dth, docLogicalHeight); | 2966 LayoutRect overflow(clippedLogicalLeft, docLogicalTop, pageLogicalWi
dth, docLogicalHeight); |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3273 void FrameView::willRemoveScrollbar(Scrollbar* scrollbar, ScrollbarOrientation o
rientation) | 3273 void FrameView::willRemoveScrollbar(Scrollbar* scrollbar, ScrollbarOrientation o
rientation) |
3274 { | 3274 { |
3275 ScrollableArea::willRemoveScrollbar(scrollbar, orientation); | 3275 ScrollableArea::willRemoveScrollbar(scrollbar, orientation); |
3276 if (AXObjectCache* cache = axObjectCache()) { | 3276 if (AXObjectCache* cache = axObjectCache()) { |
3277 cache->remove(scrollbar); | 3277 cache->remove(scrollbar); |
3278 cache->handleScrollbarUpdate(this); | 3278 cache->handleScrollbarUpdate(this); |
3279 } | 3279 } |
3280 } | 3280 } |
3281 | 3281 |
3282 } // namespace WebCore | 3282 } // namespace WebCore |
OLD | NEW |