X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/848c4eb27bacb870d97385560124970b84ee4d72..0331b385a81f3dbda2ca1683c7160a9be9e0847f:/src/html/htmlcell.cpp diff --git a/src/html/htmlcell.cpp b/src/html/htmlcell.cpp index 8ea2197716..709938cffb 100644 --- a/src/html/htmlcell.cpp +++ b/src/html/htmlcell.cpp @@ -285,7 +285,6 @@ void wxHtmlWordCell::Split(wxDC& dc, wxPoint pt2 = (selTo == wxDefaultPosition) ? wxPoint(m_Width, wxDefaultCoord) : selTo - GetAbsPos(); - wxCoord charW, charH; unsigned len = m_Word.length(); unsigned i = 0; pos1 = 0; @@ -298,6 +297,14 @@ void wxHtmlWordCell::Split(wxDC& dc, pt2.x = m_Width; // before selection: +#ifdef __WXMAC__ + // implementation using PartialExtents to support fractional widths + wxArrayInt widths ; + dc.GetPartialTextExtents(m_Word,widths) ; + while( i < len && pt1.x >= widths[i] ) + i++ ; +#else // __WXMAC__ + wxCoord charW, charH; while ( pt1.x > 0 && i < len ) { dc.GetTextExtent(m_Word[i], &charW, &charH); @@ -308,9 +315,14 @@ void wxHtmlWordCell::Split(wxDC& dc, i++; } } +#endif // __WXMAC__/!__WXMAC__ // in selection: unsigned j = i; +#ifdef __WXMAC__ + while( j < len && pt2.x >= widths[j] ) + j++ ; +#else // __WXMAC__ pos2 = pos1; pt2.x -= pos2; while ( pt2.x > 0 && j < len ) @@ -323,6 +335,7 @@ void wxHtmlWordCell::Split(wxDC& dc, j++; } } +#endif // __WXMAC__/!__WXMAC__ pos1 = i; pos2 = j; @@ -729,7 +742,7 @@ void wxHtmlContainerCell::Layout(int w) } while (nextCell && !nextCell->IsLinebreakAllowed()); } - // force new line if occured: + // force new line if occurred: if ((cell == NULL) || (xpos + nextWordWidth > s_width && cell->IsLinebreakAllowed())) { @@ -902,7 +915,7 @@ void wxHtmlContainerCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2, dc.SetPen(*wxRED_PEN); dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height); #endif - + int xlocal = x + m_PosX; int ylocal = y + m_PosY; @@ -936,7 +949,7 @@ void wxHtmlContainerCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2, // draw container's contents: for (wxHtmlCell *cell = m_Cells; cell; cell = cell->GetNext()) { - + // optimize drawing: don't render off-screen content: if ((ylocal + cell->GetPosY() <= view_y2) && (ylocal + cell->GetPosY() + cell->GetHeight() > view_y1)) @@ -1237,7 +1250,8 @@ void wxHtmlContainerCell::RemoveExtraSpacing(bool top, bool bottom) cont = (wxHtmlContainerCell*)c; if ( IsEmptyContainer(cont) ) { - cont->SetIndent(0, wxHTML_INDENT_VERTICAL); } + cont->SetIndent(0, wxHTML_INDENT_VERTICAL); + } else { cont->RemoveExtraSpacing(false, true);