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

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

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 unified diff | Download patch
« no previous file with comments | « Source/core/page/Page.cpp ('k') | Source/core/rendering/FastTextAutosizer.cpp » ('j') | 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 53
54 class FastTextAutosizer FINAL { 54 class FastTextAutosizer FINAL {
55 WTF_MAKE_NONCOPYABLE(FastTextAutosizer); 55 WTF_MAKE_NONCOPYABLE(FastTextAutosizer);
56 56
57 public: 57 public:
58 static PassOwnPtr<FastTextAutosizer> create(const Document* document) 58 static PassOwnPtr<FastTextAutosizer> create(const Document* document)
59 { 59 {
60 return adoptPtr(new FastTextAutosizer(document)); 60 return adoptPtr(new FastTextAutosizer(document));
61 } 61 }
62 62
63 void updatePageInfoInAllFrames();
64 void updatePageInfo();
65 void record(const RenderBlock*); 63 void record(const RenderBlock*);
66 void destroy(const RenderBlock*); 64 void destroy(const RenderBlock*);
67 void inflateListItem(RenderListItem*, RenderListMarker*); 65 void inflateListItem(RenderListItem*, RenderListMarker*);
68 66
69 class LayoutScope { 67 class LayoutScope {
70 public: 68 public:
71 explicit LayoutScope(RenderBlock*); 69 explicit LayoutScope(RenderBlock*);
72 ~LayoutScope(); 70 ~LayoutScope();
73 private: 71 private:
74 FastTextAutosizer* m_textAutosizer; 72 FastTextAutosizer* m_textAutosizer;
75 RenderBlock* m_block; 73 RenderBlock* m_block;
76 }; 74 };
77 75
78 private: 76 private:
79 typedef HashSet<const RenderBlock*> BlockSet; 77 typedef HashSet<const RenderBlock*> BlockSet;
80 78
81 enum HasEnoughTextToAutosize { 79 enum HasEnoughTextToAutosize {
82 UnknownAmountOfText, 80 UnknownAmountOfText,
83 HasEnoughText, 81 HasEnoughText,
84 NotEnoughText 82 NotEnoughText
85 }; 83 };
86 84
87 enum RelayoutBehavior { 85 enum PageAutosizingStatus {
88 AlreadyInLayout, // The default; appropriate if we are already in layout . 86 PageAutosizingStatusUnknown,
89 LayoutNeeded // Use this if changing a multiplier outside of layout. 87 PageNeedsAutosizing,
88 PageDoesNotNeedAutosizing
90 }; 89 };
91 90
92 // A supercluster represents autosizing information about a set of two or 91 // A supercluster represents autosizing information about a set of two or
93 // more blocks that all have the same fingerprint. Clusters whose roots 92 // more blocks that all have the same fingerprint. Clusters whose roots
94 // belong to a supercluster will share a common multiplier and 93 // belong to a supercluster will share a common multiplier and
95 // text-length-based autosizing status. 94 // text-length-based autosizing status.
96 struct Supercluster { 95 struct Supercluster {
97 explicit Supercluster(const BlockSet* roots) 96 explicit Supercluster(const BlockSet* roots)
98 : m_roots(roots) 97 : m_roots(roots)
99 , m_multiplier(0) 98 , m_multiplier(0)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 #endif 183 #endif
185 }; 184 };
186 185
187 explicit FastTextAutosizer(const Document*); 186 explicit FastTextAutosizer(const Document*);
188 187
189 void beginLayout(RenderBlock*); 188 void beginLayout(RenderBlock*);
190 void endLayout(RenderBlock*); 189 void endLayout(RenderBlock*);
191 void inflateTable(RenderTable*); 190 void inflateTable(RenderTable*);
192 void inflate(RenderBlock*); 191 void inflate(RenderBlock*);
193 bool enabled(); 192 bool enabled();
194 void setAllTextNeedsLayout(); 193 void updateRenderViewInfo();
195 void resetMultipliers();
196 void prepareClusterStack(const RenderObject*); 194 void prepareClusterStack(const RenderObject*);
197 bool isFingerprintingCandidate(const RenderBlock*); 195 bool isFingerprintingCandidate(const RenderBlock*);
198 bool clusterHasEnoughTextToAutosize(Cluster*, const RenderBlock* widthProvid er = 0); 196 bool clusterHasEnoughTextToAutosize(Cluster*, const RenderBlock* widthProvid er = 0);
199 bool anyClusterHasEnoughTextToAutosize(const BlockSet* roots, const RenderBl ock* widthProvider = 0); 197 bool anyClusterHasEnoughTextToAutosize(const BlockSet* roots, const RenderBl ock* widthProvider = 0);
200 bool clusterWouldHaveEnoughTextToAutosize(const RenderBlock* root, const Ren derBlock* widthProvider = 0); 198 bool clusterWouldHaveEnoughTextToAutosize(const RenderBlock* root, const Ren derBlock* widthProvider = 0);
201 Fingerprint getFingerprint(const RenderObject*); 199 Fingerprint getFingerprint(const RenderObject*);
202 Fingerprint computeFingerprint(const RenderObject*); 200 Fingerprint computeFingerprint(const RenderObject*);
203 Cluster* maybeCreateCluster(const RenderBlock*); 201 Cluster* maybeCreateCluster(const RenderBlock*);
204 Supercluster* getSupercluster(const RenderBlock*); 202 Supercluster* getSupercluster(const RenderBlock*);
205 const RenderBlock* deepestCommonAncestor(BlockSet&); 203 const RenderBlock* deepestCommonAncestor(BlockSet&);
206 float clusterMultiplier(Cluster*); 204 float clusterMultiplier(Cluster*);
207 float superclusterMultiplier(Cluster*); 205 float superclusterMultiplier(Cluster*);
208 // A cluster's width provider is typically the deepest block containing all text. 206 // A cluster's width provider is typically the deepest block containing all text.
209 // There are exceptions, such as tables and table cells which use the table itself for width. 207 // There are exceptions, such as tables and table cells which use the table itself for width.
210 const RenderBlock* clusterWidthProvider(const RenderBlock*); 208 const RenderBlock* clusterWidthProvider(const RenderBlock*);
211 // Typically this returns a block's computed width. In the case of tables la yout, this 209 // Typically this returns a block's computed width. In the case of tables la yout, this
212 // width is not yet known so the fixed width is used if it's available, or t he containing 210 // width is not yet known so the fixed width is used if it's available, or t he containing
213 // block's width otherwise. 211 // block's width otherwise.
214 float widthFromBlock(const RenderBlock*); 212 float widthFromBlock(const RenderBlock*);
215 float multiplierFromBlock(const RenderBlock*); 213 float multiplierFromBlock(const RenderBlock*);
216 void applyMultiplier(RenderObject*, float, RelayoutBehavior = AlreadyInLayou t); 214 void applyMultiplier(RenderObject*, float);
217 bool isWiderOrNarrowerDescendant(Cluster*); 215 bool isWiderOrNarrowerDescendant(Cluster*);
218 bool isLayoutRoot(const RenderBlock*) const; 216 bool isLayoutRoot(const RenderBlock*) const;
219 217
220 Cluster* currentCluster() const; 218 Cluster* currentCluster() const;
221 219
222 RenderObject* nextChildSkippingChildrenOfBlocks(const RenderObject*, const R enderObject*); 220 RenderObject* nextChildSkippingChildrenOfBlocks(const RenderObject*, const R enderObject*);
223 221
224 const RenderBlock* deepestBlockContainingAllText(Cluster*); 222 const RenderBlock* deepestBlockContainingAllText(Cluster*);
225 const RenderBlock* deepestBlockContainingAllText(const RenderBlock*); 223 const RenderBlock* deepestBlockContainingAllText(const RenderBlock*);
226 // Returns the first text leaf that is in the current cluster. We attempt to not include text 224 // Returns the first text leaf that is in the current cluster. We attempt to not include text
227 // from descendant clusters but because descendant clusters may not exist, t his is only an approximation. 225 // from descendant clusters but because descendant clusters may not exist, t his is only an approximation.
228 // The TraversalDirection controls whether we return the first or the last t ext leaf. 226 // The TraversalDirection controls whether we return the first or the last t ext leaf.
229 const RenderObject* findTextLeaf(const RenderObject*, size_t&, TextLeafSearc h); 227 const RenderObject* findTextLeaf(const RenderObject*, size_t&, TextLeafSearc h);
230 228
231 const Document* m_document; 229 const Document* m_document;
232 int m_frameWidth; // LocalFrame width in density-independent pixels (DIPs). 230 int m_frameWidth; // LocalFrame width in density-independent pixels (DIPs).
233 int m_layoutWidth; // Layout width in CSS pixels. 231 int m_layoutWidth; // Layout width in CSS pixels.
234 float m_baseMultiplier; // Includes accessibility font scale factor and devi ce scale adjustment. 232 float m_baseMultiplier; // Includes accessibility font scale factor and devi ce scale adjustment.
235 bool m_pageNeedsAutosizing; 233 PageAutosizingStatus m_pageAutosizingStatus;
236 bool m_previouslyAutosized;
237 const RenderBlock* m_firstBlock; // First block to receive beginLayout. 234 const RenderBlock* m_firstBlock; // First block to receive beginLayout.
238 #ifndef NDEBUG 235 #ifndef NDEBUG
236 bool m_renderViewInfoPrepared;
239 BlockSet m_blocksThatHaveBegunLayout; // Used to ensure we don't compute pro perties of a block before beginLayout() is called on it. 237 BlockSet m_blocksThatHaveBegunLayout; // Used to ensure we don't compute pro perties of a block before beginLayout() is called on it.
240 #endif 238 #endif
241 239
242 // Clusters are created and destroyed during layout. The map key is the 240 // Clusters are created and destroyed during layout. The map key is the
243 // cluster root. Clusters whose roots share the same fingerprint use the 241 // cluster root. Clusters whose roots share the same fingerprint use the
244 // same multiplier. 242 // same multiplier.
245 SuperclusterMap m_superclusters; 243 SuperclusterMap m_superclusters;
246 ClusterStack m_clusterStack; 244 ClusterStack m_clusterStack;
247 FingerprintMapper m_fingerprintMapper; 245 FingerprintMapper m_fingerprintMapper;
248 }; 246 };
249 247
250 } // namespace WebCore 248 } // namespace WebCore
251 249
252 #endif // FastTextAutosizer_h 250 #endif // FastTextAutosizer_h
OLDNEW
« no previous file with comments | « Source/core/page/Page.cpp ('k') | Source/core/rendering/FastTextAutosizer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698