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

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

Issue 1537133002: Renaming: distinguish ancestor, container and paintInvalidationContainer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@SelectionInvalidation
Patch Set: Created 4 years, 12 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 , m_transformedStepsCount(0) 47 , m_transformedStepsCount(0)
48 , m_fixedStepsCount(0) 48 , m_fixedStepsCount(0)
49 , m_mapCoordinatesFlags(flags) 49 , m_mapCoordinatesFlags(flags)
50 { 50 {
51 } 51 }
52 52
53 LayoutGeometryMap::~LayoutGeometryMap() 53 LayoutGeometryMap::~LayoutGeometryMap()
54 { 54 {
55 } 55 }
56 56
57 void LayoutGeometryMap::mapToContainer(TransformState& transformState, const Lay outBoxModelObject* container) const 57 void LayoutGeometryMap::mapToAncestor(TransformState& transformState, const Layo utBoxModelObject* ancestor) const
58 { 58 {
59 // If the mapping includes something like columns, we have to go via layoutO bjects. 59 // If the mapping includes something like columns, we have to go via layoutO bjects.
60 if (hasNonUniformStep()) { 60 if (hasNonUniformStep()) {
61 m_mapping.last().m_layoutObject->mapLocalToContainer(container, transfor mState, ApplyContainerFlip | m_mapCoordinatesFlags); 61 m_mapping.last().m_layoutObject->mapLocalToAncestor(ancestor, transformS tate, ApplyContainerFlip | m_mapCoordinatesFlags);
62 transformState.flatten(); 62 transformState.flatten();
63 return; 63 return;
64 } 64 }
65 65
66 bool inFixed = false; 66 bool inFixed = false;
67 #if ENABLE(ASSERT) 67 #if ENABLE(ASSERT)
68 bool foundContainer = !container || (m_mapping.size() && m_mapping[0].m_layo utObject == container); 68 bool foundAncestor = !ancestor || (m_mapping.size() && m_mapping[0].m_layout Object == ancestor);
69 #endif 69 #endif
70 70
71 for (int i = m_mapping.size() - 1; i >= 0; --i) { 71 for (int i = m_mapping.size() - 1; i >= 0; --i) {
72 const LayoutGeometryMapStep& currentStep = m_mapping[i]; 72 const LayoutGeometryMapStep& currentStep = m_mapping[i];
73 73
74 // If container is the root LayoutView (step 0) we want to apply its fix ed position offset. 74 // If container is the root LayoutView (step 0) we want to apply its fix ed position offset.
75 if (i > 0 && currentStep.m_layoutObject == container) { 75 if (i > 0 && currentStep.m_layoutObject == ancestor) {
76 #if ENABLE(ASSERT) 76 #if ENABLE(ASSERT)
77 foundContainer = 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_hasTransform && !currentStep.m_isFixedPosition)
86 inFixed = false; 86 inFixed = false;
87 else if (currentStep.m_isFixedPosition) 87 else if (currentStep.m_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 (!container && 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_acc umulatingTransform ? TransformState::AccumulateTransform : TransformState::Flatt enTransform;
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(foundContainer); 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_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::mapToContainer(const FloatRect& rect, const LayoutB oxModelObject* container) const 131 FloatQuad LayoutGeometryMap::mapToAncestor(const FloatRect& rect, const LayoutBo xModelObject* ancestor) const
132 { 132 {
133 FloatQuad result; 133 FloatQuad result;
134 134
135 if (!hasFixedPositionStep() && !hasTransformStep() && !hasNonUniformStep() & & (!container || (m_mapping.size() && container == m_mapping[0].m_layoutObject)) ) { 135 if (!hasFixedPositionStep() && !hasTransformStep() && !hasNonUniformStep() & & (!ancestor || (m_mapping.size() && ancestor == m_mapping[0].m_layoutObject))) {
136 result = rect; 136 result = rect;
137 result.move(m_accumulatedOffset); 137 result.move(m_accumulatedOffset);
138 } else { 138 } else {
139 TransformState transformState(TransformState::ApplyTransformDirection, r ect.center(), rect); 139 TransformState transformState(TransformState::ApplyTransformDirection, r ect.center(), rect);
140 mapToContainer(transformState, container); 140 mapToAncestor(transformState, ancestor);
141 result = transformState.lastPlanarQuad(); 141 result = transformState.lastPlanarQuad();
142 } 142 }
143 143
144 #if ENABLE(ASSERT) 144 #if ENABLE(ASSERT)
145 if (m_mapping.size() > 0) { 145 if (m_mapping.size() > 0) {
146 const LayoutObject* lastLayoutObject = m_mapping.last().m_layoutObject; 146 const LayoutObject* lastLayoutObject = m_mapping.last().m_layoutObject;
147 147
148 FloatRect layoutObjectMappedResult = lastLayoutObject->localToContainerQ uad(rect, container, m_mapCoordinatesFlags).boundingBox(); 148 FloatRect layoutObjectMappedResult = lastLayoutObject->localToAncestorQu ad(rect, ancestor, m_mapCoordinatesFlags).boundingBox();
149 149
150 // Inspector creates layoutObjects with negative width <https://bugs.web kit.org/show_bug.cgi?id=87194>. 150 // Inspector creates layoutObjects with negative width <https://bugs.web kit.org/show_bug.cgi?id=87194>.
151 // Taking FloatQuad bounds avoids spurious assertions because of that. 151 // Taking FloatQuad bounds avoids spurious assertions because of that.
152 ASSERT(enclosingIntRect(layoutObjectMappedResult) == enclosingIntRect(re sult.boundingBox()) 152 ASSERT(enclosingIntRect(layoutObjectMappedResult) == enclosingIntRect(re sult.boundingBox())
153 || layoutObjectMappedResult.mayNotHaveExactIntRectRepresentation() 153 || layoutObjectMappedResult.mayNotHaveExactIntRectRepresentation()
154 || result.boundingBox().mayNotHaveExactIntRectRepresentation()); 154 || result.boundingBox().mayNotHaveExactIntRectRepresentation());
155 } 155 }
156 #endif 156 #endif
157 157
158 return result; 158 return result;
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutGeometryMap.h ('k') | third_party/WebKit/Source/core/layout/LayoutInline.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698