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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp

Issue 1698143002: Combine 4 bools into GeometryInfoFlags. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Bitshift. Created 4 years, 10 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2012 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 if (i > 0 && currentStep.m_layoutObject == ancestor) { 75 if (i > 0 && currentStep.m_layoutObject == ancestor) {
76 #if ENABLE(ASSERT) 76 #if ENABLE(ASSERT)
77 foundAncestor = true; 77 foundAncestor = true;
78 #endif 78 #endif
79 break; 79 break;
80 } 80 }
81 81
82 // If this box has a transform, it acts as a fixed position container 82 // If this box has a transform, it acts as a fixed position container
83 // for fixed descendants, which prevents the propagation of 'fixed' 83 // for fixed descendants, which prevents the propagation of 'fixed'
84 // unless the layer itself is also fixed position. 84 // unless the layer itself is also fixed position.
85 if (i && currentStep.m_hasTransform && !currentStep.m_isFixedPosition) 85 if (i && currentStep.m_flags & HasTransform && !(currentStep.m_flags & I sFixedPosition))
86 inFixed = false; 86 inFixed = false;
87 else if (currentStep.m_isFixedPosition) 87 else if (currentStep.m_flags & IsFixedPosition)
88 inFixed = true; 88 inFixed = true;
89 89
90 ASSERT(!i == isTopmostLayoutView(currentStep.m_layoutObject)); 90 ASSERT(!i == isTopmostLayoutView(currentStep.m_layoutObject));
91 91
92 if (!i) { 92 if (!i) {
93 // A null container indicates mapping through the root LayoutView, s o including its transform (the page scale). 93 // A null container indicates mapping through the root LayoutView, s o including its transform (the page scale).
94 if (!ancestor && currentStep.m_transform) 94 if (!ancestor && currentStep.m_transform)
95 transformState.applyTransform(*currentStep.m_transform.get()); 95 transformState.applyTransform(*currentStep.m_transform.get());
96 } else { 96 } else {
97 TransformState::TransformAccumulation accumulate = currentStep.m_acc umulatingTransform ? TransformState::AccumulateTransform : TransformState::Flatt enTransform; 97 TransformState::TransformAccumulation accumulate = currentStep.m_fla gs & AccumulatingTransform ? TransformState::AccumulateTransform : TransformStat e::FlattenTransform;
98 if (currentStep.m_transform) 98 if (currentStep.m_transform)
99 transformState.applyTransform(*currentStep.m_transform.get(), ac cumulate); 99 transformState.applyTransform(*currentStep.m_transform.get(), ac cumulate);
100 else 100 else
101 transformState.move(currentStep.m_offset.width(), currentStep.m_ offset.height(), accumulate); 101 transformState.move(currentStep.m_offset.width(), currentStep.m_ offset.height(), accumulate);
102 } 102 }
103 103
104 if (inFixed && !currentStep.m_offsetForFixedPosition.isZero()) { 104 if (inFixed && !currentStep.m_offsetForFixedPosition.isZero()) {
105 ASSERT(currentStep.m_layoutObject->isLayoutView()); 105 ASSERT(currentStep.m_layoutObject->isLayoutView());
106 transformState.move(currentStep.m_offsetForFixedPosition); 106 transformState.move(currentStep.m_offsetForFixedPosition);
107 } 107 }
108 } 108 }
109 109
110 ASSERT(foundAncestor); 110 ASSERT(foundAncestor);
111 transformState.flatten(); 111 transformState.flatten();
112 } 112 }
113 113
114 #ifndef NDEBUG 114 #ifndef NDEBUG
115 // Handy function to call from gdb while debugging mismatched point/rect errors. 115 // Handy function to call from gdb while debugging mismatched point/rect errors.
116 void LayoutGeometryMap::dumpSteps() const 116 void LayoutGeometryMap::dumpSteps() const
117 { 117 {
118 fprintf(stderr, "LayoutGeometryMap::dumpSteps accumulatedOffset=%d,%d\n", m_ accumulatedOffset.width().toInt(), m_accumulatedOffset.height().toInt()); 118 fprintf(stderr, "LayoutGeometryMap::dumpSteps accumulatedOffset=%d,%d\n", m_ accumulatedOffset.width().toInt(), m_accumulatedOffset.height().toInt());
119 for (int i = m_mapping.size() - 1; i >= 0; --i) { 119 for (int i = m_mapping.size() - 1; i >= 0; --i) {
120 fprintf(stderr, " [%d] %s: offset=%d,%d", i, 120 fprintf(stderr, " [%d] %s: offset=%d,%d", i,
121 m_mapping[i].m_layoutObject->debugName().ascii().data(), 121 m_mapping[i].m_layoutObject->debugName().ascii().data(),
122 m_mapping[i].m_offset.width().toInt(), 122 m_mapping[i].m_offset.width().toInt(),
123 m_mapping[i].m_offset.height().toInt()); 123 m_mapping[i].m_offset.height().toInt());
124 if (m_mapping[i].m_hasTransform) 124 if (m_mapping[i].m_flags & HasTransform)
125 fprintf(stderr, " hasTransform"); 125 fprintf(stderr, " hasTransform");
126 fprintf(stderr, "\n"); 126 fprintf(stderr, "\n");
127 } 127 }
128 } 128 }
129 #endif 129 #endif
130 130
131 FloatQuad LayoutGeometryMap::mapToAncestor(const FloatRect& rect, const LayoutBo xModelObject* ancestor) const 131 FloatQuad LayoutGeometryMap::mapToAncestor(const FloatRect& rect, const LayoutBo xModelObject* ancestor) const
132 { 132 {
133 FloatQuad result; 133 FloatQuad result;
134 134
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 layer->convertToLayerCoords(ancestorLayer, layerOffset); 204 layer->convertToLayerCoords(ancestorLayer, layerOffset);
205 205
206 // The LayoutView must be pushed first. 206 // The LayoutView must be pushed first.
207 if (!m_mapping.size()) { 207 if (!m_mapping.size()) {
208 ASSERT(ancestorLayer->layoutObject()->isLayoutView()); 208 ASSERT(ancestorLayer->layoutObject()->isLayoutView());
209 pushMappingsToAncestor(ancestorLayer->layoutObject(), 0); 209 pushMappingsToAncestor(ancestorLayer->layoutObject(), 0);
210 } 210 }
211 211
212 TemporaryChange<size_t> positionChange(m_insertionPosition, m_mapping.si ze()); 212 TemporaryChange<size_t> positionChange(m_insertionPosition, m_mapping.si ze());
213 bool accumulatingTransform = layer->layoutObject()->style()->preserves3D () || ancestorLayer->layoutObject()->style()->preserves3D(); 213 bool accumulatingTransform = layer->layoutObject()->style()->preserves3D () || ancestorLayer->layoutObject()->style()->preserves3D();
214 push(layoutObject, toLayoutSize(layerOffset), accumulatingTransform, /*i sNonUniform*/ false, /*isFixedPosition*/ false, /*hasTransform*/ false); 214 push(layoutObject, toLayoutSize(layerOffset), accumulatingTransform ? Ac cumulatingTransform : 0);
215 return; 215 return;
216 } 216 }
217 const LayoutBoxModelObject* ancestorLayoutObject = ancestorLayer ? ancestorL ayer->layoutObject() : 0; 217 const LayoutBoxModelObject* ancestorLayoutObject = ancestorLayer ? ancestorL ayer->layoutObject() : 0;
218 pushMappingsToAncestor(layoutObject, ancestorLayoutObject); 218 pushMappingsToAncestor(layoutObject, ancestorLayoutObject);
219 } 219 }
220 220
221 void LayoutGeometryMap::push(const LayoutObject* layoutObject, const LayoutSize& offsetFromContainer, bool accumulatingTransform, bool isNonUniform, bool isFixe dPosition, bool hasTransform, LayoutSize offsetForFixedPosition) 221 void LayoutGeometryMap::push(const LayoutObject* layoutObject, const LayoutSize& offsetFromContainer, GeometryInfoFlags flags, LayoutSize offsetForFixedPosition )
222 { 222 {
223 LAYOUT_GEOMETRY_MAP_LOG("LayoutGeometryMap::push %p %d,%d isNonUniform=%d\n" , layoutObject, offsetFromContainer.width().toInt(), offsetFromContainer.height( ).toInt(), isNonUniform); 223 LAYOUT_GEOMETRY_MAP_LOG("LayoutGeometryMap::push %p %d,%d isNonUniform=%d\n" , layoutObject, offsetFromContainer.width().toInt(), offsetFromContainer.height( ).toInt(), isNonUniform);
224 224
225 ASSERT(m_insertionPosition != kNotFound); 225 ASSERT(m_insertionPosition != kNotFound);
226 ASSERT(!layoutObject->isLayoutView() || !m_insertionPosition || m_mapCoordin atesFlags & TraverseDocumentBoundaries); 226 ASSERT(!layoutObject->isLayoutView() || !m_insertionPosition || m_mapCoordin atesFlags & TraverseDocumentBoundaries);
227 ASSERT(offsetForFixedPosition.isZero() || layoutObject->isLayoutView()); 227 ASSERT(offsetForFixedPosition.isZero() || layoutObject->isLayoutView());
228 228
229 m_mapping.insert(m_insertionPosition, LayoutGeometryMapStep(layoutObject, ac cumulatingTransform, isNonUniform, isFixedPosition, hasTransform)); 229 m_mapping.insert(m_insertionPosition, LayoutGeometryMapStep(layoutObject, fl ags));
230 230
231 LayoutGeometryMapStep& step = m_mapping[m_insertionPosition]; 231 LayoutGeometryMapStep& step = m_mapping[m_insertionPosition];
232 step.m_offset = offsetFromContainer; 232 step.m_offset = offsetFromContainer;
233 step.m_offsetForFixedPosition = offsetForFixedPosition; 233 step.m_offsetForFixedPosition = offsetForFixedPosition;
234 234
235 stepInserted(step); 235 stepInserted(step);
236 } 236 }
237 237
238 void LayoutGeometryMap::push(const LayoutObject* layoutObject, const Transformat ionMatrix& t, bool accumulatingTransform, bool isNonUniform, bool isFixedPositio n, bool hasTransform, LayoutSize offsetForFixedPosition) 238 void LayoutGeometryMap::push(const LayoutObject* layoutObject, const Transformat ionMatrix& t, GeometryInfoFlags flags, LayoutSize offsetForFixedPosition)
239 { 239 {
240 ASSERT(m_insertionPosition != kNotFound); 240 ASSERT(m_insertionPosition != kNotFound);
241 ASSERT(!layoutObject->isLayoutView() || !m_insertionPosition || m_mapCoordin atesFlags & TraverseDocumentBoundaries); 241 ASSERT(!layoutObject->isLayoutView() || !m_insertionPosition || m_mapCoordin atesFlags & TraverseDocumentBoundaries);
242 ASSERT(offsetForFixedPosition.isZero() || layoutObject->isLayoutView()); 242 ASSERT(offsetForFixedPosition.isZero() || layoutObject->isLayoutView());
243 243
244 m_mapping.insert(m_insertionPosition, LayoutGeometryMapStep(layoutObject, ac cumulatingTransform, isNonUniform, isFixedPosition, hasTransform)); 244 m_mapping.insert(m_insertionPosition, LayoutGeometryMapStep(layoutObject, fl ags));
245 245
246 LayoutGeometryMapStep& step = m_mapping[m_insertionPosition]; 246 LayoutGeometryMapStep& step = m_mapping[m_insertionPosition];
247 step.m_offsetForFixedPosition = offsetForFixedPosition; 247 step.m_offsetForFixedPosition = offsetForFixedPosition;
248 248
249 if (!t.isIntegerTranslation()) 249 if (!t.isIntegerTranslation())
250 step.m_transform = TransformationMatrix::create(t); 250 step.m_transform = TransformationMatrix::create(t);
251 else 251 else
252 step.m_offset = LayoutSize(t.e(), t.f()); 252 step.m_offset = LayoutSize(t.e(), t.f());
253 253
254 stepInserted(step); 254 stepInserted(step);
(...skipping 12 matching lines...) Expand all
267 void LayoutGeometryMap::popMappingsToAncestor(const PaintLayer* ancestorLayer) 267 void LayoutGeometryMap::popMappingsToAncestor(const PaintLayer* ancestorLayer)
268 { 268 {
269 const LayoutBoxModelObject* ancestorLayoutObject = ancestorLayer ? ancestorL ayer->layoutObject() : 0; 269 const LayoutBoxModelObject* ancestorLayoutObject = ancestorLayer ? ancestorL ayer->layoutObject() : 0;
270 popMappingsToAncestor(ancestorLayoutObject); 270 popMappingsToAncestor(ancestorLayoutObject);
271 } 271 }
272 272
273 void LayoutGeometryMap::stepInserted(const LayoutGeometryMapStep& step) 273 void LayoutGeometryMap::stepInserted(const LayoutGeometryMapStep& step)
274 { 274 {
275 m_accumulatedOffset += step.m_offset; 275 m_accumulatedOffset += step.m_offset;
276 276
277 if (step.m_isNonUniform) 277 if (step.m_flags & IsNonUniform)
278 ++m_nonUniformStepsCount; 278 ++m_nonUniformStepsCount;
279 279
280 if (step.m_transform) 280 if (step.m_transform)
281 ++m_transformedStepsCount; 281 ++m_transformedStepsCount;
282 282
283 if (step.m_isFixedPosition) 283 if (step.m_flags & IsFixedPosition)
284 ++m_fixedStepsCount; 284 ++m_fixedStepsCount;
285 } 285 }
286 286
287 void LayoutGeometryMap::stepRemoved(const LayoutGeometryMapStep& step) 287 void LayoutGeometryMap::stepRemoved(const LayoutGeometryMapStep& step)
288 { 288 {
289 m_accumulatedOffset -= step.m_offset; 289 m_accumulatedOffset -= step.m_offset;
290 290
291 if (step.m_isNonUniform) { 291 if (step.m_flags & IsNonUniform) {
292 ASSERT(m_nonUniformStepsCount); 292 ASSERT(m_nonUniformStepsCount);
293 --m_nonUniformStepsCount; 293 --m_nonUniformStepsCount;
294 } 294 }
295 295
296 if (step.m_transform) { 296 if (step.m_transform) {
297 ASSERT(m_transformedStepsCount); 297 ASSERT(m_transformedStepsCount);
298 --m_transformedStepsCount; 298 --m_transformedStepsCount;
299 } 299 }
300 300
301 if (step.m_isFixedPosition) { 301 if (step.m_flags & IsFixedPosition) {
302 ASSERT(m_fixedStepsCount); 302 ASSERT(m_fixedStepsCount);
303 --m_fixedStepsCount; 303 --m_fixedStepsCount;
304 } 304 }
305 } 305 }
306 306
307 #if ENABLE(ASSERT) 307 #if ENABLE(ASSERT)
308 bool LayoutGeometryMap::isTopmostLayoutView(const LayoutObject* layoutObject) co nst 308 bool LayoutGeometryMap::isTopmostLayoutView(const LayoutObject* layoutObject) co nst
309 { 309 {
310 if (!layoutObject->isLayoutView()) 310 if (!layoutObject->isLayoutView())
311 return false; 311 return false;
312 312
313 // If we're not working with multiple LayoutViews, then any view is consider ed 313 // If we're not working with multiple LayoutViews, then any view is consider ed
314 // "topmost" (to preserve original behavior). 314 // "topmost" (to preserve original behavior).
315 if (!(m_mapCoordinatesFlags & TraverseDocumentBoundaries)) 315 if (!(m_mapCoordinatesFlags & TraverseDocumentBoundaries))
316 return true; 316 return true;
317 317
318 return layoutObject->frame()->isMainFrame(); 318 return layoutObject->frame()->isMainFrame();
319 } 319 }
320 #endif 320 #endif
321 321
322 } // namespace blink 322 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698