OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2006 Apple Computer, Inc. | 3 * Copyright (C) 2006 Apple Computer, Inc. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 13 matching lines...) Expand all Loading... |
24 | 24 |
25 #include "core/frame/FrameView.h" | 25 #include "core/frame/FrameView.h" |
26 #include "core/rendering/LayoutState.h" | 26 #include "core/rendering/LayoutState.h" |
27 #include "core/rendering/RenderBlockFlow.h" | 27 #include "core/rendering/RenderBlockFlow.h" |
28 #include "platform/PODFreeListArena.h" | 28 #include "platform/PODFreeListArena.h" |
29 #include "platform/scroll/ScrollableArea.h" | 29 #include "platform/scroll/ScrollableArea.h" |
30 #include "wtf/OwnPtr.h" | 30 #include "wtf/OwnPtr.h" |
31 | 31 |
32 namespace WebCore { | 32 namespace WebCore { |
33 | 33 |
34 class FlowThreadController; | |
35 class RenderLayerCompositor; | 34 class RenderLayerCompositor; |
36 class RenderQuote; | 35 class RenderQuote; |
37 | 36 |
38 // The root of the render tree, corresponding to the CSS initial containing bloc
k. | 37 // The root of the render tree, corresponding to the CSS initial containing bloc
k. |
39 // It's dimensions match that of the logical viewport (which may be different fr
om | 38 // It's dimensions match that of the logical viewport (which may be different fr
om |
40 // the visible viewport in fixed-layout mode), and it is always at position (0,0
) | 39 // the visible viewport in fixed-layout mode), and it is always at position (0,0
) |
41 // relative to the document (and so isn't necessarily in view). | 40 // relative to the document (and so isn't necessarily in view). |
42 class RenderView FINAL : public RenderBlockFlow { | 41 class RenderView FINAL : public RenderBlockFlow { |
43 public: | 42 public: |
44 explicit RenderView(Document*); | 43 explicit RenderView(Document*); |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 bool usesCompositing() const; | 163 bool usesCompositing() const; |
165 | 164 |
166 IntRect unscaledDocumentRect() const; | 165 IntRect unscaledDocumentRect() const; |
167 LayoutRect backgroundRect(RenderBox* backgroundRenderer) const; | 166 LayoutRect backgroundRect(RenderBox* backgroundRenderer) const; |
168 | 167 |
169 IntRect documentRect() const; | 168 IntRect documentRect() const; |
170 | 169 |
171 // Renderer that paints the root background has background-images which all
have background-attachment: fixed. | 170 // Renderer that paints the root background has background-images which all
have background-attachment: fixed. |
172 bool rootBackgroundIsEntirelyFixed() const; | 171 bool rootBackgroundIsEntirelyFixed() const; |
173 | 172 |
174 bool hasRenderNamedFlowThreads() const; | |
175 bool checkTwoPassLayoutForAutoHeightRegions() const; | |
176 FlowThreadController* flowThreadController(); | |
177 | |
178 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) OV
ERRIDE; | |
179 | |
180 IntervalArena* intervalArena(); | 173 IntervalArena* intervalArena(); |
181 | 174 |
182 void setRenderQuoteHead(RenderQuote* head) { m_renderQuoteHead = head; } | 175 void setRenderQuoteHead(RenderQuote* head) { m_renderQuoteHead = head; } |
183 RenderQuote* renderQuoteHead() const { return m_renderQuoteHead; } | 176 RenderQuote* renderQuoteHead() const { return m_renderQuoteHead; } |
184 | 177 |
185 // FIXME: This is a work around because the current implementation of counte
rs | 178 // FIXME: This is a work around because the current implementation of counte
rs |
186 // requires walking the entire tree repeatedly and most pages don't actually
use either | 179 // requires walking the entire tree repeatedly and most pages don't actually
use either |
187 // feature so we shouldn't take the performance hit when not needed. Long te
rm we should | 180 // feature so we shouldn't take the performance hit when not needed. Long te
rm we should |
188 // rewrite the counter and quotes code. | 181 // rewrite the counter and quotes code. |
189 void addRenderCounter() { m_renderCounterCount++; } | 182 void addRenderCounter() { m_renderCounterCount++; } |
190 void removeRenderCounter() { ASSERT(m_renderCounterCount > 0); m_renderCount
erCount--; } | 183 void removeRenderCounter() { ASSERT(m_renderCounterCount > 0); m_renderCount
erCount--; } |
191 bool hasRenderCounters() { return m_renderCounterCount; } | 184 bool hasRenderCounters() { return m_renderCounterCount; } |
192 | 185 |
193 virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0)
OVERRIDE; | |
194 | |
195 virtual bool backgroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect)
const OVERRIDE; | 186 virtual bool backgroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect)
const OVERRIDE; |
196 | 187 |
197 double layoutViewportWidth() const; | 188 double layoutViewportWidth() const; |
198 double layoutViewportHeight() const; | 189 double layoutViewportHeight() const; |
199 | 190 |
200 private: | 191 private: |
201 virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContai
ner, TransformState&, MapCoordinatesFlags = ApplyContainerFlip, bool* wasFixed =
0) const OVERRIDE; | 192 virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContai
ner, TransformState&, MapCoordinatesFlags = ApplyContainerFlip, bool* wasFixed =
0) const OVERRIDE; |
202 virtual const RenderObject* pushMappingToContainer(const RenderLayerModelObj
ect* ancestorToStopAt, RenderGeometryMap&) const OVERRIDE; | 193 virtual const RenderObject* pushMappingToContainer(const RenderLayerModelObj
ect* ancestorToStopAt, RenderGeometryMap&) const OVERRIDE; |
203 virtual void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) c
onst OVERRIDE; | 194 virtual void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) c
onst OVERRIDE; |
204 virtual bool requiresColumns(int desiredColumnCount) const OVERRIDE; | 195 virtual bool requiresColumns(int desiredColumnCount) const OVERRIDE; |
205 virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint&
layerOffset) const OVERRIDE; | 196 virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint&
layerOffset) const OVERRIDE; |
206 | 197 |
207 bool initializeLayoutState(LayoutState&); | 198 bool initializeLayoutState(LayoutState&); |
208 | 199 |
209 virtual void calcColumnWidth() OVERRIDE; | 200 virtual void calcColumnWidth() OVERRIDE; |
210 virtual ColumnInfo::PaginationUnit paginationUnit() const OVERRIDE; | 201 virtual ColumnInfo::PaginationUnit paginationUnit() const OVERRIDE; |
211 | 202 |
212 bool shouldRepaint(const LayoutRect&) const; | 203 bool shouldRepaint(const LayoutRect&) const; |
213 | 204 |
214 // These functions may only be accessed by LayoutStateMaintainer. | 205 // These functions may only be accessed by LayoutStateMaintainer. |
215 bool pushLayoutState(RenderBox* renderer, const LayoutSize& offset, LayoutUn
it pageHeight = 0, bool pageHeightChanged = false, ColumnInfo* colInfo = 0) | 206 bool pushLayoutState(RenderBox* renderer, const LayoutSize& offset, LayoutUn
it pageHeight = 0, bool pageHeightChanged = false, ColumnInfo* colInfo = 0) |
216 { | 207 { |
217 // We push LayoutState even if layoutState is disabled because it stores
layoutDelta too. | 208 // We push LayoutState even if layoutState is disabled because it stores
layoutDelta too. |
218 if (!doingFullRepaint() || m_layoutState->isPaginated() || renderer->has
Columns() || renderer->flowThreadContainingBlock() | 209 if (!doingFullRepaint() || m_layoutState->isPaginated() || renderer->has
Columns() |
219 || m_layoutState->lineGrid() || (renderer->style()->lineGrid() != Re
nderStyle::initialLineGrid() && renderer->isRenderBlockFlow()) | 210 || m_layoutState->lineGrid() || (renderer->style()->lineGrid() != Re
nderStyle::initialLineGrid() && renderer->isRenderBlockFlow()) |
220 || (renderer->isRenderBlock() && toRenderBlock(renderer)->shapeInsid
eInfo()) | 211 || (renderer->isRenderBlock() && toRenderBlock(renderer)->shapeInsid
eInfo()) |
221 || (m_layoutState->shapeInsideInfo() && renderer->isRenderBlock() &&
!toRenderBlock(renderer)->allowsShapeInsideInfoSharing(m_layoutState->shapeInsi
deInfo()->owner())) | 212 || (m_layoutState->shapeInsideInfo() && renderer->isRenderBlock() &&
!toRenderBlock(renderer)->allowsShapeInsideInfoSharing(m_layoutState->shapeInsi
deInfo()->owner())) |
222 ) { | 213 ) { |
223 pushLayoutStateForCurrentFlowThread(renderer); | |
224 m_layoutState = new LayoutState(m_layoutState, renderer, offset, pag
eHeight, pageHeightChanged, colInfo); | 214 m_layoutState = new LayoutState(m_layoutState, renderer, offset, pag
eHeight, pageHeightChanged, colInfo); |
225 return true; | 215 return true; |
226 } | 216 } |
227 return false; | 217 return false; |
228 } | 218 } |
229 | 219 |
230 void popLayoutState() | 220 void popLayoutState() |
231 { | 221 { |
232 LayoutState* state = m_layoutState; | 222 LayoutState* state = m_layoutState; |
233 m_layoutState = state->m_next; | 223 m_layoutState = state->m_next; |
234 delete state; | 224 delete state; |
235 popLayoutStateForCurrentFlowThread(); | |
236 } | 225 } |
237 | 226 |
238 // Suspends the LayoutState optimization. Used under transforms that cannot
be represented by | 227 // Suspends the LayoutState optimization. Used under transforms that cannot
be represented by |
239 // LayoutState (common in SVG) and when manipulating the render tree during
layout in ways | 228 // LayoutState (common in SVG) and when manipulating the render tree during
layout in ways |
240 // that can trigger repaint of a non-child (e.g. when a list item moves its
list marker around). | 229 // that can trigger repaint of a non-child (e.g. when a list item moves its
list marker around). |
241 // Note that even when disabled, LayoutState is still used to store layoutDe
lta. | 230 // Note that even when disabled, LayoutState is still used to store layoutDe
lta. |
242 // These functions may only be accessed by LayoutStateMaintainer or LayoutSt
ateDisabler. | 231 // These functions may only be accessed by LayoutStateMaintainer or LayoutSt
ateDisabler. |
243 void disableLayoutState() { m_layoutStateDisableCount++; } | 232 void disableLayoutState() { m_layoutStateDisableCount++; } |
244 void enableLayoutState() { ASSERT(m_layoutStateDisableCount > 0); m_layoutSt
ateDisableCount--; } | 233 void enableLayoutState() { ASSERT(m_layoutStateDisableCount > 0); m_layoutSt
ateDisableCount--; } |
245 | 234 |
246 void layoutContent(const LayoutState&); | 235 void layoutContent(const LayoutState&); |
247 void layoutContentInAutoLogicalHeightRegions(const LayoutState&); | |
248 #ifndef NDEBUG | 236 #ifndef NDEBUG |
249 void checkLayoutState(const LayoutState&); | 237 void checkLayoutState(const LayoutState&); |
250 #endif | 238 #endif |
251 | 239 |
252 void positionDialog(RenderBox*); | 240 void positionDialog(RenderBox*); |
253 void positionDialogs(); | 241 void positionDialogs(); |
254 | 242 |
255 void pushLayoutStateForCurrentFlowThread(const RenderObject*); | |
256 void popLayoutStateForCurrentFlowThread(); | |
257 | |
258 friend class LayoutStateMaintainer; | 243 friend class LayoutStateMaintainer; |
259 friend class LayoutStateDisabler; | 244 friend class LayoutStateDisabler; |
260 | 245 |
261 bool shouldUsePrintingLayout() const; | 246 bool shouldUsePrintingLayout() const; |
262 | 247 |
263 FrameView* m_frameView; | 248 FrameView* m_frameView; |
264 | 249 |
265 RenderObject* m_selectionStart; | 250 RenderObject* m_selectionStart; |
266 RenderObject* m_selectionEnd; | 251 RenderObject* m_selectionEnd; |
267 | 252 |
268 int m_selectionStartPos; | 253 int m_selectionStartPos; |
269 int m_selectionEndPos; | 254 int m_selectionEndPos; |
270 | 255 |
271 int m_maximalOutlineSize; // Used to apply a fudge factor to dirty-rect chec
ks on blocks/tables. | 256 int m_maximalOutlineSize; // Used to apply a fudge factor to dirty-rect chec
ks on blocks/tables. |
272 int m_oldMaximalOutlineSize; // The fudge factor from the previous layout. | 257 int m_oldMaximalOutlineSize; // The fudge factor from the previous layout. |
273 | 258 |
274 LayoutUnit m_pageLogicalHeight; | 259 LayoutUnit m_pageLogicalHeight; |
275 bool m_pageLogicalHeightChanged; | 260 bool m_pageLogicalHeightChanged; |
276 LayoutState* m_layoutState; | 261 LayoutState* m_layoutState; |
277 unsigned m_layoutStateDisableCount; | 262 unsigned m_layoutStateDisableCount; |
278 OwnPtr<RenderLayerCompositor> m_compositor; | 263 OwnPtr<RenderLayerCompositor> m_compositor; |
279 OwnPtr<FlowThreadController> m_flowThreadController; | |
280 RefPtr<IntervalArena> m_intervalArena; | 264 RefPtr<IntervalArena> m_intervalArena; |
281 | 265 |
282 RenderQuote* m_renderQuoteHead; | 266 RenderQuote* m_renderQuoteHead; |
283 unsigned m_renderCounterCount; | 267 unsigned m_renderCounterCount; |
284 }; | 268 }; |
285 | 269 |
286 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderView, isRenderView()); | 270 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderView, isRenderView()); |
287 | 271 |
288 // Stack-based class to assist with LayoutState push/pop | 272 // Stack-based class to assist with LayoutState push/pop |
289 class LayoutStateMaintainer { | 273 class LayoutStateMaintainer { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 if (m_view) | 348 if (m_view) |
365 m_view->enableLayoutState(); | 349 m_view->enableLayoutState(); |
366 } | 350 } |
367 private: | 351 private: |
368 RenderView* m_view; | 352 RenderView* m_view; |
369 }; | 353 }; |
370 | 354 |
371 } // namespace WebCore | 355 } // namespace WebCore |
372 | 356 |
373 #endif // RenderView_h | 357 #endif // RenderView_h |
OLD | NEW |