Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1758)

Unified Diff: Source/core/rendering/FastTextAutosizer.cpp

Issue 212163006: Revert of Preserve autosizing multiplier on style recalc. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Reverting auto-sizing three patches Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/FastTextAutosizer.h ('k') | Source/core/rendering/RenderBlock.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/FastTextAutosizer.cpp
diff --git a/Source/core/rendering/FastTextAutosizer.cpp b/Source/core/rendering/FastTextAutosizer.cpp
index b78ade35f56f76f09015361ce9402db3f1f151a2..3f0f5573fecb952b4728169817acdf3908740cdd 100644
--- a/Source/core/rendering/FastTextAutosizer.cpp
+++ b/Source/core/rendering/FastTextAutosizer.cpp
@@ -234,10 +234,10 @@ FastTextAutosizer::FastTextAutosizer(const Document* document)
, m_frameWidth(0)
, m_layoutWidth(0)
, m_baseMultiplier(0)
- , m_pageNeedsAutosizing(false)
- , m_previouslyAutosized(false)
+ , m_pageAutosizingStatus(PageAutosizingStatusUnknown)
, m_firstBlock(0)
#ifndef NDEBUG
+ , m_renderViewInfoPrepared(false)
, m_blocksThatHaveBegunLayout()
#endif
, m_superclusters()
@@ -290,7 +290,7 @@ void FastTextAutosizer::prepareClusterStack(const RenderObject* renderer)
void FastTextAutosizer::beginLayout(RenderBlock* block)
{
- ASSERT(enabled() && m_pageNeedsAutosizing);
+ ASSERT(enabled() && m_pageAutosizingStatus == PageNeedsAutosizing);
#ifndef NDEBUG
m_blocksThatHaveBegunLayout.add(block);
#endif
@@ -316,7 +316,7 @@ void FastTextAutosizer::beginLayout(RenderBlock* block)
void FastTextAutosizer::inflateListItem(RenderListItem* listItem, RenderListMarker* listItemMarker)
{
- if (!enabled() || !m_pageNeedsAutosizing)
+ if (!enabled() || m_pageAutosizingStatus != PageNeedsAutosizing)
return;
ASSERT(listItem && listItemMarker);
#ifndef NDEBUG
@@ -379,10 +379,11 @@ void FastTextAutosizer::inflateTable(RenderTable* table)
void FastTextAutosizer::endLayout(RenderBlock* block)
{
- ASSERT(enabled() && m_pageNeedsAutosizing);
+ ASSERT(enabled() && m_pageAutosizingStatus == PageNeedsAutosizing);
if (block == m_firstBlock) {
m_firstBlock = 0;
+ m_pageAutosizingStatus = PageAutosizingStatusUnknown;
m_clusterStack.clear();
m_superclusters.clear();
#ifndef NDEBUG
@@ -424,28 +425,8 @@ bool FastTextAutosizer::enabled()
return m_document->settings()->textAutosizingEnabled();
}
-void FastTextAutosizer::updatePageInfoInAllFrames()
+void FastTextAutosizer::updateRenderViewInfo()
{
- if (!enabled())
- return;
-
- ASSERT(m_document->frame()->isMainFrame());
-
- for (LocalFrame* frame = m_document->frame(); frame; frame = frame->tree().traverseNext()) {
- if (FastTextAutosizer* textAutosizer = frame->document()->fastTextAutosizer())
- textAutosizer->updatePageInfo();
- }
-}
-
-void FastTextAutosizer::updatePageInfo()
-{
- if (!enabled())
- return;
-
- int previousFrameWidth = m_frameWidth;
- int previousLayoutWidth = m_layoutWidth;
- float previousBaseMultiplier = m_baseMultiplier;
-
RenderView* renderView = toRenderView(m_document->renderer());
bool horizontalWritingMode = isHorizontalWritingMode(renderView->style()->writingMode());
@@ -467,43 +448,12 @@ void FastTextAutosizer::updatePageInfo()
m_baseMultiplier *= deviceScaleAdjustment;
}
- m_pageNeedsAutosizing = !!m_frameWidth
- && (m_baseMultiplier * (static_cast<float>(m_layoutWidth) / m_frameWidth) > 1.0f);
+ m_pageAutosizingStatus = m_frameWidth && (m_baseMultiplier * (static_cast<float>(m_layoutWidth) / m_frameWidth) > 1.0f)
+ ? PageNeedsAutosizing : PageDoesNotNeedAutosizing;
- // 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_pageNeedsAutosizing && m_previouslyAutosized)
- resetMultipliers();
-
- // If page info has changed, multipliers may have changed. Force a layout to recompute them.
- if (m_pageNeedsAutosizing
- && (m_frameWidth != previousFrameWidth
- || m_layoutWidth != previousLayoutWidth
- || m_baseMultiplier != previousBaseMultiplier))
- setAllTextNeedsLayout();
-}
-
-void FastTextAutosizer::resetMultipliers()
-{
- RenderObject* renderer = m_document->renderer();
- while (renderer) {
- if (RenderStyle* style = renderer->style()) {
- if (style->textAutosizingMultiplier() != 1)
- applyMultiplier(renderer, 1, LayoutNeeded);
- }
- renderer = renderer->nextInPreOrder();
- }
- m_previouslyAutosized = false;
-}
-
-void FastTextAutosizer::setAllTextNeedsLayout()
-{
- RenderObject* renderer = m_document->renderer();
- while (renderer) {
- if (renderer->isText())
- renderer->setNeedsLayout();
- renderer = renderer->nextInPreOrder();
- }
+#ifndef NDEBUG
+ m_renderViewInfoPrepared = true;
+#endif
}
bool FastTextAutosizer::clusterWouldHaveEnoughTextToAutosize(const RenderBlock* root, const RenderBlock* widthProvider)
@@ -671,6 +621,7 @@ const RenderBlock* FastTextAutosizer::deepestCommonAncestor(BlockSet& blocks)
float FastTextAutosizer::clusterMultiplier(Cluster* cluster)
{
+ ASSERT(m_renderViewInfoPrepared);
if (!cluster->m_multiplier) {
if (cluster->m_root->isTable()
|| isIndependentDescendant(cluster->m_root)
@@ -839,7 +790,7 @@ const RenderObject* FastTextAutosizer::findTextLeaf(const RenderObject* parent,
return 0;
}
-void FastTextAutosizer::applyMultiplier(RenderObject* renderer, float multiplier, RelayoutBehavior relayoutBehavior)
+void FastTextAutosizer::applyMultiplier(RenderObject* renderer, float multiplier)
{
ASSERT(renderer);
RenderStyle* currentStyle = renderer->style();
@@ -850,21 +801,7 @@ void FastTextAutosizer::applyMultiplier(RenderObject* renderer, float multiplier
RefPtr<RenderStyle> style = RenderStyle::clone(currentStyle);
style->setTextAutosizingMultiplier(multiplier);
style->setUnique();
-
- switch (relayoutBehavior) {
- case AlreadyInLayout:
- renderer->setStyleInternal(style.release());
- if (renderer->isRenderBlock())
- toRenderBlock(renderer)->invalidateLineHeight();
- break;
-
- case LayoutNeeded:
- renderer->setStyle(style.release());
- break;
- }
-
- if (multiplier != 1)
- m_previouslyAutosized = true;
+ renderer->setStyleInternal(style.release());
}
bool FastTextAutosizer::isWiderOrNarrowerDescendant(Cluster* cluster)
@@ -975,7 +912,15 @@ FastTextAutosizer::LayoutScope::LayoutScope(RenderBlock* block)
if (!m_textAutosizer)
return;
- if (m_textAutosizer->enabled() && m_textAutosizer->m_pageNeedsAutosizing)
+ if (!m_textAutosizer->enabled()) {
+ m_textAutosizer = 0;
+ return;
+ }
+
+ if (m_textAutosizer->m_pageAutosizingStatus == PageAutosizingStatusUnknown)
+ m_textAutosizer->updateRenderViewInfo();
+
+ if (m_textAutosizer->m_pageAutosizingStatus == PageNeedsAutosizing)
m_textAutosizer->beginLayout(m_block);
else
m_textAutosizer = 0;
« no previous file with comments | « Source/core/rendering/FastTextAutosizer.h ('k') | Source/core/rendering/RenderBlock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698