X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/93763ad5ba900aecb9220a36ebe7447313ea3e31..b0c4d5d79272961d6b3f4037454737ee055e94e7:/src/html/htmlcell.cpp diff --git a/src/html/htmlcell.cpp b/src/html/htmlcell.cpp index 8f4f0f50c0..4bed6f3f9c 100644 --- a/src/html/htmlcell.cpp +++ b/src/html/htmlcell.cpp @@ -15,17 +15,18 @@ #if wxUSE_HTML && wxUSE_STREAMS -#ifndef WXPRECOMP +#ifndef WX_PRECOMP + #include "wx/dynarray.h" #include "wx/brush.h" #include "wx/colour.h" #include "wx/dc.h" + #include "wx/settings.h" + #include "wx/module.h" + #include "wx/wxcrtvararg.h" #endif #include "wx/html/htmlcell.h" #include "wx/html/htmlwin.h" -#include "wx/settings.h" -#include "wx/module.h" -#include "wx/dynarray.h" #include @@ -219,7 +220,8 @@ wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const } -bool wxHtmlCell::AdjustPagebreak(int *pagebreak, int* WXUNUSED(known_pagebreaks), int WXUNUSED(number_of_pages)) const +bool wxHtmlCell::AdjustPagebreak(int *pagebreak, + wxArrayInt& WXUNUSED(known_pagebreaks)) const { if ((!m_CanLiveOnPagebreak) && m_PosY < *pagebreak && m_PosY + m_Height > *pagebreak) @@ -354,7 +356,11 @@ IMPLEMENT_ABSTRACT_CLASS(wxHtmlWordCell, wxHtmlCell) wxHtmlWordCell::wxHtmlWordCell(const wxString& word, const wxDC& dc) : wxHtmlCell() { m_Word = word; - dc.GetTextExtent(m_Word, &m_Width, &m_Height, &m_Descent); + wxCoord w, h, d; + dc.GetTextExtent(m_Word, &w, &h, &d); + m_Width = w; + m_Height = h; + m_Descent = d; SetCanLiveOnPagebreak(false); m_allowLinebreak = true; } @@ -699,32 +705,28 @@ int wxHtmlContainerCell::GetIndentUnits(int ind) const } - -bool wxHtmlContainerCell::AdjustPagebreak(int *pagebreak, int* known_pagebreaks, int number_of_pages) const +bool wxHtmlContainerCell::AdjustPagebreak(int *pagebreak, + wxArrayInt& known_pagebreaks) const { if (!m_CanLiveOnPagebreak) - return wxHtmlCell::AdjustPagebreak(pagebreak, known_pagebreaks, number_of_pages); + return wxHtmlCell::AdjustPagebreak(pagebreak, known_pagebreaks); - else - { - wxHtmlCell *c = GetFirstChild(); - bool rt = false; - int pbrk = *pagebreak - m_PosY; + wxHtmlCell *c = GetFirstChild(); + bool rt = false; + int pbrk = *pagebreak - m_PosY; - while (c) - { - if (c->AdjustPagebreak(&pbrk, known_pagebreaks, number_of_pages)) - rt = true; - c = c->GetNext(); - } - if (rt) - *pagebreak = pbrk + m_PosY; - return rt; + while (c) + { + if (c->AdjustPagebreak(&pbrk, known_pagebreaks)) + rt = true; + c = c->GetNext(); } + if (rt) + *pagebreak = pbrk + m_PosY; + return rt; } - void wxHtmlContainerCell::Layout(int w) { wxHtmlCell::Layout(w); @@ -887,12 +889,12 @@ void wxHtmlContainerCell::Layout(int w) if ( step > 0 ) { // first count the cells which will get extra space - int total = 0; + int total = -1; const wxHtmlCell *c; if ( line != cell ) { - for ( c = line->GetNext(); c != cell; c = c->GetNext() ) + for ( c = line; c != cell; c = c->GetNext() ) { if ( c->IsLinebreakAllowed() ) { @@ -904,11 +906,22 @@ void wxHtmlContainerCell::Layout(int w) // and now extra space to those cells which merit it if ( total ) { - // first cell on line is not moved: - line->SetPos(line->GetPosX() + s_indent, - line->GetPosY() + ypos); + // first visible cell on line is not moved: + while (line !=cell && !line->IsLinebreakAllowed()) + { + line->SetPos(line->GetPosX() + s_indent, + line->GetPosY() + ypos); + line = line->GetNext(); + } + + if (line != cell) + { + line->SetPos(line->GetPosX() + s_indent, + line->GetPosY() + ypos); + + line = line->GetNext(); + } - line = line->GetNext(); for ( int n = 0; line != cell; line = line->GetNext() ) { if ( line->IsLinebreakAllowed() )