• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is part of the HTML rendering engine for KDE.
3  *
4  * Copyright (C) 2002 Lars Knoll (knoll@kde.org)
5  *           (C) 2002 Dirk Mueller (mueller@kde.org)
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef AutoTableLayout_h
24 #define AutoTableLayout_h
25 
26 #include "Length.h"
27 #include "TableLayout.h"
28 #include <wtf/Vector.h>
29 
30 namespace WebCore {
31 
32 class RenderTable;
33 class RenderTableCell;
34 
35 class AutoTableLayout : public TableLayout {
36 public:
37     AutoTableLayout(RenderTable*);
38     ~AutoTableLayout();
39 
40     virtual void calcPrefWidths(int& minWidth, int& maxWidth);
41     virtual void layout();
42 
43 protected:
44     void fullRecalc();
45     void recalcColumn(int effCol);
46 
47     void calcPercentages() const;
totalPercent()48     int totalPercent() const
49     {
50         if (m_percentagesDirty)
51             calcPercentages();
52         return m_totalPercent;
53     }
54 
55     int calcEffectiveWidth();
56 
57     void insertSpanCell(RenderTableCell*);
58 
59     struct Layout {
LayoutLayout60         Layout()
61             : minWidth(0)
62             , maxWidth(0)
63             , effMinWidth(0)
64             , effMaxWidth(0)
65             , calcWidth(0)
66             , emptyCellsOnly(true) {}
67         Length width;
68         Length effWidth;
69         int minWidth;
70         int maxWidth;
71         int effMinWidth;
72         int effMaxWidth;
73         int calcWidth;
74         bool emptyCellsOnly;
75     };
76 
77     Vector<Layout, 4> m_layoutStruct;
78     Vector<RenderTableCell*, 4> m_spanCells;
79     bool m_hasPercent : 1;
80     mutable bool m_percentagesDirty : 1;
81     mutable bool m_effWidthDirty : 1;
82     mutable unsigned short m_totalPercent;
83 };
84 
85 } // namespace WebCore
86 
87 #endif // AutoTableLayout_h
88