X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d13b34d3f2be575d59747a5926000be7b28a45dc..63660cba0acbdefc2ac156ef74e899146d98c1c4:/src/html/htmlcell.cpp diff --git a/src/html/htmlcell.cpp b/src/html/htmlcell.cpp index f79224c539..d0f433f17b 100644 --- a/src/html/htmlcell.cpp +++ b/src/html/htmlcell.cpp @@ -205,7 +205,7 @@ wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const // wxHtmlCell::GetCursor() method simply returns wxNullCursor, so we // know that GetCursor() was overridden iff it returns valid cursor. wxCursor cur = GetCursor(); - if (cur.Ok()) + if (cur.IsOk()) return cur; #endif // WXWIN_COMPATIBILITY_2_6 @@ -220,11 +220,16 @@ wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const } -bool wxHtmlCell::AdjustPagebreak(int *pagebreak, - wxArrayInt& WXUNUSED(known_pagebreaks)) const +bool +wxHtmlCell::AdjustPagebreak(int *pagebreak, + const wxArrayInt& WXUNUSED(known_pagebreaks), + int pageHeight) const { - if ((!m_CanLiveOnPagebreak) && - m_PosY < *pagebreak && m_PosY + m_Height > *pagebreak) + // Notice that we always break the cells bigger than the page height here + // as otherwise we wouldn't be able to break them at all. + if ( m_Height <= pageHeight && + (!m_CanLiveOnPagebreak && + m_PosY < *pagebreak && m_PosY + m_Height > *pagebreak) ) { *pagebreak = m_PosY; return true; @@ -476,17 +481,10 @@ void wxHtmlWordCell::SetSelectionPrivPos(const wxDC& dc, wxHtmlSelection *s) con this == s->GetToCell() ? s->GetToPos() : wxDefaultPosition, p1, p2); - wxPoint p(0, m_Word.length()); - - if ( this == s->GetFromCell() ) - p.x = p1; // selection starts here - if ( this == s->GetToCell() ) - p.y = p2; // selection ends here - if ( this == s->GetFromCell() ) - s->SetFromPrivPos(p); + s->SetFromCharacterPos (p1); // selection starts here if ( this == s->GetToCell() ) - s->SetToPrivPos(p); + s->SetToCharacterPos (p2); // selection ends here } @@ -533,23 +531,18 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y, int w, h; int ofs = 0; - wxPoint priv = (this == s->GetFromCell()) ? - s->GetFromPrivPos() : s->GetToPrivPos(); - // NB: this is quite a hack: in order to compute selection boundaries // (in word's characters) we must know current font, which is only // possible inside rendering code. Therefore we update the // information here and store it in wxHtmlSelection so that // ConvertToText can use it later: - if ( priv == wxDefaultPosition ) + if ( !s->AreFromToCharacterPosSet () ) { SetSelectionPrivPos(dc, s); - priv = (this == s->GetFromCell()) ? - s->GetFromPrivPos() : s->GetToPrivPos(); } - int part1 = priv.x; - int part2 = priv.y; + int part1 = s->GetFromCell()==this ? s->GetFromCharacterPos() : 0; + int part2 = s->GetToCell()==this ? s->GetToCharacterPos() : m_Word.Length(); if ( part1 > 0 ) { @@ -634,9 +627,6 @@ wxString wxHtmlWordCell::ConvertToText(wxHtmlSelection *s) const { if ( s && (this == s->GetFromCell() || this == s->GetToCell()) ) { - wxPoint priv = this == s->GetFromCell() ? s->GetFromPrivPos() - : s->GetToPrivPos(); - // VZ: we may be called before we had a chance to re-render ourselves // and in this case GetFrom/ToPrivPos() is not set yet -- assume // that this only happens in case of a double/triple click (which @@ -644,10 +634,10 @@ wxString wxHtmlWordCell::ConvertToText(wxHtmlSelection *s) const // entire contents of the cell in this case // // TODO: but this really needs to be fixed in some better way later... - if ( priv != wxDefaultPosition ) + if ( s->AreFromToCharacterPosSet() ) { - const int part1 = priv.x; - const int part2 = priv.y; + const int part1 = s->GetFromCell()==this ? s->GetFromCharacterPos() : 0; + const int part2 = s->GetToCell()==this ? s->GetToCharacterPos() : m_Word.Length(); if ( part1 == part2 ) return wxEmptyString; return GetPartAsText(part1, part2); @@ -789,11 +779,13 @@ int wxHtmlContainerCell::GetIndentUnits(int ind) const } -bool wxHtmlContainerCell::AdjustPagebreak(int *pagebreak, - wxArrayInt& known_pagebreaks) const +bool +wxHtmlContainerCell::AdjustPagebreak(int *pagebreak, + const wxArrayInt& known_pagebreaks, + int pageHeight) const { if (!m_CanLiveOnPagebreak) - return wxHtmlCell::AdjustPagebreak(pagebreak, known_pagebreaks); + return wxHtmlCell::AdjustPagebreak(pagebreak, known_pagebreaks, pageHeight); wxHtmlCell *c = GetFirstChild(); bool rt = false; @@ -801,7 +793,7 @@ bool wxHtmlContainerCell::AdjustPagebreak(int *pagebreak, while (c) { - if (c->AdjustPagebreak(&pbrk, known_pagebreaks)) + if (c->AdjustPagebreak(&pbrk, known_pagebreaks, pageHeight)) rt = true; c = c->GetNext(); }