2006-01-19 Eric Seidel <eseidel@apple.com>
[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 #ifndef RenderTableCell_H
27 #define RenderTableCell_H
28
29 #include "RenderBlock.h"
30 #include "RenderTable.h"
31 #include "RenderTableSection.h"
32
33 namespace WebCore {
34
35 class RenderTableCell : public RenderBlock
36 {
37 public:
38     RenderTableCell(DOM::NodeImpl* node);
39
40     virtual void destroy();
41
42     virtual const char *renderName() const { return "RenderTableCell"; }
43     virtual bool isTableCell() const { return true; }
44
45     // overrides RenderObject
46     virtual bool requiresLayer();
47
48     // ### FIX these two...
49     int cellIndex() const { return 0; }
50     void setCellIndex(int) { }
51
52     int colSpan() const { return cSpan; }
53     void setColSpan(int c) { cSpan = c; }
54
55     int rowSpan() const { return rSpan; }
56     void setRowSpan(int r) { rSpan = r; }
57
58     int col() const { return _col; }
59     void setCol(int col) { _col = col; }
60     int row() const { return _row; }
61     void setRow(int r) { _row = r; }
62
63     Length styleOrColWidth();
64
65     // overrides
66     virtual void calcMinMaxWidth();
67     virtual void calcWidth();
68     virtual void setWidth(int width);
69     virtual void setStyle(RenderStyle *style);
70
71     int borderLeft() const;
72     int borderRight() const;
73     int borderTop() const;
74     int borderBottom() const;
75
76     CollapsedBorderValue collapsedLeftBorder() const;
77     CollapsedBorderValue collapsedRightBorder() const;
78     CollapsedBorderValue collapsedTopBorder() const;
79     CollapsedBorderValue collapsedBottomBorder() const;
80     virtual void collectBorders(QValueList<CollapsedBorderValue>& borderStyles);
81
82     virtual void updateFromElement();
83
84     virtual void layout();
85     
86     void setCellTopExtra(int p) { _topExtra = p; }
87     void setCellBottomExtra(int p) { _bottomExtra = p; }
88
89     virtual void paint(PaintInfo& i, int tx, int ty);
90
91     void paintCollapsedBorder(QPainter* p, int x, int y, int w, int h);
92     
93     // lie position to outside observers
94     virtual int yPos() const { return m_y + _topExtra; }
95
96     virtual void computeAbsoluteRepaintRect(IntRect& r, bool f=false);
97     virtual bool absolutePosition(int &xPos, int &yPos, bool f = false);
98
99     virtual short baselinePosition(bool = false) const;
100
101     virtual int borderTopExtra() const { return _topExtra; }
102     virtual int borderBottomExtra() const { return _bottomExtra; }
103
104     RenderTable *table() const { return static_cast<RenderTable *>(parent()->parent()->parent()); }
105     RenderTableSection *section() const { return static_cast<RenderTableSection *>(parent()->parent()); }
106
107 #ifndef NDEBUG
108     virtual void dump(QTextStream *stream, QString ind = "") const;
109 #endif
110
111     virtual IntRect getAbsoluteRepaintRect();
112     
113 protected:
114     virtual void paintBoxDecorations(PaintInfo& i, int _tx, int _ty);
115     
116     int _row;
117     int _col;
118     int rSpan;
119     int cSpan;
120     int _topExtra : 31;
121     bool nWrap : 1;
122     int _bottomExtra : 31;
123     bool m_widthChanged : 1;
124     
125     int m_percentageHeight;
126 };
127
128 }
129 #endif