Index: Source/core/rendering/FastTextAutosizer.cpp |
diff --git a/Source/core/rendering/FastTextAutosizer.cpp b/Source/core/rendering/FastTextAutosizer.cpp |
index 75760b10983e62cb3e4dc56cf4b9b5e71f3cbf50..8101a264ad221cd373de61e4084e0ab267578ee8 100644 |
--- a/Source/core/rendering/FastTextAutosizer.cpp |
+++ b/Source/core/rendering/FastTextAutosizer.cpp |
@@ -320,7 +320,7 @@ void FastTextAutosizer::prepareClusterStack(const RenderObject* renderer) |
void FastTextAutosizer::beginLayout(RenderBlock* block) |
{ |
- ASSERT(enabled() && shouldHandleLayout()); |
+ ASSERT(shouldHandleLayout()); |
if (prepareForLayout(block) == StopLayout) |
return; |
@@ -337,7 +337,7 @@ void FastTextAutosizer::beginLayout(RenderBlock* block) |
void FastTextAutosizer::inflateListItem(RenderListItem* listItem, RenderListMarker* listItemMarker) |
{ |
- if (!enabled() || !shouldHandleLayout()) |
+ if (!shouldHandleLayout()) |
return; |
ASSERT(listItem && listItemMarker); |
@@ -419,7 +419,7 @@ void FastTextAutosizer::inflateTable(RenderTable* table) |
void FastTextAutosizer::endLayout(RenderBlock* block) |
{ |
- ASSERT(enabled() && shouldHandleLayout()); |
+ ASSERT(shouldHandleLayout()); |
if (block == m_firstBlockToBeginLayout) { |
m_firstBlockToBeginLayout = 0; |
@@ -463,15 +463,12 @@ void FastTextAutosizer::inflate(RenderBlock* block) |
// FIXME(crbug.com/367864): Unify this with m_pageInfo.m_settingEnabled. |
bool FastTextAutosizer::enabled() const |
{ |
- if (!m_document->settings() || !m_document->page() || m_document->printing()) |
- return false; |
- |
- return m_document->settings()->textAutosizingEnabled(); |
+ return m_document->settings() && m_document->settings()->textAutosizingEnabled(); |
} |
bool FastTextAutosizer::shouldHandleLayout() const |
{ |
- return m_pageInfo.m_pageNeedsAutosizing && !m_updatePageInfoDeferred; |
+ return enabled() && m_pageInfo.m_pageNeedsAutosizing && !m_updatePageInfoDeferred; |
} |
void FastTextAutosizer::updatePageInfoInAllFrames() |
@@ -486,54 +483,53 @@ void FastTextAutosizer::updatePageInfoInAllFrames() |
void FastTextAutosizer::updatePageInfo() |
{ |
- PageInfo previousPageInfo(m_pageInfo); |
- |
- m_pageInfo.m_settingEnabled = m_document->settings() && m_document->settings()->textAutosizingEnabled(); |
- if (!enabled()) { |
- if (previousPageInfo.m_hasAutosized) |
- resetMultipliers(); |
- return; |
- } |
- |
- if (m_updatePageInfoDeferred) |
+ if (m_updatePageInfoDeferred || !m_document->page()) |
return; |
- RenderView* renderView = toRenderView(m_document->renderer()); |
- bool horizontalWritingMode = isHorizontalWritingMode(renderView->style()->writingMode()); |
- |
- LocalFrame* mainFrame = m_document->page()->mainFrame(); |
- IntSize frameSize = m_document->settings()->textAutosizingWindowSizeOverride(); |
- if (frameSize.isEmpty()) |
- frameSize = mainFrame->view()->unscaledVisibleContentSize(IncludeScrollbars); |
- m_pageInfo.m_frameWidth = horizontalWritingMode ? frameSize.width() : frameSize.height(); |
- |
- IntSize layoutSize = m_document->page()->mainFrame()->view()->layoutSize(); |
- m_pageInfo.m_layoutWidth = horizontalWritingMode ? layoutSize.width() : layoutSize.height(); |
- |
- // Compute the base font scale multiplier based on device and accessibility settings. |
- m_pageInfo.m_baseMultiplier = m_document->settings()->accessibilityFontScaleFactor(); |
- // If the page has a meta viewport or @viewport, don't apply the device scale adjustment. |
- const ViewportDescription& viewportDescription = m_document->page()->mainFrame()->document()->viewportDescription(); |
- if (!viewportDescription.isSpecifiedByAuthor()) { |
- float deviceScaleAdjustment = m_document->settings()->deviceScaleAdjustment(); |
- m_pageInfo.m_baseMultiplier *= deviceScaleAdjustment; |
- } |
+ PageInfo previousPageInfo(m_pageInfo); |
+ m_pageInfo.m_settingEnabled = enabled(); |
- m_pageInfo.m_pageNeedsAutosizing = !!m_pageInfo.m_frameWidth |
- && (m_pageInfo.m_baseMultiplier * (static_cast<float>(m_pageInfo.m_layoutWidth) / m_pageInfo.m_frameWidth) > 1.0f); |
+ if (!enabled() || m_document->printing()) { |
+ m_pageInfo.m_pageNeedsAutosizing = false; |
+ } else { |
+ RenderView* renderView = toRenderView(m_document->renderer()); |
+ bool horizontalWritingMode = isHorizontalWritingMode(renderView->style()->writingMode()); |
+ |
+ LocalFrame* mainFrame = m_document->page()->mainFrame(); |
+ IntSize frameSize = m_document->settings()->textAutosizingWindowSizeOverride(); |
+ if (frameSize.isEmpty()) |
+ frameSize = mainFrame->view()->unscaledVisibleContentSize(IncludeScrollbars); |
+ m_pageInfo.m_frameWidth = horizontalWritingMode ? frameSize.width() : frameSize.height(); |
+ |
+ IntSize layoutSize = mainFrame->view()->layoutSize(); |
+ m_pageInfo.m_layoutWidth = horizontalWritingMode ? layoutSize.width() : layoutSize.height(); |
+ |
+ // Compute the base font scale multiplier based on device and accessibility settings. |
+ m_pageInfo.m_baseMultiplier = m_document->settings()->accessibilityFontScaleFactor(); |
+ // If the page has a meta viewport or @viewport, don't apply the device scale adjustment. |
+ const ViewportDescription& viewportDescription = mainFrame->document()->viewportDescription(); |
+ if (!viewportDescription.isSpecifiedByAuthor()) { |
+ float deviceScaleAdjustment = m_document->settings()->deviceScaleAdjustment(); |
+ m_pageInfo.m_baseMultiplier *= deviceScaleAdjustment; |
+ } |
- // If we are no longer autosizing the page, we won't do anything during the next layout. |
- // Set all the multipliers back to 1 now. |
- if (!m_pageInfo.m_pageNeedsAutosizing && previousPageInfo.m_hasAutosized) |
- resetMultipliers(); |
+ m_pageInfo.m_pageNeedsAutosizing = !!m_pageInfo.m_frameWidth |
+ && (m_pageInfo.m_baseMultiplier * (static_cast<float>(m_pageInfo.m_layoutWidth) / m_pageInfo.m_frameWidth) > 1.0f); |
+ } |
- // If page info has changed, multipliers may have changed. Force a layout to recompute them. |
- if (m_pageInfo.m_pageNeedsAutosizing |
- && (m_pageInfo.m_frameWidth != previousPageInfo.m_frameWidth |
+ if (m_pageInfo.m_pageNeedsAutosizing) { |
+ // If page info has changed, multipliers may have changed. Force a layout to recompute them. |
+ if (m_pageInfo.m_frameWidth != previousPageInfo.m_frameWidth |
|| m_pageInfo.m_layoutWidth != previousPageInfo.m_layoutWidth |
|| m_pageInfo.m_baseMultiplier != previousPageInfo.m_baseMultiplier |
- || m_pageInfo.m_settingEnabled != previousPageInfo.m_settingEnabled)) |
- setAllTextNeedsLayout(); |
+ || m_pageInfo.m_settingEnabled != previousPageInfo.m_settingEnabled) |
+ setAllTextNeedsLayout(); |
+ } else if (previousPageInfo.m_hasAutosized) { |
+ // If we are no longer autosizing the page, we won't do anything during the next layout. |
+ // Set all the multipliers back to 1 now. |
+ resetMultipliers(); |
+ m_pageInfo.m_hasAutosized = false; |
+ } |
} |
void FastTextAutosizer::resetMultipliers() |
@@ -546,7 +542,6 @@ void FastTextAutosizer::resetMultipliers() |
} |
renderer = renderer->nextInPreOrder(); |
} |
- m_pageInfo.m_hasAutosized = false; |
} |
void FastTextAutosizer::setAllTextNeedsLayout() |
@@ -1071,7 +1066,7 @@ FastTextAutosizer::LayoutScope::LayoutScope(RenderBlock* block) |
if (!m_textAutosizer) |
return; |
- if (m_textAutosizer->enabled() && m_textAutosizer->shouldHandleLayout()) |
+ if (m_textAutosizer->shouldHandleLayout()) |
m_textAutosizer->beginLayout(m_block); |
else |
m_textAutosizer = 0; |