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

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

Issue 235993003: Revert "Modify supercluster multiplier logic" (http://crrev.com/231663006). (Closed) Base URL: svn://svn.chromium.org/blink/trunk
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 | Annotate | Revision Log
« 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 683 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 694
695 SuperclusterMap::AddResult addResult = m_superclusters.add(fingerprint, Pass OwnPtr<Supercluster>()); 695 SuperclusterMap::AddResult addResult = m_superclusters.add(fingerprint, Pass OwnPtr<Supercluster>());
696 if (!addResult.isNewEntry) 696 if (!addResult.isNewEntry)
697 return addResult.storedValue->value.get(); 697 return addResult.storedValue->value.get();
698 698
699 Supercluster* supercluster = new Supercluster(roots); 699 Supercluster* supercluster = new Supercluster(roots);
700 addResult.storedValue->value = adoptPtr(supercluster); 700 addResult.storedValue->value = adoptPtr(supercluster);
701 return supercluster; 701 return supercluster;
702 } 702 }
703 703
704 const RenderBlock* FastTextAutosizer::deepestCommonAncestor(BlockSet& blocks)
705 {
706 // Find the lowest common ancestor of blocks.
707 // Note: this could be improved to not be O(b*h) for b blocks and tree heigh t h.
708 HashCountedSet<const RenderBlock*> ancestors;
709 for (BlockSet::iterator it = blocks.begin(); it != blocks.end(); ++it) {
710 for (const RenderBlock* block = (*it); block; block = block->containingB lock()) {
711 ancestors.add(block);
712 // The first ancestor that has all of the blocks as children wins.
713 if (ancestors.count(block) == blocks.size())
714 return block;
715 }
716 }
717 ASSERT_NOT_REACHED();
718 return 0;
719 }
720
704 float FastTextAutosizer::clusterMultiplier(Cluster* cluster) 721 float FastTextAutosizer::clusterMultiplier(Cluster* cluster)
705 { 722 {
706 if (cluster->m_multiplier) 723 if (cluster->m_multiplier)
707 return cluster->m_multiplier; 724 return cluster->m_multiplier;
708 725
709 if (cluster->m_root->isTable() 726 if (cluster->m_root->isTable()
710 || isIndependentDescendant(cluster->m_root) 727 || isIndependentDescendant(cluster->m_root)
711 || isWiderOrNarrowerDescendant(cluster)) { 728 || isWiderOrNarrowerDescendant(cluster)) {
712 729
713 if (cluster->m_supercluster) { 730 if (cluster->m_supercluster) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 return false; 778 return false;
762 } 779 }
763 780
764 float FastTextAutosizer::superclusterMultiplier(Cluster* cluster) 781 float FastTextAutosizer::superclusterMultiplier(Cluster* cluster)
765 { 782 {
766 Supercluster* supercluster = cluster->m_supercluster; 783 Supercluster* supercluster = cluster->m_supercluster;
767 if (!supercluster->m_multiplier) { 784 if (!supercluster->m_multiplier) {
768 const BlockSet* roots = supercluster->m_roots; 785 const BlockSet* roots = supercluster->m_roots;
769 const RenderBlock* widthProvider; 786 const RenderBlock* widthProvider;
770 787
771 widthProvider = maxClusterWidthProvider(cluster->m_supercluster, cluster ->m_root); 788 if (cluster->m_root->isTableCell()) {
789 widthProvider = clusterWidthProvider(cluster->m_root);
790 } else {
791 BlockSet widthProviders;
792 for (BlockSet::iterator it = roots->begin(); it != roots->end(); ++i t)
793 widthProviders.add(clusterWidthProvider(*it));
794 widthProvider = deepestCommonAncestor(widthProviders);
795 }
772 796
773 supercluster->m_multiplier = anyClusterHasEnoughTextToAutosize(roots, wi dthProvider) 797 supercluster->m_multiplier = anyClusterHasEnoughTextToAutosize(roots, wi dthProvider)
774 ? multiplierFromBlock(widthProvider) : 1.0f; 798 ? multiplierFromBlock(widthProvider) : 1.0f;
775 } 799 }
776 ASSERT(supercluster->m_multiplier); 800 ASSERT(supercluster->m_multiplier);
777 return supercluster->m_multiplier; 801 return supercluster->m_multiplier;
778 } 802 }
779 803
780 const RenderBlock* FastTextAutosizer::clusterWidthProvider(const RenderBlock* ro ot) 804 const RenderBlock* FastTextAutosizer::clusterWidthProvider(const RenderBlock* ro ot)
781 { 805 {
782 if (root->isTable() || root->isTableCell()) 806 if (root->isTable() || root->isTableCell())
783 return root; 807 return root;
784 808
785 return deepestBlockContainingAllText(root); 809 return deepestBlockContainingAllText(root);
786 } 810 }
787 811
788
789 const RenderBlock* FastTextAutosizer::maxClusterWidthProvider(const Supercluster * supercluster, const RenderBlock* currentRoot)
790 {
791 float maxWidth = 0;
792 const RenderBlock* result = 0;
793 const BlockSet* roots = supercluster->m_roots;
794 for (BlockSet::iterator it = roots->begin(); it != roots->end(); ++it) {
795 const RenderBlock* widthProvider = clusterWidthProvider(*it);
796 if (widthProvider != currentRoot && widthProvider->needsLayout())
797 continue;
798 float width = widthFromBlock(widthProvider);
799 if (width > maxWidth) {
800 maxWidth = width;
801 result = widthProvider;
802 }
803 }
804 return result;
805 }
806
807 float FastTextAutosizer::widthFromBlock(const RenderBlock* block) 812 float FastTextAutosizer::widthFromBlock(const RenderBlock* block)
808 { 813 {
809 if (block->isTable()) { 814 if (block->isTable()) {
810 RenderBlock* containingBlock = block->containingBlock(); 815 RenderBlock* containingBlock = block->containingBlock();
811 ASSERT(block->containingBlock()); 816 ASSERT(block->containingBlock());
812 if (block->style()->logicalWidth().isSpecified()) 817 if (block->style()->logicalWidth().isSpecified())
813 return floatValueForLength(block->style()->logicalWidth(), containin gBlock->contentLogicalWidth().toFloat()); 818 return floatValueForLength(block->style()->logicalWidth(), containin gBlock->contentLogicalWidth().toFloat());
814 return containingBlock->contentLogicalWidth().toFloat(); 819 return containingBlock->contentLogicalWidth().toFloat();
815 } 820 }
816 return block->contentLogicalWidth().toFloat(); 821 return block->contentLogicalWidth().toFloat();
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1073 FastTextAutosizer::DeferUpdatePageInfo::~DeferUpdatePageInfo() 1078 FastTextAutosizer::DeferUpdatePageInfo::~DeferUpdatePageInfo()
1074 { 1079 {
1075 if (FastTextAutosizer* textAutosizer = m_mainFrame->document()->fastTextAuto sizer()) { 1080 if (FastTextAutosizer* textAutosizer = m_mainFrame->document()->fastTextAuto sizer()) {
1076 ASSERT(textAutosizer->m_updatePageInfoDeferred); 1081 ASSERT(textAutosizer->m_updatePageInfoDeferred);
1077 textAutosizer->m_updatePageInfoDeferred = false; 1082 textAutosizer->m_updatePageInfoDeferred = false;
1078 textAutosizer->updatePageInfoInAllFrames(); 1083 textAutosizer->updatePageInfoInAllFrames();
1079 } 1084 }
1080 } 1085 }
1081 1086
1082 } // namespace WebCore 1087 } // 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