remove extra space at top and bottom of the page if present
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22041 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
ef1b8570d5
commit
ace0fab4f1
@ -418,6 +418,11 @@ public:
|
||||
|
||||
virtual wxHtmlCell *GetFirstTerminal() const;
|
||||
virtual wxHtmlCell *GetLastTerminal() const;
|
||||
|
||||
|
||||
// Removes indentation on top or bottom of the container (i.e. above or
|
||||
// below first/last terminal cell). For internal use only.
|
||||
void RemoveExtraSpacing(bool top, bool bottom);
|
||||
|
||||
protected:
|
||||
void UpdateRenderingStatePre(wxHtmlRenderingInfo& info,
|
||||
|
@ -145,7 +145,7 @@ private:
|
||||
// This list is used to initialize m_Handlers member.
|
||||
|
||||
wxHtmlContainerCell *m_Container;
|
||||
// actual container. See Open/CloseContainer for details.
|
||||
// current container. See Open/CloseContainer for details.
|
||||
|
||||
int m_FontBold, m_FontItalic, m_FontUnderlined, m_FontFixed; // this is not TRUE,FALSE but 1,0, we need it for indexing
|
||||
int m_FontSize; /* -2 to +4, 0 is default */
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "wx/html/htmlwin.h"
|
||||
#include "wx/settings.h"
|
||||
#include "wx/module.h"
|
||||
#include "wx/dynarray.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@ -373,6 +374,7 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
|
||||
wxHtmlRenderingInfo& info)
|
||||
{
|
||||
#if 0 // useful for debugging
|
||||
dc.SetPen(*wxBLACK_PEN);
|
||||
dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height);
|
||||
#endif
|
||||
|
||||
@ -811,6 +813,10 @@ void wxHtmlContainerCell::UpdateRenderingStatePost(wxHtmlRenderingInfo& info,
|
||||
void wxHtmlContainerCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2,
|
||||
wxHtmlRenderingInfo& info)
|
||||
{
|
||||
#if 0 // useful for debugging
|
||||
dc.SetPen(*wxRED_PEN);
|
||||
dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height);
|
||||
#endif
|
||||
// container visible, draw it:
|
||||
if ((y + m_PosY <= view_y2) && (y + m_PosY + m_Height > view_y1))
|
||||
{
|
||||
@ -1060,9 +1066,14 @@ wxHtmlCell *wxHtmlContainerCell::GetLastTerminal() const
|
||||
if ( c )
|
||||
return c;
|
||||
|
||||
wxHtmlCell *ctmp;
|
||||
wxHtmlCell *c2 = NULL;
|
||||
for (c = m_Cells; c; c = c->GetNext())
|
||||
c2 = c->GetLastTerminal();
|
||||
{
|
||||
ctmp = c->GetLastTerminal();
|
||||
if ( ctmp )
|
||||
c2 = ctmp;
|
||||
}
|
||||
return c2;
|
||||
}
|
||||
else
|
||||
@ -1070,6 +1081,84 @@ wxHtmlCell *wxHtmlContainerCell::GetLastTerminal() const
|
||||
}
|
||||
|
||||
|
||||
static bool IsEmptyContainer(wxHtmlContainerCell *cell)
|
||||
{
|
||||
for ( wxHtmlCell *c = cell->GetFirstChild(); c; c = c->GetNext() )
|
||||
{
|
||||
if ( !c->IsTerminalCell() || !c->IsFormattingCell() )
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxHtmlContainerCell::RemoveExtraSpacing(bool top, bool bottom)
|
||||
{
|
||||
if ( top )
|
||||
SetIndent(0, wxHTML_INDENT_TOP);
|
||||
if ( bottom )
|
||||
SetIndent(0, wxHTML_INDENT_BOTTOM);
|
||||
|
||||
if ( m_Cells )
|
||||
{
|
||||
wxHtmlCell *c;
|
||||
wxHtmlContainerCell *cont;
|
||||
if ( top )
|
||||
{
|
||||
for ( c = m_Cells; c; c = c->GetNext() )
|
||||
{
|
||||
if ( c->IsTerminalCell() )
|
||||
{
|
||||
if ( !c->IsFormattingCell() )
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
cont = (wxHtmlContainerCell*)c;
|
||||
if ( IsEmptyContainer(cont) )
|
||||
{
|
||||
cont->SetIndent(0, wxHTML_INDENT_VERTICAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
cont->RemoveExtraSpacing(true, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( bottom )
|
||||
{
|
||||
wxArrayPtrVoid arr;
|
||||
for ( c = m_Cells; c; c = c->GetNext() )
|
||||
arr.Add((void*)c);
|
||||
|
||||
for ( int i = arr.GetCount() - 1; i >= 0; i--)
|
||||
{
|
||||
c = (wxHtmlCell*)arr[i];
|
||||
if ( c->IsTerminalCell() )
|
||||
{
|
||||
if ( !c->IsFormattingCell() )
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
cont = (wxHtmlContainerCell*)c;
|
||||
if ( IsEmptyContainer(cont) )
|
||||
{
|
||||
cont->SetIndent(0, wxHTML_INDENT_VERTICAL); }
|
||||
else
|
||||
{
|
||||
cont->RemoveExtraSpacing(false, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
@ -208,6 +208,8 @@ wxObject* wxHtmlWinParser::GetProduct()
|
||||
|
||||
top = m_Container;
|
||||
while (top->GetParent()) top = top->GetParent();
|
||||
top->RemoveExtraSpacing(true, true);
|
||||
|
||||
return top;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user