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

Side by Side Diff: Source/core/rendering/FastTextAutosizer.cpp

Issue 221193004: Reset multipliers when FTA is disabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@tot
Patch Set: Created 6 years, 8 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 unified diff | Download patch
« no previous file with comments | « Source/core/rendering/FastTextAutosizer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 #ifndef NDEBUG 284 #ifndef NDEBUG
285 m_blocksThatHaveBegunLayout.add(block); 285 m_blocksThatHaveBegunLayout.add(block);
286 #endif 286 #endif
287 if (Cluster* cluster = maybeCreateCluster(block)) 287 if (Cluster* cluster = maybeCreateCluster(block))
288 m_clusterStack.append(adoptPtr(cluster)); 288 m_clusterStack.append(adoptPtr(cluster));
289 } 289 }
290 } 290 }
291 291
292 void FastTextAutosizer::beginLayout(RenderBlock* block) 292 void FastTextAutosizer::beginLayout(RenderBlock* block)
293 { 293 {
294 ASSERT(enabled() && m_pageNeedsAutosizing && !m_updatePageInfoDeferred); 294 ASSERT(enabled() && shouldHandleLayout());
295 #ifndef NDEBUG 295 #ifndef NDEBUG
296 m_blocksThatHaveBegunLayout.add(block); 296 m_blocksThatHaveBegunLayout.add(block);
297 #endif 297 #endif
298 298
299 if (!m_firstBlock) { 299 if (!m_firstBlock) {
300 m_firstBlock = block; 300 m_firstBlock = block;
301 prepareClusterStack(block->parent()); 301 prepareClusterStack(block->parent());
302 } else if (block == currentCluster()->m_root) { 302 } else if (block == currentCluster()->m_root) {
303 // Ignore beginLayout on the same block twice. 303 // Ignore beginLayout on the same block twice.
304 // This can happen with paginated overflow. 304 // This can happen with paginated overflow.
305 return; 305 return;
306 } 306 }
307 307
308 if (Cluster* cluster = maybeCreateCluster(block)) { 308 if (Cluster* cluster = maybeCreateCluster(block)) {
309 m_clusterStack.append(adoptPtr(cluster)); 309 m_clusterStack.append(adoptPtr(cluster));
310 if (block->isTable()) 310 if (block->isTable())
311 inflateTable(toRenderTable(block)); 311 inflateTable(toRenderTable(block));
312 } 312 }
313 313
314 if (block->childrenInline() && block->firstChild()) 314 if (block->childrenInline() && block->firstChild())
315 inflate(block); 315 inflate(block);
316 } 316 }
317 317
318 void FastTextAutosizer::inflateListItem(RenderListItem* listItem, RenderListMark er* listItemMarker) 318 void FastTextAutosizer::inflateListItem(RenderListItem* listItem, RenderListMark er* listItemMarker)
319 { 319 {
320 if (!enabled() || !m_pageNeedsAutosizing) 320 if (!enabled() || !shouldHandleLayout())
321 return; 321 return;
322 ASSERT(listItem && listItemMarker); 322 ASSERT(listItem && listItemMarker);
323 #ifndef NDEBUG 323 #ifndef NDEBUG
324 m_blocksThatHaveBegunLayout.add(listItem); 324 m_blocksThatHaveBegunLayout.add(listItem);
325 #endif 325 #endif
326 // Force the LI to be inside the DBCAT when computing the multiplier. 326 // Force the LI to be inside the DBCAT when computing the multiplier.
327 // This guarantees that the DBCAT has entered layout, so we can ask for its width. 327 // This guarantees that the DBCAT has entered layout, so we can ask for its width.
328 // It also makes sense because the list marker is autosized like a text node . 328 // It also makes sense because the list marker is autosized like a text node .
329 float multiplier = clusterMultiplier(currentCluster()); 329 float multiplier = clusterMultiplier(currentCluster());
330 330
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 } 373 }
374 } 374 }
375 } 375 }
376 } 376 }
377 } 377 }
378 } 378 }
379 } 379 }
380 380
381 void FastTextAutosizer::endLayout(RenderBlock* block) 381 void FastTextAutosizer::endLayout(RenderBlock* block)
382 { 382 {
383 ASSERT(enabled() && m_pageNeedsAutosizing); 383 ASSERT(enabled() && shouldHandleLayout());
384 384
385 if (block == m_firstBlock) { 385 if (block == m_firstBlock) {
386 m_firstBlock = 0; 386 m_firstBlock = 0;
387 m_clusterStack.clear(); 387 m_clusterStack.clear();
388 m_superclusters.clear(); 388 m_superclusters.clear();
389 #ifndef NDEBUG 389 #ifndef NDEBUG
390 m_blocksThatHaveBegunLayout.clear(); 390 m_blocksThatHaveBegunLayout.clear();
391 #endif 391 #endif
392 } else if (currentCluster()->m_root == block) { 392 } else if (currentCluster()->m_root == block) {
393 m_clusterStack.removeLast(); 393 m_clusterStack.removeLast();
(...skipping 16 matching lines...) Expand all
410 // has entered layout. 410 // has entered layout.
411 if (!multiplier) 411 if (!multiplier)
412 multiplier = cluster->m_autosize ? clusterMultiplier(cluster) : 1.0f; 412 multiplier = cluster->m_autosize ? clusterMultiplier(cluster) : 1.0f;
413 applyMultiplier(descendant, multiplier); 413 applyMultiplier(descendant, multiplier);
414 applyMultiplier(descendant->parent(), multiplier); // Parent handles line spacing. 414 applyMultiplier(descendant->parent(), multiplier); // Parent handles line spacing.
415 } 415 }
416 descendant = descendant->nextInPreOrder(block); 416 descendant = descendant->nextInPreOrder(block);
417 } 417 }
418 } 418 }
419 419
420 bool FastTextAutosizer::enabled() 420 bool FastTextAutosizer::enabled() const
421 { 421 {
422 if (!m_document->settings() || !m_document->page() || m_document->printing() ) 422 if (!m_document->settings() || !m_document->page() || m_document->printing() )
423 return false; 423 return false;
424 424
425 return m_document->settings()->textAutosizingEnabled(); 425 return m_document->settings()->textAutosizingEnabled();
426 } 426 }
427 427
428 bool FastTextAutosizer::shouldHandleLayout() const
429 {
430 return m_pageNeedsAutosizing && !m_updatePageInfoDeferred;
431 }
432
428 void FastTextAutosizer::updatePageInfoInAllFrames() 433 void FastTextAutosizer::updatePageInfoInAllFrames()
429 { 434 {
430 if (!enabled()) 435 ASSERT(!enabled() || m_document->frame()->isMainFrame());
431 return;
432
433 ASSERT(m_document->frame()->isMainFrame());
434 436
435 for (LocalFrame* frame = m_document->frame(); frame; frame = frame->tree().t raverseNext()) { 437 for (LocalFrame* frame = m_document->frame(); frame; frame = frame->tree().t raverseNext()) {
436 if (FastTextAutosizer* textAutosizer = frame->document()->fastTextAutosi zer()) 438 if (FastTextAutosizer* textAutosizer = frame->document()->fastTextAutosi zer())
437 textAutosizer->updatePageInfo(); 439 textAutosizer->updatePageInfo();
438 } 440 }
439 } 441 }
440 442
441 void FastTextAutosizer::updatePageInfo() 443 void FastTextAutosizer::updatePageInfo()
442 { 444 {
443 if (!enabled() || m_updatePageInfoDeferred) 445 if (!enabled()) {
446 if (m_previouslyAutosized)
447 resetMultipliers();
448 return;
449 }
450
451 if (m_updatePageInfoDeferred)
444 return; 452 return;
445 453
446 int previousFrameWidth = m_frameWidth; 454 int previousFrameWidth = m_frameWidth;
447 int previousLayoutWidth = m_layoutWidth; 455 int previousLayoutWidth = m_layoutWidth;
448 float previousBaseMultiplier = m_baseMultiplier; 456 float previousBaseMultiplier = m_baseMultiplier;
449 457
450 RenderView* renderView = toRenderView(m_document->renderer()); 458 RenderView* renderView = toRenderView(m_document->renderer());
451 bool horizontalWritingMode = isHorizontalWritingMode(renderView->style()->wr itingMode()); 459 bool horizontalWritingMode = isHorizontalWritingMode(renderView->style()->wr itingMode());
452 460
453 LocalFrame* mainFrame = m_document->page()->mainFrame(); 461 LocalFrame* mainFrame = m_document->page()->mainFrame();
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 return *m_blocksForFingerprint.get(fingerprint); 977 return *m_blocksForFingerprint.get(fingerprint);
970 } 978 }
971 979
972 FastTextAutosizer::LayoutScope::LayoutScope(RenderBlock* block) 980 FastTextAutosizer::LayoutScope::LayoutScope(RenderBlock* block)
973 : m_textAutosizer(block->document().fastTextAutosizer()) 981 : m_textAutosizer(block->document().fastTextAutosizer())
974 , m_block(block) 982 , m_block(block)
975 { 983 {
976 if (!m_textAutosizer) 984 if (!m_textAutosizer)
977 return; 985 return;
978 986
979 if (m_textAutosizer->enabled() && m_textAutosizer->m_pageNeedsAutosizing) 987 if (m_textAutosizer->enabled() && m_textAutosizer->shouldHandleLayout())
980 m_textAutosizer->beginLayout(m_block); 988 m_textAutosizer->beginLayout(m_block);
981 else 989 else
982 m_textAutosizer = 0; 990 m_textAutosizer = 0;
983 } 991 }
984 992
985 FastTextAutosizer::LayoutScope::~LayoutScope() 993 FastTextAutosizer::LayoutScope::~LayoutScope()
986 { 994 {
987 if (m_textAutosizer) 995 if (m_textAutosizer)
988 m_textAutosizer->endLayout(m_block); 996 m_textAutosizer->endLayout(m_block);
989 } 997 }
(...skipping 10 matching lines...) Expand all
1000 FastTextAutosizer::DeferUpdatePageInfo::~DeferUpdatePageInfo() 1008 FastTextAutosizer::DeferUpdatePageInfo::~DeferUpdatePageInfo()
1001 { 1009 {
1002 if (FastTextAutosizer* textAutosizer = m_mainFrame->document()->fastTextAuto sizer()) { 1010 if (FastTextAutosizer* textAutosizer = m_mainFrame->document()->fastTextAuto sizer()) {
1003 ASSERT(textAutosizer->m_updatePageInfoDeferred); 1011 ASSERT(textAutosizer->m_updatePageInfoDeferred);
1004 textAutosizer->m_updatePageInfoDeferred = false; 1012 textAutosizer->m_updatePageInfoDeferred = false;
1005 textAutosizer->updatePageInfoInAllFrames(); 1013 textAutosizer->updatePageInfoInAllFrames();
1006 } 1014 }
1007 } 1015 }
1008 1016
1009 } // namespace WebCore 1017 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/FastTextAutosizer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698