// Author: Vaclav Slavik
// RCS-ID: $Id$
// Copyright: (c) 1999 Vaclav Slavik
-// Licence: wxWindows Licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
m_Next = NULL;
m_Parent = NULL;
m_Width = m_Height = m_Descent = 0;
- m_CanLiveOnPagebreak = TRUE;
+ m_CanLiveOnPagebreak = true;
m_Link = NULL;
}
m_PosY < *pagebreak && m_PosY + m_Height > *pagebreak)
{
*pagebreak = m_PosY;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
{
m_Word = word;
dc.GetTextExtent(m_Word, &m_Width, &m_Height, &m_Descent);
- SetCanLiveOnPagebreak(FALSE);
+ SetCanLiveOnPagebreak(false);
m_allowLinebreak = true;
}
wxPoint pt1 = (selFrom == wxDefaultPosition) ?
wxDefaultPosition : selFrom - GetAbsPos();
wxPoint pt2 = (selTo == wxDefaultPosition) ?
- wxPoint(m_Width, -1) : selTo - GetAbsPos();
+ wxPoint(m_Width, wxDefaultPosition.y) : selTo - GetAbsPos();
wxCoord charW, charH;
unsigned len = m_Word.length();
{
#if 0 // useful for debugging
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
bool drawSelectionAfterCell = false;
m_AlignVer = wxHTML_ALIGN_BOTTOM;
m_IndentLeft = m_IndentRight = m_IndentTop = m_IndentBottom = 0;
m_WidthFloat = 100; m_WidthFloatUnits = wxHTML_UNITS_PERCENT;
- m_UseBkColour = FALSE;
- m_UseBorder = FALSE;
+ m_UseBkColour = false;
+ m_UseBorder = false;
m_MinHeight = 0;
m_MinHeightAlign = wxHTML_ALIGN_TOP;
m_LastLayout = -1;
int wxHtmlContainerCell::GetIndentUnits(int ind) const
{
- bool p = FALSE;
+ bool p = false;
if (ind & wxHTML_INDENT_LEFT) p = m_IndentLeft < 0;
else if (ind & wxHTML_INDENT_RIGHT) p = m_IndentRight < 0;
else if (ind & wxHTML_INDENT_TOP) p = m_IndentTop < 0;
else
{
wxHtmlCell *c = GetFirstChild();
- bool rt = FALSE;
+ bool rt = false;
int pbrk = *pagebreak - m_PosY;
while (c)
{
if (c->AdjustPagebreak(&pbrk, known_pagebreaks, number_of_pages))
- rt = TRUE;
+ rt = true;
c = c->GetNext();
}
if (rt)
int s_width, nextWordWidth, s_indent;
int ysizeup = 0, ysizedown = 0;
int MaxLineWidth = 0;
- int xcnt = 0;
int curLineWidth = 0;
m_MaxTotalWidth = 0;
curLineWidth += cell->GetMaxTotalWidth();
cell = cell->GetNext();
- xcnt++;
// compute length of the next word that would be added:
nextWordWidth = 0;
// an added complication is that some cells have fixed size and
// shouldn't get any increment (it so happens that these cells
// 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;
+ int step = s_width - xpos;
if ( step > 0 )
{
// first count the cells which will get extra space
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++;
+ }
}
// and now extra space to those cells which merit it
if ( total )
{
- for ( int n = 0; line != cell; line = line->GetNext() )
+ 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);
- if ( line->IsLinebreakAllowed() )
+ 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
}
}
}
+ else
+ {
+ // this will cause the code to enter "else branch" below:
+ step = 0;
+ }
}
- else // no extra space to distribute
+ // else branch:
+ if ( step <= 0 ) // no extra space to distribute
{
// just set the indent properly
while (line != cell)
}
ypos += ysizedown;
- xpos = xcnt = 0;
+ xpos = 0;
ysizeup = ysizedown = 0;
line = cell;
}