X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2755d437502af9c4bc3ae54f6a559acdd6434241..bdbcded6a32fc216283b9af03267e02fc915448f:/src/html/m_tables.cpp diff --git a/src/html/m_tables.cpp b/src/html/m_tables.cpp index 7d125edf1c..d1abf09252 100644 --- a/src/html/m_tables.cpp +++ b/src/html/m_tables.cpp @@ -7,7 +7,7 @@ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation #endif @@ -15,7 +15,7 @@ #include "wx/defs.h" #if wxUSE_HTML && wxUSE_STREAMS -#ifdef __BORDLANDC__ +#ifdef __BORLANDC__ #pragma hdrstop #endif @@ -125,6 +125,8 @@ private: // Computes minimal and maximal widths of columns. Needs to be called // only once, before first Layout(). void ComputeMinMaxWidths(); + + DECLARE_NO_COPY_CLASS(wxHtmlTableCell) }; @@ -351,8 +353,6 @@ void wxHtmlTableCell::ComputeMinMaxWidths() { if (m_NumCols == 0 || m_ColsInfo[0].minWidth != -1) return; - int left, right, width; - for (int c = 0; c < m_NumCols; c++) { for (int r = 0; r < m_NumRows; r++) @@ -361,11 +361,9 @@ void wxHtmlTableCell::ComputeMinMaxWidths() if (cell.flag == cellUsed) { cell.cont->Layout(2*m_Padding + 1); - cell.cont->GetHorizontalConstraints(&left, &right); - width = right - left; + int width = cell.cont->GetWidth(); 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; for (int j = 0; j < cell.colspan; j++) if (width > m_ColsInfo[c+j].minWidth) @@ -435,13 +433,18 @@ void wxHtmlTableCell::Layout(int w) wpix -= wtemp; // 1c. setup defalut columns (no width specification supplied): - // NOTE! This algorithm doesn't conform to HTML standard : it assigns equal widths - // instead of optimal + // FIXME: This algorithm doesn't conform to HTML standard : it assigns + // equal widths instead of optimal for (i = j = 0; i < m_NumCols; i++) if (m_ColsInfo[i].width == 0) j++; for (i = 0; i < m_NumCols; i++) if (m_ColsInfo[i].width == 0) - m_ColsInfo[i].pixwidth = wpix / j; + { + // FIXME: this is not optimal, because if we allocate more than + // wpix/j pixels to one column, we should try to allocate + // smaller place to other columns + m_ColsInfo[i].pixwidth = wxMax(wpix/j, m_ColsInfo[i].minWidth); + } } /* 2. compute positions of columns: */ @@ -507,6 +510,15 @@ void wxHtmlTableCell::Layout(int w) m_Height = ypos[m_NumRows]; delete[] ypos; } + + /* 4. adjust table's width if it was too small: */ + if (m_NumCols > 0) + { + int twidth = m_ColsInfo[m_NumCols-1].leftpos + + m_ColsInfo[m_NumCols-1].pixwidth + m_Spacing; + if (twidth > m_Width) + m_Width = twidth; + } }