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