- line->SetPos(line->GetPosX() + s_indent +
- (counter++ * step / xcnt),
- ypos + line->GetPosY());
- line = line->GetNext();
+ // first count the cells which will get extra space
+ int total = 0;
+
+ const wxHtmlCell *c,
+ *prev = NULL,
+ *next wxDUMMY_INITIALIZE(NULL);
+ for ( c = line; c != cell; prev = c, c = next )
+ {
+ next = c->GetNext();
+ if ( c->IsLinebreakAllowed() &&
+ (next == cell || next->IsLinebreakAllowed()) &&
+ (!prev || prev->IsLinebreakAllowed()) )
+ {
+ total++;
+ }
+ }
+
+ // and now extra space to those cells which merit it
+ if ( total )
+ {
+ prev =
+ next = NULL;
+ for ( int n = 0; line != cell; prev = line, line = line->GetNext() )
+ {
+ line->SetPos(line->GetPosX() + s_indent +
+ ((n * step) / total),
+ line->GetPosY() + ypos);
+
+ next = line->GetNext();
+ if ( line->IsLinebreakAllowed() &&
+ (next == cell ||
+ next->IsLinebreakAllowed()) &&
+ (!prev || prev->IsLinebreakAllowed()) )
+ {
+ // offset the next cell relative to this one
+ // thus increasing our size
+ n++;
+ }
+ }
+ }
+ else
+ {
+ // this will cause the code to enter "else branch" below:
+ step = 0;
+ }
+ }
+ // else branch:
+ if ( step <= 0 ) // no extra space to distribute
+ {
+ // just set the indent properly
+ while (line != cell)
+ {
+ line->SetPos(line->GetPosX() + s_indent,
+ line->GetPosY() + ypos);
+ line = line->GetNext();
+ }