really fixed handling of non-text cells in justified paragraphs

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27359 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2004-05-20 00:08:15 +00:00
parent 6c43b66ed0
commit 4dd9ae575f

View File

@@ -381,7 +381,7 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
{ {
#if 0 // useful for debugging #if 0 // useful for debugging
dc.SetPen(*wxBLACK_PEN); dc.SetPen(*wxBLACK_PEN);
dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height); dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width /* VZ: +1? */ ,m_Height);
#endif #endif
bool drawSelectionAfterCell = false; bool drawSelectionAfterCell = false;
@@ -770,29 +770,47 @@ void wxHtmlContainerCell::Layout(int w)
// an added complication is that some cells have fixed size and // an added complication is that some cells have fixed size and
// shouldn't get any increment (it so happens that these cells // shouldn't get any increment (it so happens that these cells
// also don't allow line break on them which provides with an // also don't allow line break on them which provides with an
// easy way to test for this) // easy way to test for this) -- and neither should the cells
// adjacent to them as this could result in a visible space
// between two cells separated by, e.g. font change, cell which
// is wrong
const int step = s_width - xpos; const int step = s_width - xpos;
if ( step > 0 ) if ( step > 0 )
{ {
// first count the cells which will get extra space // first count the cells which will get extra space
int total = 0; int total = 0;
for ( wxHtmlCell *c = line; c != cell; c = c->GetNext() )
const wxHtmlCell *c,
*prev = NULL,
*next = NULL;
for ( c = line; c != cell; prev = c, c = next )
{ {
if ( c->IsLinebreakAllowed() ) next = c->GetNext();
if ( c->IsLinebreakAllowed() &&
(next == cell || next->IsLinebreakAllowed()) &&
(!prev || prev->IsLinebreakAllowed()) )
{
total++; total++;
}
} }
// and now extra space to those cells which merit it // and now extra space to those cells which merit it
if ( total ) if ( total )
{ {
prev =
next = NULL;
for ( int n = 0; line != cell; line = line->GetNext() ) for ( int n = 0; line != cell; line = line->GetNext() )
{ {
line->SetPos(line->GetPosX() + s_indent + line->SetPos(line->GetPosX() + s_indent +
((n * step) / total), ((n * step) / total),
line->GetPosY() + ypos); line->GetPosY() + ypos);
if ( line->IsLinebreakAllowed() ) next = line->GetNext();
if ( line->IsLinebreakAllowed() &&
(next == cell ||
next->IsLinebreakAllowed()) &&
(!prev || prev->IsLinebreakAllowed()) )
{ {
// offset the next cell relative to this one // offset the next cell relative to this one
// thus increasing our size // thus increasing our size