Fix for 7837, make opacity work with table rows. Make transparent backgrounds
[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
64     virtual void calcMinMaxWidth();
65     virtual void calcWidth();
66     virtual void setWidth(int);
67     virtual void setStyle(RenderStyle*);
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(QValueList<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& i, int tx, int ty);
88
89     void paintCollapsedBorder(GraphicsContext* p, 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 #if !NDEBUG
106     virtual void dump(QTextStream *stream, QString ind = "") const;
107 #endif
108
109     virtual IntRect getAbsoluteRepaintRect();
110     
111     void paintBackgroundsBehindCell(PaintInfo&, int tx, int ty, RenderObject* backgroundObject);
112
113 protected:
114     virtual void paintBoxDecorations(PaintInfo&, 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
130 #endif