X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fc7a2a602b4bd9308be21bc07e40a680f483438e..d284c07534af75014345a80363a7036897b5e388:/src/html/htmlcell.cpp?ds=sidebyside diff --git a/src/html/htmlcell.cpp b/src/html/htmlcell.cpp index e692487a1d..3bd6c6c2c3 100644 --- a/src/html/htmlcell.cpp +++ b/src/html/htmlcell.cpp @@ -7,7 +7,7 @@ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "htmlcell.h" #endif @@ -62,8 +62,8 @@ void wxHtmlSelection::Set(const wxHtmlCell *fromCell, const wxHtmlCell *toCell) wxPoint p2 = toCell ? toCell->GetAbsPos() : wxDefaultPosition; if ( toCell ) { - p2.x += toCell->GetWidth()-1; - p2.y += toCell->GetHeight()-1; + p2.x += toCell->GetWidth(); + p2.y += toCell->GetHeight(); } Set(p1, fromCell, p2, toCell); } @@ -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++; @@ -752,7 +774,6 @@ void wxHtmlContainerCell::Layout(int w) ypos + line->GetPosY()); line = line->GetNext(); } - xcnt++; } ypos += ysizedown; @@ -781,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; @@ -968,11 +993,9 @@ const wxHtmlCell* wxHtmlContainerCell::Find(int condition, const void* param) co { if (m_Cells) { - const wxHtmlCell *r = NULL; - for (wxHtmlCell *cell = m_Cells; cell; cell = cell->GetNext()) { - r = cell->Find(condition, param); + const wxHtmlCell *r = cell->Find(condition, param); if (r) return r; } } @@ -1167,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), @@ -1213,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), @@ -1238,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;