Chromium Code Reviews| Index: Source/core/page/Page.cpp |
| diff --git a/Source/core/page/Page.cpp b/Source/core/page/Page.cpp |
| index a82d7dd4ac3300ebce6ca41c20751af11b552277..e8539a302af18b652c9c1b88c7f133d09a63eb05 100644 |
| --- a/Source/core/page/Page.cpp |
| +++ b/Source/core/page/Page.cpp |
| @@ -262,6 +262,16 @@ void Page::setNeedsRecalcStyleInAllFrames() |
| frame->document()->styleResolverChanged(RecalcStyleDeferred); |
| } |
| +void Page::setNeedsLayoutInAllFrames() |
| +{ |
| + for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { |
| + if (FrameView* view = frame->view()) { |
| + view->setNeedsLayout(); |
| + view->scheduleRelayout(); |
| + } |
| + } |
| +} |
| + |
| void Page::refreshPlugins(bool reload) |
| { |
| if (allPages().isEmpty()) |
| @@ -491,17 +501,32 @@ void Page::settingsChanged(SettingsDelegate::ChangeType changeType) |
| } |
| break; |
| case SettingsDelegate::TextAutosizingChange: |
| + // FastTextAutosizer works with RenderBlock::styleWillChange. |
|
skobes
2014/02/14 18:11:04
This comment is misleading. FTA gathers some info
tasak
2014/02/17 02:39:25
I modified to use setNeedsRecalc and setNeedsLayou
|
| + // TextAutosizer depends on FrameView::layout. |
| + // If fastTextAutosizing is enabled, we should use setNeedsRecalcStyleInAllFrames. |
| + if (RuntimeEnabledFeatures::fastTextAutosizingEnabled()) { |
| + setNeedsRecalcStyleInAllFrames(); |
| + break; |
| + } |
| + |
| // FIXME: I wonder if this needs to traverse frames like in WebViewImpl::resize, or whether there is only one document per Settings instance? |
| for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { |
| TextAutosizer* textAutosizer = frame->document()->textAutosizer(); |
| if (textAutosizer) |
| textAutosizer->recalculateMultipliers(); |
| } |
| - setNeedsRecalcStyleInAllFrames(); |
| + // TextAutosizing updates RenderStyle during layout phase (via TextAutosizer::processSubtree). |
| + // We should invoke setNeedsLayout here. |
| + setNeedsLayoutInAllFrames(); |
| break; |
| case SettingsDelegate::ScriptEnableChange: |
| m_inspectorController->scriptsEnabled(settings().scriptEnabled()); |
| break; |
| + case SettingsDelegate::FontFamilyChange: |
| + for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) |
| + frame->document()->styleEngine()->updateGenericFontFamilySettings(); |
| + setNeedsRecalcStyleInAllFrames(); |
| + break; |
| } |
| } |