if (left)
*left = m_PosX;
if (right)
- *right = m_PosX + m_Width - 1;
+ *right = m_PosX + m_Width;
}
void wxHtmlContainerCell::Layout(int w)
{
- if (m_LastLayout == w)
+ wxHtmlCell::Layout(w);
+
+ if (m_LastLayout == w) return;
+
+ // VS: Any attempt to layout with negative or zero width leads to hell,
+ // but we can't ignore such attempts completely, since it sometimes
+ // happen (e.g. when trying how small a table can be). The best thing we
+ // can do is to set the width of child cells to zero
+ if (w < 1)
{
- wxHtmlCell::Layout(w);
- return;
+ m_Width = 0;
+ for (wxHtmlCell *cell = m_Cells; cell; cell = cell->GetNext())
+ cell->Layout(0);
+ // this does two things: it recursively calls this code on all child
+ // contrainers and resets children's position to (0,0)
+ return;
}
wxHtmlCell *cell = m_Cells, *line = m_Cells;
if (m_Width < MaxLineWidth) m_Width = MaxLineWidth;
m_LastLayout = w;
-
- wxHtmlCell::Layout(w);
}
cright = r;
}
+ cleft -= (m_IndentLeft < 0) ? (-m_IndentLeft * m_Width / 100) : m_IndentLeft;
+ cright += (m_IndentRight < 0) ? (-m_IndentRight * m_Width / 100) : m_IndentRight;
+
if (left)
*left = cleft;
if (right)
int left, right, width;
- m_ColsInfo[0].minWidth = 0; // avoid recursion
- Layout(1);
for (int c = 0; c < m_NumCols; c++)
{
for (int r = 0; r < m_NumRows; r++)
cellStruct& cell = m_CellInfo[r][c];
if (cell.flag == cellUsed)
{
+ cell.cont->Layout(2*m_Padding + 1);
cell.cont->GetHorizontalConstraints(&left, &right);
- width = right - left + 1;
+ width = right - left;
+ width -= (cell.colspan-1) * m_Spacing;
// HTML 4.0 says it is acceptable to distribute min/max
// width of spanning cells evently
width /= cell.colspan;
- width += m_Spacing + 2*m_Padding;
for (int j = 0; j < cell.colspan; j++)
if (width > m_ColsInfo[c+j].minWidth)
m_ColsInfo[c+j].minWidth = width;
void wxHtmlTableCell::Layout(int w)
{
ComputeMinMaxWidths();
+
+ wxHtmlCell::Layout(w);
/*