| 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 | 
|---|