OLD | NEW |
---|---|
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 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
219 } | 219 } |
220 | 220 |
221 static LayoutObject* GetParent(const LayoutObject* object) { | 221 static LayoutObject* GetParent(const LayoutObject* object) { |
222 LayoutObject* parent = nullptr; | 222 LayoutObject* parent = nullptr; |
223 // LayoutObject haven't added to layout tree yet | 223 // LayoutObject haven't added to layout tree yet |
224 if (object->GetNode() && object->GetNode()->parentNode()) | 224 if (object->GetNode() && object->GetNode()->parentNode()) |
225 parent = object->GetNode()->parentNode()->GetLayoutObject(); | 225 parent = object->GetNode()->parentNode()->GetLayoutObject(); |
226 return parent; | 226 return parent; |
227 } | 227 } |
228 | 228 |
229 static bool needMakeSelfAsWidthProvider(const LayoutBlock* block) { | |
230 return block->IsTable() || block->IsTableCell() || block->IsLayoutView(); | |
231 } | |
232 | |
229 TextAutosizer::TextAutosizer(const Document* document) | 233 TextAutosizer::TextAutosizer(const Document* document) |
230 : document_(document), | 234 : document_(document), |
231 first_block_to_begin_layout_(nullptr), | 235 first_block_to_begin_layout_(nullptr), |
232 #if DCHECK_IS_ON() | 236 #if DCHECK_IS_ON() |
233 blocks_that_have_begun_layout_(), | 237 blocks_that_have_begun_layout_(), |
234 #endif | 238 #endif |
235 cluster_stack_(), | 239 cluster_stack_(), |
236 fingerprint_mapper_(), | 240 fingerprint_mapper_(), |
237 page_info_(), | 241 page_info_(), |
238 update_page_info_deferred_(false) { | 242 update_page_info_deferred_(false) { |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
904 SuperclusterHasEnoughTextToAutosize(supercluster, width_provider, false) | 908 SuperclusterHasEnoughTextToAutosize(supercluster, width_provider, false) |
905 ? MultiplierFromBlock(width_provider) | 909 ? MultiplierFromBlock(width_provider) |
906 : 1.0f; | 910 : 1.0f; |
907 } | 911 } |
908 DCHECK(supercluster->multiplier_); | 912 DCHECK(supercluster->multiplier_); |
909 return supercluster->multiplier_; | 913 return supercluster->multiplier_; |
910 } | 914 } |
911 | 915 |
912 const LayoutBlock* TextAutosizer::ClusterWidthProvider( | 916 const LayoutBlock* TextAutosizer::ClusterWidthProvider( |
913 const LayoutBlock* root) const { | 917 const LayoutBlock* root) const { |
914 if (root->IsTable() || root->IsTableCell()) | |
915 return root; | |
916 | |
cathiechentx
2017/04/18 09:26:45
Conside of the inherit issuses. Move this check to
| |
917 return DeepestBlockContainingAllText(root); | 918 return DeepestBlockContainingAllText(root); |
918 } | 919 } |
919 | 920 |
920 const LayoutBlock* TextAutosizer::MaxClusterWidthProvider( | 921 const LayoutBlock* TextAutosizer::MaxClusterWidthProvider( |
921 Supercluster* supercluster, | 922 Supercluster* supercluster, |
922 const LayoutBlock* current_root) const { | 923 const LayoutBlock* current_root) const { |
923 const LayoutBlock* result = nullptr; | 924 const LayoutBlock* result = nullptr; |
924 if (current_root) | 925 if (current_root) |
925 result = ClusterWidthProvider(current_root); | 926 result = ClusterWidthProvider(current_root); |
926 | 927 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1002 if (!cluster->deepest_block_containing_all_text_) | 1003 if (!cluster->deepest_block_containing_all_text_) |
1003 cluster->deepest_block_containing_all_text_ = | 1004 cluster->deepest_block_containing_all_text_ = |
1004 DeepestBlockContainingAllText(cluster->root_); | 1005 DeepestBlockContainingAllText(cluster->root_); |
1005 | 1006 |
1006 return cluster->deepest_block_containing_all_text_; | 1007 return cluster->deepest_block_containing_all_text_; |
1007 } | 1008 } |
1008 | 1009 |
1009 // FIXME: Refactor this to look more like TextAutosizer::deepestCommonAncestor. | 1010 // FIXME: Refactor this to look more like TextAutosizer::deepestCommonAncestor. |
1010 const LayoutBlock* TextAutosizer::DeepestBlockContainingAllText( | 1011 const LayoutBlock* TextAutosizer::DeepestBlockContainingAllText( |
1011 const LayoutBlock* root) const { | 1012 const LayoutBlock* root) const { |
1013 if (needMakeSelfAsWidthProvider(root)) | |
1014 return root; | |
cathiechentx
2017/04/18 09:26:45
The special exceptions(table, td, html) check shou
| |
1015 | |
1012 size_t first_depth = 0; | 1016 size_t first_depth = 0; |
1013 const LayoutObject* first_text_leaf = FindTextLeaf(root, first_depth, kFirst); | 1017 const LayoutObject* first_text_leaf = FindTextLeaf(root, first_depth, kFirst); |
1014 if (!first_text_leaf) | 1018 if (!first_text_leaf) |
1015 return root; | 1019 return root; |
1016 | 1020 |
1017 size_t last_depth = 0; | 1021 size_t last_depth = 0; |
1018 const LayoutObject* last_text_leaf = FindTextLeaf(root, last_depth, kLast); | 1022 const LayoutObject* last_text_leaf = FindTextLeaf(root, last_depth, kLast); |
1019 DCHECK(last_text_leaf); | 1023 DCHECK(last_text_leaf); |
1020 | 1024 |
1021 // Equalize the depths if necessary. Only one of the while loops below will | 1025 // Equalize the depths if necessary. Only one of the while loops below will |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1142 layout_object->ClearBaseComputedStyle(); | 1146 layout_object->ClearBaseComputedStyle(); |
1143 } | 1147 } |
1144 | 1148 |
1145 bool TextAutosizer::IsWiderOrNarrowerDescendant(Cluster* cluster) { | 1149 bool TextAutosizer::IsWiderOrNarrowerDescendant(Cluster* cluster) { |
1146 // FIXME: Why do we return true when hasExplicitWidth returns false?? | 1150 // FIXME: Why do we return true when hasExplicitWidth returns false?? |
1147 if (!cluster->parent_ || !HasExplicitWidth(cluster->root_)) | 1151 if (!cluster->parent_ || !HasExplicitWidth(cluster->root_)) |
1148 return true; | 1152 return true; |
1149 | 1153 |
1150 const LayoutBlock* parent_deepest_block_containing_all_text = | 1154 const LayoutBlock* parent_deepest_block_containing_all_text = |
1151 DeepestBlockContainingAllText(cluster->parent_); | 1155 DeepestBlockContainingAllText(cluster->parent_); |
1156 // Block that needMakeSelfAsWidthProvider shouldn't be inherited. | |
1157 if (needMakeSelfAsWidthProvider(parent_deepest_block_containing_all_text)) | |
1158 return true; | |
cathiechentx
2017/04/18 09:26:45
These special exceptions(table, td, html) couldn't
| |
1159 | |
1152 #if DCHECK_IS_ON() | 1160 #if DCHECK_IS_ON() |
1153 DCHECK(blocks_that_have_begun_layout_.Contains(cluster->root_)); | 1161 DCHECK(blocks_that_have_begun_layout_.Contains(cluster->root_)); |
1154 DCHECK(blocks_that_have_begun_layout_.Contains( | 1162 DCHECK(blocks_that_have_begun_layout_.Contains( |
1155 parent_deepest_block_containing_all_text)); | 1163 parent_deepest_block_containing_all_text)); |
1156 #endif | 1164 #endif |
1157 | 1165 |
1158 float content_width = cluster->root_->ContentLogicalWidth().ToFloat(); | 1166 float content_width = cluster->root_->ContentLogicalWidth().ToFloat(); |
1159 float cluster_text_width = | 1167 float cluster_text_width = |
1160 parent_deepest_block_containing_all_text->ContentLogicalWidth().ToFloat(); | 1168 parent_deepest_block_containing_all_text->ContentLogicalWidth().ToFloat(); |
1161 | 1169 |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1387 } | 1395 } |
1388 } | 1396 } |
1389 potentially_inconsistent_superclusters.Clear(); | 1397 potentially_inconsistent_superclusters.Clear(); |
1390 } | 1398 } |
1391 | 1399 |
1392 DEFINE_TRACE(TextAutosizer) { | 1400 DEFINE_TRACE(TextAutosizer) { |
1393 visitor->Trace(document_); | 1401 visitor->Trace(document_); |
1394 } | 1402 } |
1395 | 1403 |
1396 } // namespace blink | 1404 } // namespace blink |
OLD | NEW |