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