initial import
[vuplus_webkit] / Source / WebCore / rendering / LayoutState.h
1 /*
2  * Copyright (C) 2007 Apple Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef LayoutState_h
27 #define LayoutState_h
28
29 #include "LayoutTypes.h"
30 #include <wtf/Noncopyable.h>
31
32 namespace WebCore {
33
34 class ColumnInfo;
35 class RenderArena;
36 class RenderBox;
37 class RenderObject;
38
39 class LayoutState {
40     WTF_MAKE_NONCOPYABLE(LayoutState);
41 public:
42     LayoutState()
43         : m_clipped(false)
44         , m_pageLogicalHeight(0)
45         , m_pageLogicalHeightChanged(false)
46         , m_columnInfo(0)
47         , m_next(0)
48 #ifndef NDEBUG
49         , m_renderer(0)
50 #endif
51     {
52     }
53
54     LayoutState(LayoutState*, RenderBox*, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged, ColumnInfo*);
55     LayoutState(RenderObject*);
56
57     void destroy(RenderArena*);
58
59     // Overloaded new operator.
60     void* operator new(size_t, RenderArena*) throw();
61
62     // Overridden to prevent the normal delete from being called.
63     void operator delete(void*, size_t);
64
65     void clearPaginationInformation();
66     bool isPaginatingColumns() const { return m_columnInfo; }
67     bool isPaginated() const { return m_pageLogicalHeight || m_columnInfo; }
68     
69     // The page logical offset is the object's offset from the top of the page in the page progression
70     // direction (so an x-offset in vertical text and a y-offset for horizontal text).
71     LayoutUnit pageLogicalOffset(LayoutUnit childLogicalOffset) const;
72
73     void addForcedColumnBreak(LayoutUnit childLogicalOffset);
74     
75     bool pageLogicalHeight() const { return m_pageLogicalHeight; }
76     bool pageLogicalHeightChanged() const { return m_pageLogicalHeightChanged; }
77
78 private:
79     // The normal operator new is disallowed.
80     void* operator new(size_t) throw();
81
82 public:
83     bool m_clipped;
84     LayoutRect m_clipRect;
85     
86     // x/y offset from container. Includes relative positioning and scroll offsets.
87     LayoutSize m_paintOffset;
88     // x/y offset from container. Does not include relative positioning or scroll offsets.
89     LayoutSize m_layoutOffset;
90     // Transient offset from the final position of the object
91     // used to ensure that repaints happen in the correct place.
92     // This is a total delta accumulated from the root. 
93     LayoutSize m_layoutDelta;
94
95     // The current page height for the pagination model that encloses us.
96     LayoutUnit m_pageLogicalHeight;
97     // If our page height has changed, this will force all blocks to relayout.
98     bool m_pageLogicalHeightChanged;
99     // The offset of the start of the first page in the nearest enclosing pagination model.
100     LayoutSize m_pageOffset;
101     // If the enclosing pagination model is a column model, then this will store column information for easy retrieval/manipulation.
102     ColumnInfo* m_columnInfo;
103
104     LayoutState* m_next;
105 #ifndef NDEBUG
106     RenderObject* m_renderer;
107 #endif
108 };
109
110 } // namespace WebCore
111
112 #endif // LayoutState_h