X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/999836aacade840a5d9a0cbb5fad7b1d4de62c93..413844c2d4a83a8fa895c52a31d7a1b764d9cfed:/src/html/htmlcell.cpp?ds=sidebyside diff --git a/src/html/htmlcell.cpp b/src/html/htmlcell.cpp index c62a65ace0..3bd6c6c2c3 100644 --- a/src/html/htmlcell.cpp +++ b/src/html/htmlcell.cpp @@ -87,6 +87,8 @@ GetSelectedTextBgColour(const wxColour& WXUNUSED(clr)) // wxHtmlCell //----------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxHtmlCell, wxObject) + wxHtmlCell::wxHtmlCell() : wxObject() { m_Next = NULL; @@ -252,6 +254,8 @@ bool wxHtmlCell::IsBefore(wxHtmlCell *cell) const // wxHtmlWordCell //----------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxHtmlWordCell, wxHtmlCell) + wxHtmlWordCell::wxHtmlWordCell(const wxString& word, wxDC& dc) : wxHtmlCell() { m_Word = word; @@ -519,11 +523,13 @@ wxCursor wxHtmlWordCell::GetCursor() const // wxHtmlContainerCell //----------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxHtmlContainerCell, wxHtmlCell) wxHtmlContainerCell::wxHtmlContainerCell(wxHtmlContainerCell *parent) : wxHtmlCell() { m_Cells = m_LastCell = NULL; m_Parent = parent; + m_MaxTotalWidth = 0; if (m_Parent) m_Parent->InsertCell(this); m_AlignHor = wxHTML_ALIGN_LEFT; m_AlignVer = wxHTML_ALIGN_BOTTOM; @@ -639,6 +645,8 @@ void wxHtmlContainerCell::Layout(int w) int ysizeup = 0, ysizedown = 0; int MaxLineWidth = 0; int xcnt = 0; + int curLineWidth = 0; + m_MaxTotalWidth = 0; /* @@ -693,6 +701,20 @@ void wxHtmlContainerCell::Layout(int w) // layout nonbreakable run of cells: cell->SetPos(xpos, ybasicpos + cell->GetDescent()); xpos += cell->GetWidth(); + if (!cell->IsTerminalCell()) + { + // Container cell indicates new line + if (curLineWidth > m_MaxTotalWidth) + m_MaxTotalWidth = curLineWidth; + + if (wxMax(cell->GetWidth(), cell->GetMaxTotalWidth()) > m_MaxTotalWidth) + m_MaxTotalWidth = cell->GetMaxTotalWidth(); + curLineWidth = 0; + } + else + // Normal cell, add maximum cell width to line width + curLineWidth += cell->GetMaxTotalWidth(); + cell = cell->GetNext(); xcnt++; @@ -780,6 +802,10 @@ void wxHtmlContainerCell::Layout(int w) m_Height = m_MinHeight; } + if (curLineWidth > m_MaxTotalWidth) + m_MaxTotalWidth = curLineWidth; + + m_MaxTotalWidth += s_indent + ((m_IndentRight < 0) ? (-m_IndentRight * m_Width / 100) : m_IndentRight); MaxLineWidth += s_indent + ((m_IndentRight < 0) ? (-m_IndentRight * m_Width / 100) : m_IndentRight); if (m_Width < MaxLineWidth) m_Width = MaxLineWidth; @@ -1164,6 +1190,8 @@ void wxHtmlContainerCell::RemoveExtraSpacing(bool top, bool bottom) // wxHtmlColourCell // -------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxHtmlColourCell, wxHtmlCell) + void wxHtmlColourCell::Draw(wxDC& dc, int x, int y, int WXUNUSED(view_y1), int WXUNUSED(view_y2), @@ -1210,6 +1238,8 @@ void wxHtmlColourCell::DrawInvisible(wxDC& dc, // wxHtmlFontCell // --------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxHtmlFontCell, wxHtmlCell) + void wxHtmlFontCell::Draw(wxDC& dc, int WXUNUSED(x), int WXUNUSED(y), int WXUNUSED(view_y1), int WXUNUSED(view_y2), @@ -1235,6 +1265,8 @@ void wxHtmlFontCell::DrawInvisible(wxDC& dc, int WXUNUSED(x), int WXUNUSED(y), // wxHtmlWidgetCell // --------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxHtmlWidgetCell, wxHtmlCell) + wxHtmlWidgetCell::wxHtmlWidgetCell(wxWindow *wnd, int w) { int sx, sy;