Optimize fetching the Node for never-anonymous renderers.
[WebKit-https.git] / Source / WebCore / rendering / RenderTableCol.h
1 /*
2  * Copyright (C) 1997 Martin Jones (mjones@kde.org)
3  *           (C) 1997 Torben Weis (weis@kde.org)
4  *           (C) 1998 Waldo Bastian (bastian@kde.org)
5  *           (C) 1999 Lars Knoll (knoll@kde.org)
6  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
7  * Copyright (C) 2003, 2004, 2005, 2006, 2009 Apple Inc. All rights reserved.
8  * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Library General Public
12  * License as published by the Free Software Foundation; either
13  * version 2 of the License, or (at your option) any later version.
14  *
15  * This library is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Library General Public License for more details.
19  *
20  * You should have received a copy of the GNU Library General Public License
21  * along with this library; see the file COPYING.LIB.  If not, write to
22  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
23  * Boston, MA 02110-1301, USA.
24  */
25
26 #ifndef RenderTableCol_h
27 #define RenderTableCol_h
28
29 #include "RenderBox.h"
30
31 namespace WebCore {
32
33 class RenderTable;
34 class RenderTableCell;
35
36 class RenderTableCol FINAL : public RenderBox {
37 public:
38     explicit RenderTableCol(Element&);
39     Element& element() const { return toElement(nodeForNonAnonymous()); }
40
41     RenderObject* firstChild() const { return m_children.firstChild(); }
42     RenderObject* lastChild() const { return m_children.lastChild(); }
43
44     virtual const RenderObjectChildList* children() const OVERRIDE { return &m_children; }
45     virtual RenderObjectChildList* children() OVERRIDE { return &m_children; }
46
47     void clearPreferredLogicalWidthsDirtyBits();
48
49     unsigned span() const { return m_span; }
50     void setSpan(unsigned span) { m_span = span; }
51
52     bool isTableColumnGroupWithColumnChildren() { return firstChild(); }
53     bool isTableColumn() const { return style()->display() == TABLE_COLUMN; }
54     bool isTableColumnGroup() const { return style()->display() == TABLE_COLUMN_GROUP; }
55
56     RenderTableCol* enclosingColumnGroup() const;
57     RenderTableCol* enclosingColumnGroupIfAdjacentBefore() const
58     {
59         if (previousSibling())
60             return 0;
61         return enclosingColumnGroup();
62     }
63
64     RenderTableCol* enclosingColumnGroupIfAdjacentAfter() const
65     {
66         if (nextSibling())
67             return 0;
68         return enclosingColumnGroup();
69     }
70
71
72     // Returns the next column or column-group.
73     RenderTableCol* nextColumn() const;
74
75     const BorderValue& borderAdjoiningCellStartBorder(const RenderTableCell*) const;
76     const BorderValue& borderAdjoiningCellEndBorder(const RenderTableCell*) const;
77     const BorderValue& borderAdjoiningCellBefore(const RenderTableCell*) const;
78     const BorderValue& borderAdjoiningCellAfter(const RenderTableCell*) const;
79
80 private:
81     virtual const char* renderName() const OVERRIDE { return "RenderTableCol"; }
82     virtual bool isRenderTableCol() const OVERRIDE { return true; }
83     virtual void updateFromElement() OVERRIDE;
84     virtual void computePreferredLogicalWidths() OVERRIDE { ASSERT_NOT_REACHED(); }
85
86     virtual void insertedIntoTree() OVERRIDE;
87     virtual void willBeRemovedFromTree() OVERRIDE;
88
89     virtual bool isChildAllowed(RenderObject*, RenderStyle*) const OVERRIDE;
90     virtual bool canHaveChildren() const OVERRIDE;
91     virtual bool requiresLayer() const OVERRIDE { return false; }
92
93     virtual LayoutRect clippedOverflowRectForRepaint(const RenderLayerModelObject* repaintContainer) const OVERRIDE;
94     virtual void imageChanged(WrappedImagePtr, const IntRect* = 0) OVERRIDE;
95
96     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) OVERRIDE;
97
98     RenderTable* table() const;
99
100     RenderObjectChildList m_children;
101     unsigned m_span;
102 };
103
104 inline RenderTableCol* toRenderTableCol(RenderObject* object)
105 {
106     ASSERT_WITH_SECURITY_IMPLICATION(!object || object->isRenderTableCol());
107     return static_cast<RenderTableCol*>(object);
108 }
109
110 inline const RenderTableCol* toRenderTableCol(const RenderObject* object)
111 {
112     ASSERT_WITH_SECURITY_IMPLICATION(!object || object->isRenderTableCol());
113     return static_cast<const RenderTableCol*>(object);
114 }
115
116 // This will catch anyone doing an unnecessary cast.
117 void toRenderTableCol(const RenderTableCol*);
118
119 }
120
121 #endif