f16e93d28eb3b36eb1b5b73eb146af2616757987
[WebKit-https.git] / WebCore / rendering / RenderTableCell.h
1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 1997 Martin Jones (mjones@kde.org)
5  *           (C) 1997 Torben Weis (weis@kde.org)
6  *           (C) 1998 Waldo Bastian (bastian@kde.org)
7  *           (C) 1999 Lars Knoll (knoll@kde.org)
8  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
9  * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Library General Public
13  * License as published by the Free Software Foundation; either
14  * version 2 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Library General Public License for more details.
20  *
21  * You should have received a copy of the GNU Library General Public License
22  * along with this library; see the file COPYING.LIB.  If not, write to
23  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24  * Boston, MA 02111-1307, USA.
25  */
26
27 #ifndef RenderTableCell_H
28 #define RenderTableCell_H
29
30 #include "RenderTableSection.h"
31
32 namespace WebCore {
33
34 class RenderTableCell : public RenderBlock {
35 public:
36     RenderTableCell(Node*);
37
38     virtual void destroy();
39
40     virtual const char* renderName() const { return "RenderTableCell"; }
41     virtual bool isTableCell() const { return true; }
42
43     // FIXME: need to implement cellIndex
44     int cellIndex() const { return 0; }
45     void setCellIndex(int) { }
46
47     int colSpan() const { return cSpan; }
48     void setColSpan(int c) { cSpan = c; }
49
50     int rowSpan() const { return rSpan; }
51     void setRowSpan(int r) { rSpan = r; }
52
53     int col() const { return _col; }
54     void setCol(int col) { _col = col; }
55     int row() const { return _row; }
56     void setRow(int r) { _row = r; }
57
58     Length styleOrColWidth();
59
60     virtual bool requiresLayer();
61
62     virtual void calcMinMaxWidth();
63     virtual void calcWidth();
64     virtual void setWidth(int);
65     virtual void setStyle(RenderStyle*);
66
67     virtual bool expandsToEncloseOverhangingFloats() const { return true; }
68
69     int borderLeft() const;
70     int borderRight() const;
71     int borderTop() const;
72     int borderBottom() const;
73
74     CollapsedBorderValue collapsedLeftBorder(bool rtl) const;
75     CollapsedBorderValue collapsedRightBorder(bool rtl) const;
76     CollapsedBorderValue collapsedTopBorder() const;
77     CollapsedBorderValue collapsedBottomBorder() const;
78     virtual void collectBorders(DeprecatedValueList<CollapsedBorderValue>&);
79
80     virtual void updateFromElement();
81
82     virtual void layout();
83     
84     void setCellTopExtra(int p) { _topExtra = p; }
85     void setCellBottomExtra(int p) { _bottomExtra = p; }
86
87     virtual void paint(PaintInfo&, int tx, int ty);
88
89     void paintCollapsedBorder(GraphicsContext*, int x, int y, int w, int h);
90     
91     // lie about position to outside observers
92     virtual int yPos() const { return m_y + _topExtra; }
93
94     virtual void computeAbsoluteRepaintRect(IntRect&, bool f=false);
95     virtual bool absolutePosition(int& xPos, int& yPos, bool f = false);
96
97     virtual short baselinePosition(bool = false) const;
98
99     virtual int borderTopExtra() const { return _topExtra; }
100     virtual int borderBottomExtra() const { return _bottomExtra; }
101
102     RenderTable* table() const { return static_cast<RenderTable*>(parent()->parent()->parent()); }
103     RenderTableSection* section() const { return static_cast<RenderTableSection*>(parent()->parent()); }
104
105 #ifndef NDEBUG
106     virtual void dump(TextStream *stream, DeprecatedString ind = "") const;
107 #endif
108
109     void paintBackgroundsBehindCell(PaintInfo&, int tx, int ty, RenderObject* backgroundObject);
110
111 protected:
112     virtual void paintBoxDecorations(PaintInfo&, int tx, int ty);
113
114     int _row;
115     int _col;
116     int rSpan;
117     int cSpan;
118     int _topExtra : 31;
119     bool nWrap : 1;
120     int _bottomExtra : 31;
121     bool m_widthChanged : 1;
122     
123     int m_percentageHeight;
124 };
125
126 }
127
128 #endif